Skip to main content
Glama

Generate voiceover

generate_voiceover

Generates an AI voiceover from a script — on-device with the free models, or in the cloud with ElevenLabs (the user's own key and credits). The WAV lands in the project's media library as a normal audio asset (with waveform and analysis), the script is stored as asset metadata, and a script-corrected word-level transcript is written so captions work immediately. Narration is best generated before the picture is cut: a script does not tell you how long it takes to SAY, so a narrated edit assembled first is built on guessed cut points that the real audio then breaks — every section, graphic and transition has to be retimed. Generate the narration, read its word timings with get_transcript, then lay picture against those frames. Segments read better than one block (e.g. hook / body / close, or one per section), each laid on the timeline separately. A single long generation comes out FLAT and evenly paced, everything pressed together at one energy; segmenting gives each part its own intent, puts natural air at the joins, and lets you redo one section instead of all of it. Write for the ear: short sentences, one idea each, LINE BREAKS between them — the strongest signal the model has to actually stop. See read_skill {topic:'voiceover'}. Async: returns {jobId, fileName} — fileName is the audio file's final name in the project's media/ folder, decided up front (WAV for local providers, MP3 for ElevenLabs). The job runs on the analysis MASTER tab and its request is persisted on disk: it survives tab closes and browser restarts, and get_job_status answers from disk even in a fresh session. Poll until done; the finished job also carries the asset's mediaRef. Voices/languages come from list_voiceover_models; a local model must be downloaded first (phase 'ready'), otherwise this returns PERMISSION_REQUIRED. PREMIUM (provider 'elevenlabs' — SPENDS THE USER'S CREDITS): check list_voiceover_models' elevenlabs status object first. Structured refusals you must handle: NO_API_KEY (no key stored — ask the USER to add their key in the Voiceover generator's ElevenLabs onboarding; never ask for, or pass, the key yourself), INSUFFICIENT_CREDITS (carries needed vs remaining — shorten the script or ask the user), CONSENT_REQUIRED (paid features are set to 'ask': a consent dialog with the cost is now open in Frapea and the error carries an actionId for the user to confirm; call await_user_action with that actionId, and on 'granted' retry this call with consentActionId set to it; 'denied' means drop it). AUDIO TAGS (ElevenLabs): inline bracket tags like [calm], [excited], [whispers] direct the delivery ONLY on models whose list_voiceover_models entry says supportsAudioTags: true (the v3 family). Every other model reads them ALOUD — so only write tags when the chosen model supports them. As a safety net, tags sent to a non-supporting model are stripped before synthesis and the success message says so.

Input Schema

NameRequiredDescriptionDefault
textYesThe script to speak (multi-line ok).
speedNoSpeaking rate multiplier (default 1). Local providers accept 0.5–2; ElevenLabs 0.7–1.2.
tokenYesThe session token `connect` returned. Pass it on every call — it says which browser to drive.
voiceNoVoice id from the provider's manifest (default: its first voice for the chosen language).
modelIdNoElevenLabs only: TTS model id from list_voiceover_models (default 'eleven_v3' — expressive, reads [calm]-style audio tags as directions; use 'eleven_multilingual_v2' only when the user asks for v2; turbo/flash cost half). Check the model's supportsAudioTags before writing [calm]-style tags into the text — non-v3 models would read them aloud.
fileNameNoOptional base name for the audio file written into media/.
languageNoLanguage tag from the provider's manifest (e.g. 'en-us'). Ignored for ElevenLabs — its voices are multilingual.
providerNoTTS provider id from list_voiceover_models (default 'kokoro'; 'elevenlabs' = premium, needs the user's key + consent).
projectIdYesProject id from get_projects.
voiceSettingsNoElevenLabs only: voice knobs, each optional. stability, similarityBoost and style are 0–1; speakerBoost is a boolean.
consentActionIdNoThe actionId from a CONSENT_REQUIRED refusal, after await_user_action returned 'granted'. Good for one job.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / modelId / description
      Previous value: -"ElevenLabs only: TTS model id from list_voiceover_models (default 'eleven_multilingual_v2'; turbo/flash cost half). Check the model's supportsAudioTags before writing [calm]-style tags into the text — non-v3 models would read them aloud."New value: +"ElevenLabs only: TTS model id from list_voiceover_models (default 'eleven_v3' — expressive, reads [calm]-style audio tags as directions; use 'eleven_multilingual_v2' only when the user asks for v2; turbo/flash cost half). Check the model's supportsAudioTags before writing [calm]-style tags into the text — non-v3 models would read them aloud."
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds what the annotations cover (annotations only say non-readonly, open-world, non-idempotent, non-destructive). The description discloses async job semantics with persisted-on-disk state that survives tab closes, the return shape {jobId, fileName} with format decided up front, that ElevenLabs SPENDS the user's credits, and the full structured-refusal catalogue (NO_API_KEY, INSUFFICIENT_CREDITS, CONSENT_REQUIRED with the await_user_action retry loop, PERMISSION_REQUIRED), plus the audio-tag stripping safety net.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: purpose and outputs first, then the workflow rationale, then the premium/error handling. It is long, and the audio-tag rule appears in both the body and the modelId schema text, which is mild redundancy — but for an 11-param tool with a consent flow, nearly every sentence carries operational weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, a nested object, no output schema and a premium path, the description covers everything an agent needs: async return values, how to poll (get_job_status), the mediaRef on completion, the consent handshake, provider prerequisites, and the segmentation advice that prevents a bad edit. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the nested voiceSettings object, so the schema already carries the heavy lifting — baseline 3 applies. The description does reinforce a few behaviors (audio tags only valid when the model reports supportsAudioTags, consentActionId is good for one job, language ignored for ElevenLabs), but these are mostly repeated from the schema rather than adding new syntactic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Generates an AI voiceover from a script') and immediately distinguishes the two provider paths (on-device free models vs. cloud ElevenLabs). It also spells out the concrete side effects — WAV in the media library, script stored as metadata, word-level transcript written — so an agent knows exactly what this produces versus siblings like add_sfx or start_transcription.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to do this (before picture is cut, because a script doesn't reveal its spoken duration) and names concrete downstream steps (get_transcript for word timings, read_skill {topic:'voiceover'}, list_voiceover_models for voices). It also gives exclusions and preconditions: check the elevenlabs status object first, a local model must be downloaded and at phase 'ready', and v2 only when the user asks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources