For each Creative Claw tool call that exposes it, pass the optional skills_used array with creativeclaw-generate-voiceover, any other Creative Claw skills actually followed, and guide entries in the form <skill-name>/<relative-guide-path> (for example, creativeclaw-generate-voiceover/references/workflow-basics.md). Include only skills and guides followed for that call. Omit attribution if the user declines tracking or the field is unavailable. Never send other plugin names, private data, or local paths.
Not connected yet? If no Creative Claw tools (such as list_models or generate_image) are available, the plugin is installed but the server is not connected. Stop and tell the user to open the plugin's Connectors tab in their app (or the MCP server list in a terminal client), connect Creative Claw, sign in, and ask again. Do not substitute other tools or describe a result that was not generated.
Read shared execution guidance before tools. The speech tool is generate_speech.
Which voice
- "Clone my voice", "use my recording", or an unsaved personal voice: load creativeclaw-clone-voice when available. If this skill is installed alone, read the complete cloning workflow. Obtain explicit consent, import privately, clone, test and save a reusable Character. Do not send source audio directly to ElevenLabs or Cartesia speech generation as a substitute for cloning.
- Existing Character voice (cloned, designed or stock): find the Character with
list_charactersand passcharacter_id. Do not clone or design again. - Stock voice: fetch the selected model's current
get_model_paramsvoice catalog and use its exactvoice_id. For more Cartesia or ElevenLabs choices, callget_model_paramsagain withinclude_voice_catalog: true, or read the public Markdown catalog linked invoiceCatalog.extendedCatalogMarkdownUrl. Never pass both selectors. - Change who is speaking in an existing speech recording while keeping the performance: call
generate_speechwithmodel: "speech/cartesia-voice-changer",audio_url= the workspace speech audio, and a Cartesiavoice_idor a Character'scharacter_id. Pass notext. - New voice from a description (no recording): call
design_voice({ prompt })with age, accent, timbre, pace and attitude, never a real person's identity. It returns three auditions; after the user picks, save it withmanage_character({ id | title, voice_preview_id }), passing the audition'spreview_idasvoice_preview_id. Speak withgenerate_speech({ character_id })usingspeech/elevenlabs-v4, orspeech/gemini-3.8-flash-ttsforprovider: "google". If the save hits the limit, offerreplace_voice_option_id; never quote plan prices. For a stock voice usemanage_character({ id, voice_model, voice_id }). Details: voice design.
Choose and load one model guide
| Need | Recommended starting point |
|---|---|
| Stock narration, designed ElevenLabs voices, expressive speech, broad language coverage, and dialogue | ElevenLabs v4 |
| Google-designed voice | speech/gemini-3.8-flash-tts (read its get_model_params) |
| A Cartesia clone | Cartesia Sonic |
| An ElevenLabs clone, steady read | ElevenLabs v2 |
| An ElevenLabs clone, expressive delivery or dialogue | ElevenLabs v4 |
| An explicitly requested v3 workflow | ElevenLabs v3 |
| HeyGen public voices or an existing HeyGen instant clone | HeyGen Voice |
| A named alternative or a specific dialect/voice match | MiniMax and xAI |
Default to ElevenLabs v4 for stock and designed ElevenLabs voices. Speak a clone with its provider's model: Cartesia Sonic for a Cartesia clone; v2 for a steady read or v4 for expressive delivery or dialogue from an ElevenLabs clone. Pass the model explicitly rather than relying on the omitted-model v4 default, and keep it for the whole project. V3 is legacy; use it only when the user asks for it. V2 can use public stock IDs, but v4 is the stock choice. If a user explicitly requests v2 stock speech, use a compatible public voice_id instead of silently switching. Do not automatically route stock corporate or long-form narration to v2.
Multiple speakers in one run
ElevenLabs v4 supports up to 10 voices in one generate_speech request through extras.dialogue. Pass ordered turns with speaker, text, and either voice_id or a saved Character voice (cloned or designed) character_id for each turn. Google Flash and Flash-Lite TTS also support two-speaker dialogue. Read the selected model's current schema and v4 dialogue examples before submission. Omit top-level voice selectors and text for dialogue. If a cached OpenAI tool schema still requires text, pass text: "".
For non-English, mixed-language or less common languages, read language routing before selecting a voice. A model supporting a language does not guarantee every stock voice has a native accent.
Execute and deliver
- Establish text, target language/accent and delivery. Preserve supplied words unless rewriting is requested.
- Read the selected model's reference and current
get_model_params. Reuse a current schema already loaded in this task. Uselist_models({ category: "speech" })only when discovering alternatives. - Select a language-appropriate stock voice or saved Character and only settings accepted by that model. Never copy prompting tags across models.
- Generate the requested take. For a new clone or uncertain pronunciation, offer a short audition before a long production, not an unrequested paid model sweep.
- Follow queued results with
check_jobas directed by job recovery. Show the completed audio through the available native preview. - Keep the Character ID and voice/model choice available for the requested continuation. Speech added to a video is an audio overlay, not lip-sync, and a video's Character reference does not bring its voice into native video audio. For speech in video, read voice in video.