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 the PAPERCUT_LIB= line in ~/.config/papercut-explainer/config.env, else ask once. Export it, and . "$PAPERCUT_LIB/env.sh" loads ASR_PY, QWEN_TTS_PY and the other config values into the shell.
  • A scaffolded project (papercut-build, step 1) with narration/script.json and papercut/episode.json holding scenes. new_episode.sh copies build_timing.py into narration/.
  • 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.

Path A: local Qwen3-TTS

Installs
53
GitHub Stars
94
First Seen
Oct 13, 2026