Deliver voiceover.wav、voiceover.mp3、voiceover.srt、voiceover.json. The WAV is the timing master file, and the SRT contains sampled-frame times corresponding to the original short segments; this is not word-level forced alignment, nor can it prove the model's pronunciation is completely correct.
Choose backend
Default MiniMax speech-2.8-hd, using the user's own service account and registered voice, which may consume online quota. Prioritize completing one representative short segment, and expand to the full text after the user has listened and reviewed it. A backend explicitly chosen by the user takes precedence over the default.
autoreads personal preferences; when there is no configuration, choose minimax. setup and run use the same logic. Useconfigure.pyto save preferences outside the skill directory, so upgrades will not overwrite personal voices.- For the free local route, explicitly use
--provider local: on Apple Silicon choose mlx(Qwen3-TTS 0.6B Base 4bit), and on other platforms choose qwen(official PyTorch, automatically using available CUDA, otherwise CPU). Local inference does not require an API key, but the first run requires downloading the model and consumes compute resources. - nano is only for when the user explicitly chooses the lighter CPU route; do not automatically fall back because Qwen lacks dependencies or fails to run. Prioritize ensuring voice quality; do not use the successful run of a small model as the basis for the default choice.
- When MiniMax lacks an account or voice, provide a configuration entry point; do not automatically use a shared voice. The first upload of a cloned recording must be within an online cloning task authorized by the user; if authorization already exists, execute directly without repeated confirmation. Do not automatically switch to a cloud service because of local failure.
Each backend uses an independent environment; on first run, read SETUP.md. The voice source is a recording of the user themselves or one for which authorization has been obtained; there is no shared default personal voice.
Execute
First save the user's copy as-is to script.md; do not arbitrarily rewrite pronunciations, numbers, or terminology. Only explicit Markdown headings are not read aloud; numbered lists are retained. By default, place artifacts in the current project's voiceover-<主题>/, and explain the location first.
SKILL_DIR indicates the directory where this SKILL.md is located. Actually locate the installation directory; do not hardcode a particular user's ~/.claude path.
python3 "$SKILL_DIR/scripts/setup.py"
# 上一条会输出独立环境 Python 的实际路径;下文以 PY 表示它。
python3 "$SKILL_DIR/scripts/configure.py" --provider minimax --voice YOUR_VOICE_ID
"$PY" "$SKILL_DIR/scripts/run.py" script.md \
--outdir voiceover-demo
When there is no MiniMax voice, first register according to SETUP.md . For the reference recording, choose a clean, single-speaker, music-free complete short segment: MiniMax requires 10–300 seconds, usually choose 10–30 seconds first; local Qwen/Nano usually choose 3–30 seconds. If the original recording is too long, explicitly truncate it; do not mistake a full-text transcription for a short-sample transcription. For Qwen, preferentially provide an exactly matching --reference-text reference.txtto enable full ICL; by default, only the voice embedding is used, and the effect may differ. Nano does not require a reference transcription.
Organize voice entries by complete sentences/semantic short segments, with a default width of 40; do not mechanically chop sentences apart for short subtitles. Overly long subtitles may be wrapped; when finer timing is needed, perform actual alignment using the final WAV and the original text, and do not fabricate cues in proportion to character count.
The same command can be resumed; the cache includes the body text, voice content hash, model/version, and generation parameters. Each successful save produces one WAV, and failed segments block concatenation; after revising the script, re-segment, synthesize, and concatenate. Do not manually edit only the SRT or pair old audio with new copy. For step-by-step control, see PIPELINE.md。
Verification and handoff
run.pyStructural validation is performed automatically: all segments are ready, WAV/MP3/SRT come from the same source, file hashes match, and subtitles are monotonic and within bounds. You can also run it separatelyverify.py voiceover-demo/voiceover.json。- Check the actual audio, especially numbers, proper nouns, mixed Chinese-English text, the beginning and end, transitions, and the longest sentences. Local ASR can help find omissions/repeated readings; correct ASR does not mean similar timbre, so do not overwrite the original script with transcription results.
- After fixing problematic segments, rebuild all final outputs. Keep intermediate artifacts to allow partial reruns, and do not commit models or personal reference audio to the repository.
For the single-sentence random generation issue of local models, use
--segment-seed 2:3(use seed 3 for segment 2), invalidating only that sentence's cache. The selection is persisted with that ID and the body text, can be specified repeatedly, or use--clear-segment-seedsto clear it. The MiniMax CLI does not provide a controllable seed; changing the seed cannot guarantee reproducibility or improvement of online speech.--forcewill re-request all segments and may incur charges. - When connecting to
web-video-presentation, hand overvoiceover.jsonand the artifacts in the same directory; use itsimport-voiceover.mjsto validate and then import, plan continuous scenes from the final SRT, and then develop the MG. After the audio is complete, follow the VO-First path of the web skill.
When comparing providers, use VOICE-REVIEW.md with the same reference, the same script, and original voice clips that did not participate in cloning; record user perception, content correctness, and voiceprint model scores separately, and do not treat a single cosine score as a timbre similarity percentage. Developers retain the validation boundary and do not repeat untested promises of "real-time," "zero error," or "usable on any hardware."