luis-castillo/Kokoro-82M-OpenVINO-FP16-OVMS
Kokoro-82M — OpenVINO IR (FP16), OVMS-ready
OpenVINO IR (FP16) conversion of `hexgrad/Kokoro-82M`, packaged so you can pull it straight into [OpenVINO Model Server (OVMS)](https://github.com/openvinotoolkit/model_server) and serve text-to-speech over the OpenAI-compatible /v3/audio/speech endpoint. Includes the ready-made MediaPipe graph.pbtxt, all 54 speaker embeddings, and the misaki G2P lexicon data.
This is a redistribution of an Apache-2.0 model. All credit for the model goes to the Kokoro authors (hexgrad/Kokoro-82M). Change made: exported to OpenVINO IR (FP16) via optimum-intel and wrapped with an OVMS T2S graph.
⚠️ Requirements — OVMS build with Kokoro support
Kokoro TTS support landed in openvino.genai after the 2026.1/2026.2 releases. As of this writing it ships only in OVMS pre-release images:
- ✅
openvino/model_server:weekly(2026.3.0+, built with--//:espeak=on) — works - ❌
openvino/model_server:latest/2026.2.1/2026.1— SpeechT5-only, will fail withUnsupported text to speech generation pipeline
espeak-ng (used as the primary G2P for non-English languages) is bundled in the weekly image. Check stable releases for Kokoro support before using a :latest tag.
Deploy on OVMS
1. Download into your model repository
huggingface-cli download <THIS_REPO> --local-dir ./models/Kokoro-82M2. Add it to your OVMS config.json
{
"model_config_list": [
{ "config": { "name": "Kokoro-82M", "base_path": "/models/Kokoro-82M" } }
]
}3. Serve
docker run --rm -p 8000:8000 \
-v $(pwd)/models:/models \
openvino/model_server:weekly \
--config_path /models/config.json --rest_port 8000GPU: pass --device /dev/dri --group-add $(getent group render | cut -d: -f3) and edit target_device: "CPU" → "GPU" in graph.pbtxt. (The bundled graph defaults to CPU for portability; the main acoustic model honors GPU.)
Generate speech
curl http://localhost:8000/v3/audio/speech \
-H "Content-Type: application/json" \
-d '{"model":"Kokoro-82M","voice":"af_heart","language":"en-us","input":"Hello from OpenVINO Model Server."}' \
-o out.wav⚠️ The language field is required for non-English — and is NOT inferred from the voice
The OVMS T2S endpoint defaults `language` to `en-us`. The voice name prefix (e.g. ef_) does not select the language. If you send Spanish text without "language":"es", it is phonemized in English → it sounds like English-accented Spanish ("spanglish"). Always set language explicitly:
# Spanish
curl http://localhost:8000/v3/audio/speech -H "Content-Type: application/json" \
-d '{"model":"Kokoro-82M","voice":"ef_dora","language":"es","input":"Hola, esto es una prueba de voz."}' -o es.wavSupported language values: en-us, en-gb, es, fr-fr, it, pt-br, hi (aliases: a, b, e, f, i, p, h). Non-English uses espeak-ng for G2P.
Other request fields: voice (see below), speed (float, default 1.0).
Voices (54)
Notes / limitations
- Output: 24 kHz mono WAV (IEEE float).
- No streaming — the OVMS T2S calculator returns the full clip per request.
- Quality scales with voice quality grade; American English voices are the most polished. Spanish is Castilian (
es);es-419is not currently a selectable variant in the genai pipeline.
How this was converted
optimum-cli export openvino \
--model hexgrad/Kokoro-82M \
--task text-to-audio \
--weight-format fp16 \
--trust-remote-code \
Kokoro-82M(optimum-intel registers Kokoro under library_name=kokoro / task=text-to-audio and also writes each speaker embedding to voices/<name>.bin.) The graph.pbtxt here is the OVMS T2S MediaPipe graph referencing those voices.
License
Apache-2.0, inherited from the base model `hexgrad/Kokoro-82M`. See that repository for the full model details and authorship.
