Varosity
All guides

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:

ProviderStrengthPricing tier
ElevenLabsHighest quality + voice cloning$$
OpenAI TTS-1Fast, reliable, six built-in voices$
Deepgram Aura 2Lowest latency, cheapest$
Cartesia Sonic 3.6Ultra-low latency, large voice library$
Fish AudioMultilingual, 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/voices with
  • { "name": "…", "sampleUrls": ["https://…/sample.mp3"] } (public audio
  • URLs) returns a voiceId you can pass straight to
  • POST /api/v1/tts. The MCP tool is clone_voice; from the CLI,
  • varosity voices clone <name> <audio-url>....
  • Provider UI — clone in ElevenLabs, then hit Sync on
  • /app/voices to 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.