--- license: apache-2.0 language: - de pipeline_tag: text-to-speech library_name: sherpa-onnx base_model: Godelaune/Kokoro-82M-ONNX-German-Martin tags: - onnx - kokoro - sherpa-onnx - text-to-speech - german - single-speaker --- # Kokoro German "Martin" — sherpa-onnx package The German Kokoro voice **Martin**, repackaged for **[sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx)** so it runs as **fully offline, on-device** German text-to-speech. This is the voice shipped in **Page Reader** (scan or paste text → read it aloud, entirely on the phone, no network at runtime). ## Samples Synthesized with *this* package via sherpa-onnx, with Page Reader's German correction lexicon applied (see below). **Introduction** > „Hallo, ich bin Martin, die deutsche Stimme von Page Reader. Ich lese Ihre Dokumente vor, > vollständig offline auf dem Gerät." **Numbers & dates** — expanded to spoken German by the app *before* synthesis: > „Am vierundzwanzigsten Juni benötigten rund sechshundertachtzigtausend Menschen humanitäre Hilfe." > *(from the raw text „Am 24. Juni … 680 000 Menschen …")* ## What's in the archive `kokoro-de-martin.tar.bz2` is everything sherpa-onnx's Kokoro TTS needs: - `model.onnx` — the Martin ONNX with sherpa-onnx metadata injected (`model_type=kokoro`, `sample_rate=24000`, `style_dim=510,1,256`, `n_speakers=1`, `id2speaker=0->martin`, …) - `voices.bin` — the voice style vector (510×1×256 float32) - `tokens.txt` and `espeak-ng-data/` — from the base k2-fsa Kokoro release ## Reading German correctly (the quality layer) A good voice is only half the story — the phonemes it's given have to be right. Both Kokoro and Piper phonemize German with **espeak-ng**, so any word espeak's G2P gets wrong is mispronounced by *every* espeak-based voice. Page Reader fixes that with two reproducible, open pieces layered on top of this voice: - **Pronunciation-correction lexicon.** We audit espeak-ng against the **WikiPron** (Wiktionary) pronunciation dictionary across ~**49k** German words, fold away espeak's *systematic* conventions (which the models were trained on and render correctly), and turn the remaining *word-specific* errors into a sherpa-onnx Kokoro lexicon (**2,000+ entries**) plus a corrected espeak `de_dict`. Word **stress** is corrected from Wiktionary — top-5k error rate **6.8% → 1.6%**. English anglicisms/names Germans actually use get Germanized pronunciations too. - **Language-aware text normalization.** Numbers, dates, currency and ordinals are expanded to spoken German keyed to the *document's* language and surviving OCR line-wraps — e.g. **„680 000" → „sechshundertachtzigtausend"** (not „sechshundertachtzig null"), „24. Juni" → „vierundzwanzigsten Juni". Both are built by reproducible tooling (an espeak-vs-WikiPron audit + a Kokoro-lexicon generator, and this repackager) rather than hand-editing — so they can be regenerated and improved. ## Provenance & license **Apache-2.0**, inherited from upstream. This is a **repackaging**, not a new training run: - ONNX source: [Godelaune/Kokoro-82M-ONNX-German-Martin](https://huggingface.co/Godelaune/Kokoro-82M-ONNX-German-Martin) - Fine-tune: [kikiri-tts/kikiri-german-martin](https://huggingface.co/kikiri-tts/kikiri-german-martin) (Martin Harbecke voice, StyleTTS2) - Architecture: [hexgrad/Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) - `tokens.txt` + `espeak-ng-data/`: k2-fsa sherpa-onnx Kokoro release ## How it was built Reproducibly, by the `martin-repackage` build chain: inject the sherpa-onnx Kokoro metadata, convert the voice `.npz` to `voices.bin`, and assemble the archive. A `verify` step loads it with sherpa-onnx and synthesizes a German clip to confirm it works before publishing. ## Usage Extract `kokoro-de-martin.tar.bz2` and point sherpa-onnx's Kokoro config at `model.onnx`, `voices.bin`, `tokens.txt`, and `espeak-ng-data/` with `lang=de` (add the German lexicon for the corrected pronunciations shown above).