Instructions to use OpenVoiceOS/phoonnx-kitten-tts with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- KittenTTS
How to use OpenVoiceOS/phoonnx-kitten-tts with KittenTTS:
from kittentts import KittenTTS m = KittenTTS("OpenVoiceOS/phoonnx-kitten-tts") audio = m.generate("This high quality TTS model works without a GPU") # Save the audio import soundfile as sf sf.write('output.wav', audio, 24000) - Notebooks
- Google Colab
- Kaggle
| license: apache-2.0 | |
| language: | |
| - en | |
| tags: | |
| - tts | |
| - text-to-speech | |
| - onnx | |
| - phoonnx | |
| - styletts2 | |
| - kittentts | |
| # phoonnx-kitten-tts | |
| [phoonnx](https://github.com/TigreGotico/phoonnx) mirror of | |
| [KittenML/KittenTTS](https://github.com/KittenML/KittenTTS) — a family of tiny, | |
| fully offline, CPU-only English TTS models. The upstream ONNX graphs are used | |
| unmodified; this repo adds phoonnx-canonical `config.json` files (vocab + | |
| inference defaults) and splits each `voices.npz` into one style `.bin` file | |
| per voice, matching phoonnx's `StyleTTS2Adapter` engine_params contract. | |
| Upstream sources (Apache-2.0, verified on each model card): | |
| - https://huggingface.co/KittenML/kitten-tts-nano-0.1 | |
| - https://huggingface.co/KittenML/kitten-tts-nano-0.2 | |
| - https://huggingface.co/KittenML/kitten-tts-mini-0.1 | |
| ## Layout | |
| ``` | |
| nano-0.1/model.onnx, config.json, <voice>.bin (x8) | |
| nano-0.2/model.onnx, config.json, <voice>.bin (x8) | |
| mini-0.1/model.onnx, config.json, <voice>.bin (x8) | |
| ``` | |
| Voices (same 8 across all tiers): `expr-voice-2-m`, `expr-voice-2-f`, | |
| `expr-voice-3-m`, `expr-voice-3-f`, `expr-voice-4-m`, `expr-voice-4-f`, | |
| `expr-voice-5-m`, `expr-voice-5-f`. | |
| ## Engine contract | |
| `input_ids (int64) + style (1, 256) + speed (1) -> waveform @ 24kHz`, the same | |
| single-graph contract phoonnx's `StyleTTS2Adapter` already implements for | |
| StyleTTS2 and Kokoro — no new adapter code was needed. Tokenization is a | |
| per-character map over espeak-ng `en-us` IPA (with stress marks), reproduced | |
| verbatim from `kittentts==0.1.3`'s inline vocab, not hand-copied. | |
| ## Parity / quality gates (2026-08-04, phoonnx feat/kitten-tts) | |
| WER (parakeet-tdt-0.6b-v2, 5 sentences, `expr-voice-2-f`): | |
| | tier | WER | mean RTF (CPU) | | |
| |---|---|---| | |
| | nano-0.1 | 0.08 | 0.24 | | |
| | nano-0.2 | 0.08 | 0.23 | | |
| | mini-0.1 | 0.04 | 0.49 | | |
| No torch reference implementation is published upstream (KittenTTS ships ONNX | |
| only), so there is no torch<->onnxruntime parity check to run. Upstream ships | |
| exactly one precision per tier (no separate fp16/int8 variants), so no | |
| variant-consistency check applies either. | |
| No 5000-sample trailing trim is applied: `kittentts==0.1.3`'s own | |
| `KittenTTS.generate()` returns the raw graph output with no post-processing, | |
| and inspecting the tail of phoonnx-synthesized audio shows no noise burst | |
| (tail RMS in the same range as the rest of the clip). | |