video-voiceover

video-voiceover is a skill for Claude Code from zenstory-ai/oh-story-dsh. It costs 262 tokens per session (3,452 once invoked), scanned A, original, MIT.

A video voiceover tool that turns timestamped narration into Chinese speech audio and fits each spoken segment to its assigned time window.

In plain words
What is it for?
Use it to create text-to-speech voiceovers from a narration timeline and produce audio files plus timing information for later video assembly.
Why use it?
It removes the manual work of generating, timing, and loudness-adjusting separate narration clips.

Skill for Claude Code

Written for Claude Code: user-invocable in frontmatter.

Good fit Use it to create text-to-speech voiceovers from a narration timeline and produce audio files plus timing information for later video assembly.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/zenstory-ai/oh-story-dsh/video-voiceover
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add zenstory-ai/oh-story-dsh --skill video-voiceover
Clone the repo
git clone --depth 1 https://github.com/zenstory-ai/oh-story-dsh

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for video-voiceover

README.md
[![agentmods](https://agentmods.dev/badge/skills/zenstory-ai/oh-story-dsh/video-voiceover/github.svg)](https://agentmods.dev/skills/zenstory-ai/oh-story-dsh/video-voiceover)
Your own site
<a href="https://agentmods.dev/skills/zenstory-ai/oh-story-dsh/video-voiceover"><img src="https://agentmods.dev/badge/skills/zenstory-ai/oh-story-dsh/video-voiceover/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for video-voiceover

Your own site · 80×15
<a href="https://agentmods.dev/skills/zenstory-ai/oh-story-dsh/video-voiceover"><img src="https://agentmods.dev/badge/skills/zenstory-ai/oh-story-dsh/video-voiceover.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 262 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,452 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00262 $0.03452
Opus 5.5 $0.00105 $0.01381
Sonnet 5.5 $0.00052 $0.00690
Haiku 4.5 $0.00026 $0.00345

Measured 12d ago against content hash 80f1ecf4c26c, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

video-voiceover scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.

The scan reads SKILL.md. This mod also ships 9 executable files (scripts/approved_text_policy.py, scripts/dub.py, scripts/lib.py, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

Copies of this mod

1 near-identical copy found in the catalogue:

packages/knowledge/video-recap/skills/video-voiceover/SKILL.md · 117 lines

How it starts

The opening of the file, as written. The whole thing — 117 lines — stays where its author put it; the contents beside it link to each section on GitHub.

1. 定位

本技能读取带时间戳的旁白稿,为每一段生成独立音频,并把语音适配到对应时间窗,随后记录下游合成所需的放置元数据。 默认引擎是 MiMo TTS(mimo-v2.5-tts);也可显式选择 Fish Audio(默认模型 s2.1-pro-free)。

2. 远程服务与数据外发

本技能按所选 TTS 或 dub 路径联网。表中的实读文本指 narration.json 段落去掉格式与舞台提示后的文字。

路径 服务与凭据 发送内容
默认解说 TTS(--tts-provider auto|mimo-tts) MiMo chat 接口 <MIMO_TTS_API_URL 或 MIMO_API_URL>/chat/completions,MIMO_TTS_API_KEY 或 MIMO_API_KEY,模型 mimo-v2.5-tts 每段实读文本、一句自然语言语气/语速指令(由段的 emotion 与时间窗算出)、内置音色名(默认 冰糖);auto 下 MiMo key 缺失且设置了 FISH_API_KEY 时改走 Fish Audio 行
解说声音克隆(--voice-ref <audio> / VOICE_REF) 同上,模型 mimo-v2.5-tts-voiceclone 上述内容,外加参考音频(转成 24 kHz 单声道 WAV,最长 30 秒)的 base64,每段请求都带
Fish Audio(--tts-provider fish-audio) FISH_TTS_API_URL(默认 https://api.fish.audio/v1/tts),FISH_API_KEY 每段实读文本、数值语速、音色 ID FISH_TTS_REFERENCE_ID;不发送本地音频
自托管 IndexTTS(--tts-provider index-tts) 用户自己部署、由 INDEX_TTS_ENDPOINT 指定的 HTTP(S) 服务 {"voice": INDEX_TTS_VOICE, "text": 实读文本};不发送本地音频
实验性 dub(见 §8) MiMo ASR(MIMO_API_URL,MIMO_API_KEY,mimo-v2.5-asr)与 MiMo voiceclone(TTS 接口与凭据,mimo-v2.5-tts-voiceclone) 源视频整条音轨按 6 秒分窗送 ASR;每句中文译文连同从源音频截取的约 10 秒原说话人声音(克隆参考)送 voiceclone

--voice-ref 与 dub 都会把一个真实人物的声音发给 MiMo 用于克隆:只在用户有权使用该音频、且声音主人同意被克隆时使用。

3. 环境要求

export MIMO_API_KEY=***  # 也可使用仅供 TTS 的 MIMO_TTS_API_KEY

# 或改用 Fish Audio TTS
export TTS_PROVIDER=fish-audio
export FISH_API_KEY=***
export FISH_TTS_REFERENCE_ID=<voice-model-id>  # 可选;覆盖内置“娱乐扒妹”音色

# 或显式选择自托管 index-tts 端点,配置见 references/index-tts.md
export TTS_PROVIDER=index-tts

下面的 scripts/... 均相对于本技能目录。若执行器从仓库根目录启动,请给脚本路径加上本技能的绝对目录。

4. 输入契约

默认输入为 work_dir/narration.json。每段必须包含 start、end 与 narration,可选字段包括 pause_after_ms 和 overlaps_speech。时间统一表示音频最终放置的输出时间线秒数。

cut 流程先剪后配:narration.json 本身就是按剪后成片的输出时间写的,不存在另一份映射稿。

5. 运行命令

python3 scripts/voiceover.py --work-dir <work_dir> --narration <narration.json> \
  [--tts-provider auto|mimo-tts|fish-audio|index-tts] \
  [--mimo-voice 冰糖 | --voice-ref <reference-audio>] \
  [--preserve-approved-text] [--allow-partial-tts]

Read the full file on GitHub · 117 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 12d ago Changed · -8 lines 80f1ecf4c26c
  2. 19d ago Changed · +26 lines · +131 tokens per session 2ba0c0c0ded5
  3. 24d ago Changed · +7 lines c6b407aec131
  4. 29d ago Changed · +10 lines · -5 tokens per session c7a716b0ef9b
  5. 1mo ago First seen · 82 lines · 136 tokens per session scan A e726cda155ae

Subscribe to this mod's changes

video-voiceover is a skill published in the GitHub repository zenstory-ai/oh-story-dsh (629 stars, last pushed today), licensed MIT. It adds 262 tokens to every session and 3,452 once invoked, about $0.0010 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-05.