papercut-voice
Installation
SKILL.md
Papercut voice
Every later stage needs two things in the narration folder: voice/final_narrator/<id>.wav (one WAV per script line) and timing_narrator.js (a start and end for every word). This skill produces them by one of three paths, then builds the captions and the scene plan. The full reference for the scripts is library/voice/README.md.
Preflight
- Library:
$PAPERCUT_LIB, else thePAPERCUT_LIB=line in~/.config/papercut-explainer/config.env, else ask once. Export it, and. "$PAPERCUT_LIB/env.sh"loadsASR_PY,QWEN_TTS_PYand the other config values into the shell. - A scaffolded project (
papercut-build, step 1) withnarration/script.jsonandpapercut/episode.jsonholdingscenes.new_episode.shcopiesbuild_timing.pyintonarration/. - If the user already has a TTS installed, use it as it is and don't rebuild it (path B, or A if it is Qwen3-TTS). Ask once which one and where it runs. Otherwise ask which path, and say what it needs:
| Path | Needs | Install mode |
|---|---|---|
| A. Local Qwen3-TTS | the voice venv from library/voice/setup_tts.sh (model download 2.3-4.2 GB) |
Full |
| B. Your own recording or another TTS | an ASR backend (mlx-whisper or faster-whisper) and librosa + numpy for the pitch pass, in the Python that ASR_PY and QWEN_TTS_PY name |
Full, or those packages by hand |
| C. Placeholder | ffmpeg; macOS for --say |
Standard |
If the path needs more than the install has, run ./install.sh --doctor and hand over to papercut-setup. Without ASR, build_timing.py only estimates 2.75 words a second, so captions drift against real audio.