Dialogue tools

    Generate speech with the generate_dialogue tool. Pick one of four providers with the provider parameter:

    • ElevenLabs v3 (provider: "elevenlabs", the default): 26 human-named voices, the most natural prosody. One voice per call.
    • Google Gemini 3.1 Flash TTS (provider: "google" or "gemini"): 30 voices, 70+ languages, a natural-language style prompt, and inline expressive tags ([sigh], [laughing], [whispering], [shouting], [extremely fast], [like dracula]) that are actually performed. One voice per call.
    • Gemini 3.8 Flash TTS (provider: "gemini-3.8"): a two-speaker conversation in one call, with a delivery style per line and angle-bracket tags such as <laugh>. 70 voices.
    • Seed 1.0 Audio (provider: "seed"): prompt-driven generative audio. You describe the voices, sound effects and music in prose instead of picking a voice, and can clone up to 3 voices from audio references.

    Rates differ by provider and are never fixed in these docs: read them from get_models (filter model_type: "speech") or call estimate before generating. ElevenLabs, Gemini 3.1 and Gemini 3.8 bill per 1,000 characters; Seed bills per second of output.

    To dub an existing video into other languages, use generate_dubbing below.


    #ElevenLabs v3 (default)

    elevenlabs/v3 accepts these 26 voices (case-sensitive). Any value outside this list is rejected with 400 Unsupported voice and you are not charged. Audio tags like [laughs] are stripped server-side before synthesis (not spoken).

    #Female voices

    Voice IDDescriptionPreview
    RachelCalm, articulate American
    AriaExpressive, raspy American
    DomiStrong, confident young American
    SarahSoft, warm young American
    JaneMature, dignified Australian
    JuniperNatural, articulate American
    ArabellaMysterious British narrator
    HopeBright, upbeat American
    BlondieCasual American conversationalist
    PriyankaSultry, soothing Indian
    AlexandraConversational young American
    MonikaDeep, natural Indian

    #Male voices

    Voice IDDescriptionPreview
    DrewWell-rounded American narrator
    ClydeGritty war-veteran character
    PaulAuthoritative ground reporter
    DaveConversational young British
    RogerClassy American businessman
    FinSailor character, Irish accent
    JamesCalm Australian narrator
    BradfordTheatrical, articulate British
    ReginaldIntense, dramatic British character
    GamingAnimated, energetic gaming character
    AustinEasygoing American country
    KuonCheerful, steady character voice
    MarkCasual, relaxed American
    GrimblewoodGruff fantasy creature character

    #Google Gemini 3.1 Flash TTS

    Pass provider: "google". Gemini adds a natural-language style prompt (set the tone, pace, accent, emotion, or a character) and performs inline [tags] instead of stripping them. It accepts 30 voices (case-sensitive) and BCP-47 language codes.

    Inline tags are performed, not stripped: [sigh], [laughing], [uhm], [whispering], [shouting], [sarcasm], [robotic], [extremely fast], [short pause] / [medium pause] / [long pause], and free-form descriptive tags like [like dracula] or [excitedly].

    #Female voices

    Voice IDCharacterPreview
    KoreFirm
    ZephyrBright
    LedaYouthful
    AoedeBreezy
    CallirrhoeEasy-going
    AutonoeBright
    DespinaSmooth
    ErinomeClear
    LaomedeiaUpbeat
    AchernarSoft
    GacruxMature
    PulcherrimaForward
    VindemiatrixGentle
    SulafatWarm

    #Male voices

    Voice IDCharacterPreview
    PuckUpbeat
    CharonInformative
    FenrirExcitable
    OrusFirm
    EnceladusBreathy
    IapetusClear
    UmbrielEasy-going
    AlgenibGravelly
    AlgiebaSmooth
    SchedarEven
    AchirdFriendly
    ZubenelgenubiCasual
    SadachbiaLively
    SadaltagerKnowledgeable
    AlnilamFirm
    RasalgethiInformative

    Languages: BCP-47 codes (e.g. en-US, en-GB, es-ES, es-MX, pt-BR, fr-FR, de-DE, it-IT, ja-JP, ko-KR, hi-IN, ar-001, ru-RU, ro-RO, tr-TR, vi-VN, th-TH, and 70+ more), or auto to auto-detect. Default en-US. Call get_limits_for_model('text-to-dialogue-gemini') for the full list.


    <a id="gemini-3-8"></a>

    #Gemini 3.8 Flash TTS

    Pass provider: "gemini-3.8". This is the provider for a conversation between two voices, or for one voice whose delivery changes line by line. Output is WAV (24 kHz mono).

    • Simple: text + voice (default Fola), with style_prompt as that line's delivery.
    • Dialogue: speakers is a list of 1 or 2 items, [{"voice": "Fola"}, {"voice": "Zephyr"}], numbered Speaker 1 and Speaker 2 in order. dialogue_turns is the ordered script, [{"speaker": "Speaker 1", "text": "...", "style": "slow and dry"}, ...], up to 50 turns. Every turn's speaker must be declared in speakers. text is ignored when dialogue_turns is set.
    • style per turn (optional): free-form tone, emotion or pace, for example "tired night-shift radio host, slow and dry". Up to 500 characters per turn and 2,000 across all turns.
    • filler_words: true adds natural hesitations such as um and uh. It only applies with two speakers.
    • Tags use angle brackets, inline in a turn's text: <laugh>, <sigh>, <whispers>, <short pause>, <long pause>, <gasp>, <chuckle>, <breath>, <cough>, <yawn> and the rest of the 40 supported tags. [square] tags are not performed by this model.
    • No language_code: the model reads the language from the text.
    • Limit: up to 5,000 characters across all turns, tags included. Unknown voices or speakers are rejected before billing.
    • Billing: per 1,000 characters of turn text, tags included, with a minimum of 1 credit.

    Voices (70), grouped by use case:

    Use caseVoices
    TutorBodi, Lumi, Sadaltager, Sola, Sulafat, Varo, Zephyr
    Commercial voiceoverKoda, Kore, Nika, Tavi, Zeno
    InstructionalAlgenib, Despina, Erinome, Kira, Ludo, Mako, Rasalgethi, Rina
    PodcastAlnilam, Brio, Jori, Laomedeia, Rami, Veda
    StorytellerAchird, Enzo, Riko, Sami, Zali, Zubenelgenubi
    Digital assistantAlgieba, Aoede, Autonoe, Callirrhoe, Enceladus, Gero, Iapetus, Neno, Olin, Tari, Umbriel
    Call centerAchernar, Charon, Daro, Fola, Hali, Milo, Puck
    ConciergeArlo, Cleo, Fenrir, Finn, Leda, Lora, Orus
    Tech supportEnya, Jett, Knox, Nyla, Sadachbia, Vindemiatrix
    ProfessionalCruz, Elio, Gacrux, Pulcherrima, Schedar, Tova, Zuri

    Call get_limits_for_model('gemini-3-8-flash-tts') for the current list.


    <a id="seed"></a>

    #Seed 1.0 Audio

    Pass provider: "seed". Seed is prompt-driven: text is a free-form "director's script" that can produce voices, sound effects and background music together, not a fixed voice reading words verbatim. There is no voice parameter, [tags] are not used, and the ElevenLabs tuning parameters do not apply. Describe each voice (gender, age, accent, timbre, emotion) in the prose. Fetch the seed-audio-prompting skill before writing the prompt; a bare line gives bare output.

    • text (required): the prompt, up to 2,048 characters.
    • References (optional; image and audio cannot be mixed):
      • one image, as image_url (HTTPS) or base64 image_data, to guide voice and mood; or
      • up to 3 audio references for voice cloning, as audio_references: a list where each item is one of {"audio_url": "..."}, {"audio_data": "<base64>"} or {"speaker": "..."}, each clip up to 30 seconds. Tag each cloned voice in text by upload order as <<TGT_SPK1>>, <<TGT_SPK2>>, <<TGT_SPK3>> (for example Marcus (..., the actor is <<TGT_SPK1>>) says: "..."). @Voice1, @Audio1 and @Speaker1 are also accepted and normalized server-side.
    • audio_config (optional): format (mp3, wav, ogg_opus, pcm), sample_rate, speech_rate (-50 to 100), loudness_rate (-50 to 100), pitch_rate (-12 to 12).
    • Limits: each reference up to 10 MB, at most 3 audio references or 1 image, output capped at 120 seconds.
    • Billing: per second of output (capped at 120 seconds), minimum 1 credit.

    Example (Seed, two voices described in prose):

    {
      "provider": "seed",
      "text": "A quiet coffee shop at dawn, soft rain on the windows. A warm, low-voiced barista in her fifties says: \"First cup's on the house.\" A sleepy young man laughs and answers: \"You say that every morning.\""
    }
    

    #generate_dialogue

    Generate a speech clip.

    Parameters:

    ParameterTypeRequiredDescription
    text (or prompt)stringYes (except Gemini 3.8 with dialogue_turns)ElevenLabs: 5 to 5,000 characters (after [bracket] tags are stripped). Google: up to 4,000 bytes (UTF-8), inline [tags] kept. Gemini 3.8: up to 5,000 characters, tags included. Seed: the prompt, up to 2,048 characters.
    providerstringNoelevenlabs (default), google (or gemini), gemini-3.8 or seed.
    voicestringNoA voice ID for the chosen provider. Default: Rachel (ElevenLabs) / Kore (Google) / Fola (Gemini 3.8). Not used by Seed.
    speakersarrayNoGemini 3.8 only. 1 or 2 items, {"voice": "..."}, numbered Speaker 1 and Speaker 2 in order.
    dialogue_turnsarrayNoGemini 3.8 only. Ordered {"speaker", "text", "style"} items, up to 50.
    filler_wordsbooleanNoGemini 3.8 only. Adds natural hesitations; two speakers only. Default false.
    image_url / image_datastringNoSeed only. One image reference (HTTPS URL or base64). Cannot be combined with audio references.
    audio_referencesarrayNoSeed only. Up to 3 voice-cloning references.
    audio_configobjectNoSeed only. Output format, sample rate, speech rate, loudness and pitch.
    style_promptstringNoGoogle and Gemini 3.8. Natural-language delivery direction (tone, pace, accent, emotion, character). Google: up to 4,000 bytes; text + style_prompt must be ≤ 8,000 bytes combined. Default: Say the following. Gemini 3.8: the delivery of a simple single-line request.
    language_codestringNoElevenLabs: ISO code (default en; 29 supported). Google: BCP-47 code (default en-US) or auto. Not used by Gemini 3.8 or Seed.
    stabilitynumberNoElevenLabs only. 0..1, default 0.5. Higher = more stable, lower = more expressive.
    similarity_boostnumberNoElevenLabs only. 0..1, default 0.75.
    stylenumberNoElevenLabs only. 0..1, default 0. Style exaggeration.
    speednumberNoElevenLabs only. 0.7..1.2, default 1.0.
    previous_text / next_textstringNoElevenLabs only. Surrounding context to keep prosody consistent across stitched chunks.

    ElevenLabs strips [HEY] / [laughs] / [whispers] before synthesis. Google performs inline tags — see the tag list above.

    Example (Google Gemini):

    {
      "provider": "google",
      "text": "[whispering] I have a secret. [laughing] Just kidding!",
      "voice": "Callirrhoe",
      "style_prompt": "Speak playfully, like sharing a fun secret with a friend.",
      "language_code": "en-US"
    }
    

    Example (Gemini 3.8, two speakers):

    {
      "provider": "gemini-3.8",
      "speakers": [{ "voice": "Fola" }, { "voice": "Zephyr" }],
      "dialogue_turns": [
        { "speaker": "Speaker 1", "text": "Did you hear that? <short pause> Something moved.", "style": "nervous, whispering" },
        { "speaker": "Speaker 2", "text": "<laugh> It's the cat. It's always the cat.", "style": "amused, relaxed" }
      ],
      "filler_words": true
    }
    

    Example (ElevenLabs):

    {
      "text": "Welcome back, ready to generate?",
      "voice": "Rachel",
      "stability": 0.5,
      "language_code": "en"
    }
    

    Response: Returns a generation_id. Poll with get_status.

    #Multi-voice scenes

    For a conversation between two speakers, use Gemini 3.8 (provider: "gemini-3.8") with speakers and dialogue_turns: the whole exchange comes back as one file. Seed can also voice several characters in one prompt. ElevenLabs and Gemini 3.1 are single-voice: call the tool once per line (ElevenLabs: pass previous_text / next_text for prosody continuity), then concatenate the resulting audio files yourself.

    #get_status

    Use the generation_id returned by generate_dialogue to check progress. When the status is completed, the audio file URL is in the outputs array (media_type: "audio").


    <a id="generate_dubbing"></a>

    #generate_dubbing

    Translates and re-voices the speech already in a video, and returns one dubbed MP4 per language. Two engines: sonilo-dubbing (default) and elevenlabs-dubbing (ElevenLabs, 90+ languages including Romanian, voice cloning, a lower per-second rate). It writes no music, effects or subtitles, and it cannot add speech to a silent clip. This is the most expensive model on the platform and generations cannot be refunded, so quote with estimate and get the user's explicit go-ahead first.

    Parameters:

    ParameterTypeRequiredDescription
    video_urlstringYesHTTPS URL of the clip, up to 300 seconds. For a local file, call get_upload_url(model_id=<engine id>), let the user upload, then get_upload_session(token); uploading this way also measures the duration, which makes the price exact.
    languagesarrayYesOne or more of en, zh_cn, ja, ko, pt, pt_br, es, es_419, de, fr, it, ru, th, ar, tr, vi, id. No default. pt_br is Brazilian Portuguese and es_419 Latin American Spanish; plain pt and es are separate options, not synonyms. Romanian is not available on Sonilo. For elevenlabs-dubbing: BCP-47 codes such as es, es-MX, pt-BR, fr-CA, ro, pl, hi, 1 to 10 per run; the full list is in get_models. Ask the user which languages they want, because each one is charged in full.
    modelstringNosonilo-dubbing (default) or elevenlabs-dubbing. Options of one engine are refused on the other.
    duckingbooleanNoSonilo only. Lowers the clip's own music and effects while the dubbed voice speaks. Free, default false.
    source_languagestringNoElevenLabs only. The language spoken in the clip, or auto (default) to detect it.
    cloning_strengthintegerNoElevenLabs only. 0 to 10, default 7: how closely the dubbed voices clone the original speakers. Lower gives more natural delivery in the target language.
    duration_secondsnumberNoClip length, when it is not already known from an upload or one of your own generations.

    Billing: clip seconds multiplied by the number of languages, at the engine's own per-second rate. Sonilo applies a 10-second minimum to that total rather than to each language; ElevenLabs has no minimum. Three languages cost three times one. Quote it with estimate(model=<engine id>, reference_video_seconds=<clip seconds>, variant_count=<number of languages>).

    Response: {generation_id, status: "pending", languages}. Poll get_status until completed or failed: the poll is also what settles the run, so keep polling to the end. Each output's metadata.language names its language.


    #Credits and limits

    • Cost: read the live rate from get_models or call estimate; rates differ by provider. ElevenLabs, Gemini 3.1 and Gemini 3.8 bill per 1,000 characters (rounding: decimal ≤ 0.3 floors, > 0.3 ceils; Gemini 3.8 counts tags as characters). Seed bills per second of output, capped at 120 seconds.
    • Minimum: 1 credit for any non-empty request.
    • Minimum length: 5 characters after audio tags are stripped.
    • Maximum length: ElevenLabs 5,000 characters; Google 4,000 bytes for text (and ≤ 8,000 bytes for text + style_prompt combined); Gemini 3.8 5,000 characters across all turns, tags included; Seed 2,048 characters of prompt.

    See Limitations for full details.