Skip to content
Content
Command

/generate-voiceover

Generate AI voiceover from script

From plugin
claude-code-video-toolkit
2.1k13 skills13 commands
Install
$ npx -y skills add digitalsamba/claude-code-video-toolkit --agent claude-code

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/generate-voiceover

Context preview

What this command does when you run it.

Generate AI voiceover from script

Command definition

generate-voiceover.md
description: Generate AI voiceover from script

Generate Voiceover

Help me generate a voiceover for a Remotion video project using ElevenLabs or Qwen3-TTS.

Project Integration

Before gathering configuration, check if we're in a project context:

1. **Check for active project:**

  • Look for `project.json` in current directory or parent `projects/*/`
  • If found, read it to understand project state

2. **Check review status:** If project has `phase: "review"` or no `reviewStatus` on scenes:

   ⚠️  Scene review not complete.

   Generating voiceover before review risks:
   - Narration that doesn't match visuals
   - Timing mismatches
   - Wasted API credits if script needs changes

   Run `/scene-review` first to verify each scene in Remotion Studio.

   Options:
   1. Run /scene-review first (recommended)
   2. Generate voiceover anyway (not recommended)

Only proceed if user explicitly chooses option 2.

3. **Check for per-scene scripts (preferred):** Look for `public/audio/scenes/*.txt` files in the project directory.

If found:

   I see you're working on: {project.name}

   Found per-scene scripts in public/audio/scenes/ (recommended):
     - 01-title.txt (estimate: ~3s)
     - 02-overview.txt (estimate: ~15s)
     - 03-demo.txt (estimate: ~20s)
     - 04-summary.txt (estimate: ~12s)

   Total estimated: ~50 seconds of narration

   Options:
   1. Generate per-scene audio (recommended)
   2. Generate single voiceover file (legacy)

Default to option 1 (per-scene) when scene scripts exist.

4. **If no scene scripts but VOICEOVER-SCRIPT.md exists:**

   I see you're working on: {project.name}

   Script: VOICEOVER-SCRIPT.md (ready)
   Audio status: ⬜ Not yet generated

   Options:
   1. Split into scene scripts first (recommended for iteration)
   2. Generate single voiceover file

5. **After generation completes:**

  • Update `project.json`:
  • Set `audio.voiceover.status: "present"`
  • If per-scene, set `audio.voiceover.mode: "per_scene"`
  • Transition `phase` if appropriate (review → audio → editing)
  • Add session entry
  • Regenerate project CLAUDE.md

---

Your Tasks

1. **Detect Script Source** Look for scripts in this order:

  • Check for `public/audio/scenes/*.txt` files (per-scene mode)
  • Check if `VOICEOVER-SCRIPT.md` exists in the current working directory
  • Check if `VOICEOVER-SCRIPT.md` exists in parent directories (up to 3 levels)
  • If not found, ask the user to provide the script text or file path

2. **Gather Configuration** Use the AskUserQuestion tool to collect:

**Question 1 - TTS Provider:** Options:

  • ElevenLabs (default) — high quality, paid API
  • Qwen3-TTS — self-hosted via RunPod, free/cheap, voice cloning

If Qwen3-TTS is selected, check the project brand (from `project.json`) for a clone profile: 1. Load `brands/{brand}/voice.json` 2. If `qwen3.clone` exists and `refAudio` file is present:

      Clone profile detected for brand '{brand}':
        Reference: assets/voice-reference.m4a
        Transcript: "Welcome to this video walkthrough..."

        1. Use cloned voice (recommended)
        2. Use built-in speaker instead
        3. Set up a new clone → /voice-clone

3. If no clone profile, offer built-in speakers as usual

**Question 2 - Generation Mode (if scene scripts found):** Options:

  • Per-scene generation (recommended) — each .txt becomes a .mp3
  • Single voiceover file (legacy)

**Question 3 - Concat for SadTalker (if per-scene and narrator enabled):** Options:

  • Yes, concat for SadTalker narrator (recommended)
  • No, keep separate files only

**Question 4 - Voice Settings:**

*If ElevenLabs selected:* Options:

  • Use defaults (stability: 0.85, similarity: 0.95)
  • Customize settings

*If Qwen3-TTS selected with cloned voice:* Skip tone selection entirely. Show:

   Using cloned voice from brand '{brand}' — tone is determined by your reference recording.

   Tip: Want a different feel? Run /voice-clone to record a new reference
   with the tone you're after (e.g., warmer, more energetic). You can have
   multiple clone profiles across brands.

*If Qwen3-TTS selected with built-in speaker (no clone):*

  • Speaker name (default: Ryan). Options: Ryan, Aiden (EN), Vivian, Serena (ZH), Ono_Anna (JA), Sohee (KO)
  • Voice tone (choose one):

1. Neutral (no instruction) 2. Warm — friendly, conversational 3. Professional — clear, measured 4. Excited — enthusiastic, energetic 5. Calm — soothing, relaxed 6. Serious — authoritative, gravitas 7. Storyteller — captivating narrator 8. Tutorial — patient, step-by-step 9. Custom instruction (type your own)

Note: Per-scene tone overrides are supported with built-in speakers. Add `[tone: excited]` or `[instruct: Whisper gently]` as the first line of any scene `.txt` file. These are ignored when using a cloned voice.

3. **Execute Voiceover Generation**

**ElevenLabs — Per-scene mode (recommended):**

   cd REPO_ROOT/PROJECT_DIR
   python ../tools/voiceover.py \
     --scene-dir public/audio/scenes \
     --json

**ElevenLabs — With concat for SadTalker:**

   cd REPO_ROOT/PROJECT_DIR
   python ../tools/voiceover.py \
     --scene-dir public/audio/scenes \
     --concat public/audio/voiceover-concat.mp3 \
     --json

**ElevenLabs — Single-file mode (legacy):**

   cd REPO_ROOT/PROJECT_DIR
   python ../tools/voiceover.py \
     --script "SCRIPT_PATH" \
     --output "public/audio/voiceover.mp3" \
     --json

**Qwen3-TTS — Per-scene mode:**

   cd REPO_ROOT/PROJECT_DIR
   python ../tools/voiceover.py \
     --provider qwen3 \
     --speaker SPEAKER_NAME \
     --scene-dir public/audio/scenes \
     --json

**Qwen3-TTS — With brand clone profile:**

   cd REPO_ROOT/PROJECT_
Read more
Ships withclaude-code-video-toolkit

Tell Claude Code what video you want — it writes the script, generates the voiceover, music, and visuals, and renders the MP4.

Get the whole plugin
Stats
2,080
Stars
357
Forks
Active
Maintenance
Python
Language
MIT
License
5d ago
Last commit
9mo ago
Created

Repo: digitalsamba/claude-code-video-toolkit

Other commands on claude-code-video-toolkit.