# DonMafia — recorded narration, Denis v1

135 Russian MP3 announcements generated offline on 2026-10-03 from the exact text in `lib/recorded-narration.ts`. No player names or private game results are sent to a speech service. There are no runtime TTS dependencies or paid API calls.

On 2026-10-04, `sport-sheriff-acquaintance.mp3` was regenerated: the Sheriff confirms their role instead of being introduced to a separate host. The sport format has no non-playing host.

Voice: `ru_RU-denis-medium`, 22,050 Hz. The [voice-specific model card](https://raw.githubusercontent.com/rhasspy/piper-samples/master/samples/ru/ru_RU/denis/medium/MODEL_CARD) declares the dataset CC0 and links to [OHF-Voice voice-datasets](https://github.com/OHF-Voice/voice-datasets). The [Piper voices repository](https://huggingface.co/rhasspy/piper-voices) declares MIT for the repository; the voice-specific card was checked separately.

The offline generator uses [Piper](https://github.com/OHF-Voice/piper1-gpl), GPL-3.0, and FFmpeg. Neither the Piper engine nor its model is bundled in the website; only the generated audio is served. Do not assume another voice has the same license: check its individual model card before generating or publishing recordings.

Regenerate with the helper scripts and a locally downloaded Denis model:

`node --experimental-strip-types scripts/generate-narrator.mjs /path/to/piper-python /path/to/ru_RU-denis-medium.onnx`

Install `piper-tts` and `imageio-ffmpeg` in that separate Python environment. The adjacent `.onnx.json` must match the model.

To update only a changed phrase, append its key after the model path, for example `sport-sheriff-acquaintance`. Keep the text and shipped MP3 in sync.
