Build multi-modal AI applications using our new open-source Vision AI SDK.

Create Speech-to-Text Experiences with ElevenLabs Scribe v2 Realtime & Vision Agents

2 min read
Amos G.
Amos G.
Published February 6, 2026

Scribe v2 Realtime is a low-latency speech-to-text model with 90+ languages support and low error rate in different languages. In our YouTube preview, Scribe v2 Realtime transcribes both user speech and the agent's own voice output for real-time note-taking:

Here's how to build the same speech-to-text experience yourself in Python under 5 minutes.

Components of the Voice System

Prepare Your Environment

Save these credentials in the .env of your Python project or permanently on your machine in for example, .zprofile on the Mac.

bash
1
2
3
4
5
ELEVENLABS_API_KEY=... GOOGLE_API_KEY=... STREAM_API_KEY=... STREAM_API_SECRET=... EXAMPLE_BASE_URL=https://demo.visionagents.ai/

Create a New Project With uv

shell
1
2
3
4
5
uv init scribe-realtime-agent cd scribe-realtime-agent uv add vision-agents uv add "vision-agents[getstream, gemini, elevenlabs, smart-turn]"

In your uv-powered project, you should install Vision Agents and the required plugins as shown in the command above.

Create and Run the Voice Agent

Replace the content of your project's main.py with this sample code.

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from vision_agents.core import Agent, AgentLauncher, User, Runner from vision_agents.plugins import getstream, gemini, elevenlabs async def create_agent(**kwargs) -> Agent: return Agent( edge=getstream.Edge(), agent_user=User(name="Assistant", id="agent"), instructions="You're a helpful voice assistant. Be concise.", llm=gemini.LLM("gemini-2.5-flash"), stt=elevenlabs.STT(model_id="scribe_v2_realtime"), tts=elevenlabs.TTS(), ) async def join_call(agent: Agent, call_type: str, call_id: str, **kwargs) -> None: call = await agent.create_call(call_type, call_id) async with agent.join(call): await agent.simple_response("Greet the user") await agent.finish() if __name__ == "__main__": Runner(AgentLauncher(create_agent=create_agent, join_call=join_call)).cli()

The Python script will launch the voice agent in your browser when you run it. The Scribe v2 Realtime model will transcribe the agent's voice and yours in while speaking.

Vision Agents and Plugins

Scaling WebRTC Video to 100,000 Participants
View Stream's latest Video API benchmark and the architecture that powers performance at scale.