Video Voiceover (video-voiceover)
Turns a timestamped narration.json into per-segment TTS audio that fits each time window, plus placement metadata for downstream mixing.
Image & VideoAdvanced★ 595⑂ 109AI score 8/10Last updated: Oct 21, 2026
What it does
- Reads
narration.json(each segment hasstart,end,narration) and synthesizes one WAV per segment. - Dynamically adapts speaking rate so speech fits its time window, and normalizes loudness.
- Writes
tts_segments/*.wavandtts_meta.jsonwith engine, voice, placement fields, and a failure list. - Supports MiMo TTS (default), Fish Audio, or an explicitly configured self-hosted IndexTTS endpoint;
autopicks MiMo then Fish based on available keys. - Deterministic caching by text, TTS settings and WAV size/mtime, so only affected segments are regenerated.
--preserve-approved-textprotects an approved script from silent truncation and fails loudly with evidence when speech overflows the window.
Who it's for
- Creators producing recap/summary videos who want automated narration.
- Editors who must land voice lines exactly on an already-cut timeline.
- Developers using MiMo TTS or Fish Audio who want a reliable TTS stage in a pipeline.
Examples
python3 scripts/voiceover.py --work-dir work --narration work/narration.json— synthesize all segments with the default MiMo engine.TTS_PROVIDER=fish-audio FISH_API_KEY=... python3 scripts/voiceover.py --work-dir work— switch to Fish Audio with a custom reference voice ID.- Add
--preserve-approved-textfor a locked script, then inspect the failure report for segments that exceed their window.
· · · Install guide · · ·
Try it now, no install
Paste this into Claude to use the skill without installing anything.
Read the instructions in this file and follow them to help me: https://raw.githubusercontent.com/zenstory-ai/video-recap-skills/HEAD/skills/video-voiceover/SKILL.md What I want: (describe your task here)
If Claude can't open the link, open it yourself and paste the contents instead.
↓ If it works for you, download the ZIP below and install it. Then it runs on its own — no pasting each time.
Install in the Claude app (no terminal)
- Download the ZIP with the button below.
- In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
- Go to Customize → Skills → + → 'Upload a skill' and upload the ZIP.
Install in Claude Code
Let Claude do it — paste this into Claude Code
Install the skill I found on AI Skill Mart. Copy the skills/video-voiceover folder from the GitHub repo zenstory-ai/video-recap-skills into my ~/.claude/skills/video-voiceover/. When it's done, tell me in one line what this skill can do.
Install with a command instead
git clone https://github.com/zenstory-ai/video-recap-skills.git && mkdir -p ~/.claude/skills && cp -r video-recap-skills/skills/video-voiceover ~/.claude/skills/⚠ This is a third-party skill. Check the source repository before installing.
- Open a terminal and go to your working folder.
- Run
git clone https://github.com/zenstory-ai/video-recap-skills.git. - Create the skills folder:
mkdir -p ~/.claude/skills. - Copy the skill:
cp -r video-recap-skills/skills/video-voiceover ~/.claude/skills/(copying the sibling pipeline skills is recommended). - Install Python 3 and the repo dependencies (ffmpeg, etc.).
- Export credentials:
export MIMO_API_KEY=..., or for Fish Audioexport TTS_PROVIDER=fish-audioandexport FISH_API_KEY=.... - Restart Claude Code and ask something like "voice over this narration.json" to trigger the skill.
View source on GitHub ↗License: MIT