File size: 4,684 Bytes
a9a6270 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | # kikiri-tts
<img src="docs/images/kikiri-tts-logo.png" alt="kikiri-tts logo" width="150">
> [!NOTE]
> This repository was formerly named `kokoro-deutsch`. The Python package and the
> published HuggingFace model still use the old `kokoro-deutsch` name.
Training recipe for fine-tuning [Kokoro-82M](https://github.com/hexgrad/kokoro) for German with a patched [StyleTTS2](https://github.com/yl4579/StyleTTS2) submodule.
## What This Is
- A reproducible fine-tuning workflow (dataset prep -> Stage 1 -> Stage 2 -> voicepack extraction)
- Original scripts for data preparation and checkpoint/voicepack conversion
- A patched `StyleTTS2/` submodule with the fixes required for stable Stage 2 training
## What This Is Not
- Not a general-purpose Kokoro replacement repository
- Not a bundled upstream mirror of `demo/`, `examples/`, `kokoro.js/`, or `tests/`
- Not a redistributable training dataset
## Start Here
### I want to train my own German voice
Start with `docs/TRAINING_GUIDE.md`.
### I am debugging training failures
Go to `docs/TROUBLESHOOTING.md`.
### I want architecture details and compatibility notes
See `docs/ARCHITECTURE.md`.
## Status
The end-to-end pipeline is working:
`Dataset preparation -> Weight conversion -> Stage 1 -> Stage 2 -> Voicepack extraction -> KModel inference`
## Published Models & Voices
All checkpoints are compatible with the Kokoro-82M inference pipeline.
### Base Model
**dida-80b/kokoro-deutsch-hui-base** is a German multi-speaker Stage 1 base model
trained on ~51 hours of audio. It is not a finished single-speaker voice —
use it as a starting point for training your own with
`docs/TRAINING_GUIDE.md`.
| Specification | Value |
|---|---|
| Speakers | 51 (24M / 27F) |
| Training Audio | ~51 hours (effective) |
| Train Samples | 20,495 |
| Val Samples | 418 |
| Final Mel Loss | 0.3264 |
| License | CC0-1.0 |
| Model | [dida-80b/kokoro-deutsch-hui-base](https://huggingface.co/dida-80b/kokoro-deutsch-hui-base) |
| Dataset | [dida-80b/hui-german-51speakers](https://huggingface.co/datasets/dida-80b/hui-german-51speakers) |
### Fine-Tuned Voices
Stage 2 single-speaker fine-tunings. Each ships with a speaker voicepack.
Click the links to hear speech demos directly from HuggingFace.
#### German (de)
| Voice | Speaker | Samples | License | Demo |
|-------|---------|---------|---------|------|
| **[kikiri-german-martin](https://huggingface.co/kikiri-tts/kikiri-german-martin)** | Martin Harbecke (male) | 627 | Apache 2.0 | [Speech Demo](https://huggingface.co/kikiri-tts/kikiri-german-martin/blob/main/README.md#demo) |
| **[kikiri-german-victoria](https://huggingface.co/kikiri-tts/kikiri-german-victoria)** | Victoria Asztaller (female) | 455 | Apache 2.0 | [Speech Demo](https://huggingface.co/kikiri-tts/kikiri-german-victoria#demo) |
*More voices and languages coming soon. Check the [kikiri-tts](https://huggingface.co/kikiri-tts) HuggingFace organization for updates.*
## Running Verification Tests
To run a quick text-to-speech sanity check — e.g. after updating phonemizer
packages like `misaki`, bumping dependencies, or making model changes — run the
inference script with no arguments:
```bash
uv run scripts/test_inference.py
```
On first run this downloads a reference model
([`kikiri-tts/kikiri-german-martin`](https://huggingface.co/kikiri-tts/kikiri-german-martin))
and voicepack into a local cache (`test_output/.model_cache/`), synthesizes the
standard German phonetic test sentences, and writes the audio to `test_output/`.
It runs on CPU automatically when no GPU is available, so it works on any machine
and in CI/CD pipelines. Subsequent runs reuse the cached files.
To test a specific checkpoint or voice instead, pass explicit paths:
```bash
uv run scripts/test_inference.py \
--model voices/kokoro_german_epoch3.pth \
--voicepack voices/dm_daniel_epoch3.pt \
--device cpu
```
## Repository Layout
```text
kokoro/ # Kokoro fork submodule (contains the `kokoro/` Python package)
StyleTTS2/ # Patched training code (git submodule: semidark/StyleTTS2)
scripts/ # Dataset prep, voicepack extraction, inference testing
configs/ # Training config(s)
docs/ # Training guide, troubleshooting, architecture notes
training/ # Local training artifacts metadata (audio excluded)
```
## Contributing
Contributions are welcome, especially:
- Reproducible runs on public datasets
- Fine-tuning recipes for other languages
- Training stability and quality improvements
## Attribution
See `NOTICE` for upstream attribution and license details.
## License
Apache License 2.0 — see `LICENSE`.
|