Install
openclaw skills install @runware/voiceoverGenerate spoken voiceover and narration from a script, one speaker, with control over emotion, pacing, and voice. Use when the user says "read this in a warm voice", "narrate my video", "voiceover for this ad", "turn this script into audio", "audiobook narration", "an IVR or phone greeting", or wants text-to-speech with a specific delivery. For two speakers trading turns, use dialogue-audio. To clone a specific voice or design a new one from a description, use voice-cloning. To attach the result to a video, use add-audio-to-video or talking-avatar.
openclaw skills install @runware/voiceoverTurn a written script into natural spoken audio with directed delivery: the right emotion, pacing, emphasis, and voice for a video, an ad, an audiobook, or an IVR prompt. The lever is inline [bracket] direction tags that steer how each line is read, not just the words themselves.
voice-cloning.fishaudio:s2.1@pro). Flagship multilingual TTS with rich bracket-tag control over emotion and paralanguage, 80+ languages, fast streaming. Best general voiceover pick.inworld:tts@2). Free-form natural-language steering tags and built-in settings.textNormalization for clean speech from raw text. Strong for assistants, IVR, support agents.alibaba:qwen@3-tts-1.7b-customvoice). Nine preset voices with a style hint via positivePrompt. Runware Optimized.runware:dia2@2b). Real-time streaming with non-verbal cues and speaker tags. Runware Optimized.live and inspect its exact fields via runware-models + runware-run before calling. Never hardcode a stale choice.runware-run) and confirm the field names. The shape is audioInference with speech.text plus speech.voice (some models accept speech.language).speech.text with inline [bracket] direction tags placed before the text each one applies to.$1,249.99, abbreviations), enable normalization so it is spoken cleanly: settings.textNormalization: true on Inworld TTS-2.audioInference asynchronously and poll getResponse until terminal. Audio is a time-based task, do not block a sync call on it.audioURL. Listen back, check the delivery against the brief, and retry lines that miss.[bracket] tag placed before text tells the model how to read what follows. It carries forward until the next tag or the end of the input. You do not close or reset it. Drop a new tag where the mood shifts: [speak cheerfully] Great news, the build passed! [lower voice, more serious] But we need to talk about the memory leak.[say sadly with deliberate pauses in a low voice and hushed style] is a real read, "sad" is not.[excited], [sad], [whisper], [laughs], [angry], [surprised]) and also accepts any descriptive phrase ([whispers sweetly], [laughing nervously]). Start with the core set for consistency, reach for free-form when you need nuance the core set misses.(break), (long-break), (breath), (sigh), (laugh), (cough) and requires settings.normalize: false for them. Inworld TTS-2 uses inline non-verbals [laugh], [sigh], [breathe], [clear throat], [cough], [yawn]. Place them where a human would actually do them.I told you NOT to do that), partial caps stress a syllable (AbsoLUTEly). Punctuation paces the read: periods are full stops, commas are short breaks, ellipses trail for hesitation. Use emphasis on one or two words per sentence at most.settings.textNormalization: true (Inworld) expands $1,249.99 to "one thousand two hundred forty-nine dollars and ninety-nine cents" and 3:45 PM to "three forty-five PM" before synthesis. Or instruct the LLM to write spoken-form text and ban markdown in its system prompt (see the TTS-2 LLM system-prompts guide). Normalization can be ambiguous on dates, so normalize those yourself when the application handles them.[sound happy] on a somber line pulls the model in two directions and degrades the read. Keep each tag internally consistent. Pairing [whisper] with [very loud] conflicts.<|phoneme_start|> and <|phoneme_end|> for homographs, brand names, and jargon, also gated on settings.normalize: false. Reserve it for words the model actually gets wrong.dialogue-audio. For a voice that is not a preset (a clone of a specific person or brand voice), see voice-cloning.[bracket] tag placed before text steers everything that follows until the next tag or the end of input. Drop a new tag only where the mood shifts, not on every sentence.(cue) parentheses ((break), (breath), (sigh)) and needs settings.normalize: false. Inworld uses inline [non-verbal] brackets ([laugh], [sigh], [breathe]). Place each where a human would do it.settings.textNormalization: true expands raw numbers, dates, and prices. Fish settings.normalize (default true) must be false for (cues) and <|phoneme|> overrides, so it strips them when on.references/examples.md for full worked requests (emotional ad read, normalized explainer, branded IVR).speech.text: the script, including inline [bracket] direction tags and any paralanguage cues. Required.speech.voice: the voice ID or preset name. Different voices respond to the same direction with different intensity, so pick the voice first, then tune the tags to it.speech.language: set it where the model exposes it (Qwen, some Inworld locales) for correct phonetics.settings.textNormalization (Inworld TTS-2): true to expand numbers/dates/abbreviations from raw text into spoken form.settings.normalize (Fish S2.1 Pro): must be false for paralanguage (cues) and <|phoneme|> overrides, otherwise those tokens get stripped.positivePrompt (Qwen CustomVoice): an optional style/emotion hint, e.g. "Speak with great enthusiasm".runware-run). Bracket-tag and paralanguage syntax differs per model, so never carry one model's cues onto another without checking.audioURL. Retry any line that mispronounces, rushes, or misses the emotion.runware-run, runware-models, runware-prompting; dialogue-audio (multiple speakers in one generation), voice-cloning (custom or cloned voice), talking-avatar (drive a face with the voiceover), ugc-ad (voiceover inside a full ad).