Voice over your video
Add narration to a video with ElevenLabs, OpenAI TTS, Deepgram, Cartesia or Fish Audio: pick a voice, generate the line, and mix it into the final cut.
Voice over your video
Five providers, one workflow. Pick the right one:
| Provider | Strength | Pricing tier |
| ElevenLabs | Highest quality + voice cloning | $$ |
| OpenAI TTS-1 | Fast, reliable, six built-in voices | $ |
| Deepgram Aura 2 | Lowest latency, cheapest | $ |
| Cartesia Sonic 3.6 | Ultra-low latency, large voice library | $ |
| Fish Audio | Multilingual, big community library | $ |
Cartesia retired Sonic 2: requests for cartesia-sonic-2 are served by
cartesia-sonic-3.6 with the same voice ids.
Agents: discover valid voice ids first
Call list_voices before generate_voice. It returns every built-in
voice with its voiceModel + exact voiceId (e.g. openai-tts-1 → nova,
deepgram-aura-2 → aura-2-thalia-en). Voice ids are provider-specific —
passing the wrong scheme (e.g. aura to Deepgram) safely falls back to that
provider's default voice, but using the exact id gives you the voice you want.
Pull your voice library
1. Add the provider's key in Settings → Keys.
2. Visit /app/voices. Hit Sync on the provider's row. Your library
lands in the grid.
3. Click ▶ on any voice to preview.
Generate audio for a shot
In the shot inspector, expand Avatar. The audio row has two tabs:
- Upload — drop an mp3/wav you already have.
- From script — paste text, pick a voice, hit Generate. The selected
- provider synthesizes (via your key on BYOK, or Varosity Credits), audio
- uploads to Storage, attached to the shot in one click.
Voice cloning
There is no clone button on /app/voices yet. Two ways to get a cloned
voice into your library today:
- API / agents —
POST https://varosity.ai/api/v1/voiceswith -
{ "name": "…", "sampleUrls": ["https://…/sample.mp3"] }(public audio - URLs) returns a
voiceIdyou can pass straight to -
POST /api/v1/tts. The MCP tool isclone_voice; from the CLI, -
varosity voices clone <name> <audio-url>.... - Provider UI — clone in ElevenLabs, then hit Sync on
-
/app/voicesto pull it in.
Tips
- Keep narration scripts under 30 seconds per shot. Longer reads stretch
- past video durations and clip awkwardly.
- For a talking head that lip-syncs to your voiceover, use the shot's
- Avatar section in Full frame mode instead of TTS over a separate
- clip. It renders on OmniHuman, which drives the lip motion from the
- audio. (For dialogue the model writes itself, Veo 3.1 generates speech
- and lip-sync natively.)
- TTS audio attached to a shot becomes its primary audio track in the
- stitch. Background music does not duck under it automatically — keep
- the music quiet; see the music guide.