Custom Voice Tester ๐๏ธ
66 custom blended voices created by mixing existing Kokoro TTS voice embeddings. Each blend combines 2โ5 base voices with different weights to create unique timbres. 20+ Mandarin Chinese voices are included, plus English, Japanese, European, and fusion blends.
Load Model
Download Kokoro-82M (~305MB) once. Cached in browser.
Type Text
Enter any text to test. English is 100% offline; other languages phonemize via API.
Test Voices
Click Play on any voice card. Or Play All to hear every voice sequentially.
How custom voice blending works
Each Kokoro TTS voice is stored as a .bin file containing a Float32Array of style embeddings at 256-element intervals. When blending, we take a weighted average of the embedding vectors from multiple source voices, producing a brand-new voice that combines characteristics of all source voices proportionally.
The blend script (scripts/generate_custom_voices.py) loads source voice .bin files,
computes the weighted average, and saves the result as a new .bin file. No retraining or fine-tuning
is needed โ the result works immediately with the standard Kokoro-82M ONNX model.
Language handling: The test page detects the dominant source voice's language and uses it for phonemization. For English blends, kokoro-js's built-in espeak phonemizer is used. For non-English blends (Chinese, Japanese, etc.), text is phonemized via the OfflineTTS phonemize API, which runs misaki (Japanese/Chinese) or espeak-ng (other languages). Audio synthesis always happens locally on your device.
API: POST /api/phonemize with { text, lang } โ returns IPA phonemes.
English codes: a, b. Non-English: j (ja), z (zh), e (es), f (fr), h (hi), i (it), p (pt-br).