--- license: cc0-1.0 language: - de pipeline_tag: text-to-speech library_name: piper tags: - piper - tts - onnx - vits - thorsten-voice - german --- # Thorsten-Voice – Piper (German, trained from scratch, v0.1 experimental) A German single-speaker [Piper](https://github.com/OHF-Voice/piper1-gpl) voice by [Thorsten-Voice](https://www.thorsten-voice.de), **trained entirely from scratch on Thorsten's own CC0 recordings**. Most Piper voices are fine-tuned from the `en_US-lessac` checkpoint, whose underlying dataset is licensed for research use only. This model uses **no third-party checkpoint at all** – no `--ckpt_path`, no `--model.warmstart_ckpt`, no `--model.vocoder_warmstart_ckpt`. The weights are derived exclusively from the CC0 dataset below and are released under **CC0 1.0**. > **Status: experimental (v0.1).** Clearly intelligible and recognisably Thorsten's voice, but > pronunciation and stress of some words are noticeably weaker than in the existing > lessac-based Thorsten Piper voice (see *Limitations*). Published mainly as a clean, > license-unencumbered base checkpoint. ## Files | File | Description | |---|---| | `de_DE-thorsten_scratch-medium.onnx` | Voice model (epoch 1799, end of LR schedule) | | `de_DE-thorsten_scratch-medium.onnx.json` | Voice config | | `checkpoints/epoch=1799-last.ckpt` | Full Lightning checkpoint (generator + discriminators + optimizer) for fine-tuning | | `checkpoints/epoch=1791-val_mos=3.3306.ckpt` | Checkpoint with best UTMOS score | ## Usage ```sh pip install piper-tts echo "Hallo, ich bin die Stimme von Thorsten." | \ piper -m de_DE-thorsten_scratch-medium.onnx -f hallo.wav ``` ### Fine-tuning on top of this checkpoint Use it as a lessac-free starting point (any espeak-ng language, `medium` quality): ```sh python3 -m piper.train fit ... --model.warmstart_ckpt checkpoints/epoch=1799-last.ckpt ``` ## Training data - Dataset: **Thorsten-Voice 2022.10** (neutral), CC0 - 12,450 utterances, 11.22 h, 22,050 Hz, mono, mean utterance length 3.24 s - Text: lower-cased, normalized; phonemized with espeak-ng (`de`) - Split: 10 % validation (`validation_split 0.1`), 20 test examples – these were **not** used for training ## Training setup | | | |---|---| | Code | piper1-gpl, commit `` (version ``) | | Framework | PyTorch 2.15.0+cu132, Lightning | | Hardware | 1 × NVIDIA A40 (48 GB) | | Duration | ~4.3 days (Nov 4–9, 2026) | | Epochs | 1,800 (~214 vocoder passes over the training audio) | | Batch size | 32, length bucketing enabled | | Quality | medium, 22,050 Hz | | LR schedule | exponential decay to 5 % of initial LR, derived from `max_epochs` | ### Final validation metrics | Checkpoint | val_mel | val_mos (UTMOS) | |---|---|---| | epoch 1799 (`last`) | 0.3751 | – | | epoch 1791 | – | 3.33 | UTMOS is trained mainly on English; German voices typically land between 3.3 and 3.8. ## Limitations - **Pronunciation/stress:** compared with the lessac-based Thorsten Piper voice, some words are stressed or pronounced less accurately (e.g. *Intendantin, Rathaus, sprichst, Tobias, Rheinufer, Gratiszeitungen*). Likely causes: only ~10 h of training audio without any pretraining, combined with espeak-ng phonemization errors for these words that a model with more data compensates for better. - Single speaker, neutral style only. ## Export note With PyTorch ≥ 2.9 the ONNX export in piper1-gpl needed two adjustments: `pip install onnxscript`, and `dynamo=False` in the `torch.onnx.export(...)` call of `src/piper/train/export_onnx.py` (the new exporter fails on the VITS spline flows). ## License Model weights and this card: **CC0 1.0** (public domain dedication). The Piper training/runtime code (piper1-gpl) and espeak-ng are GPL-3.0; this affects the software, not the voice model. ## Credits Voice and dataset: Thorsten Müller / [Thorsten-Voice](https://www.thorsten-voice.de). Training framework: [Piper](https://github.com/OHF-Voice/piper1-gpl) by Michael Hansen and contributors.