Kokoro TTS
Kokoro-82M एक हल्का, non-autoregressive टेक्स्ट-टू-स्पीच मॉडल है जो ISTFTNet vocoder के साथ StyleTTS 2 पर आधारित है। यह पूरी तरह CoreML के माध्यम से Neural Engine पर चलता है, single forward pass में text input से natural 24 kHz speech उत्पन्न करता है।
Kokoro-82M ऑन-डिवाइस iOS डिप्लॉयमेंट के लिए डिज़ाइन किया गया है। 82M पैरामीटर (~80 MB 1 bucket, INT8 के साथ) पर, यह iPhone और iPad पर आराम से फिट बैठता है। CoreML Neural Engine पर चलता है, जो अन्य कार्यों के लिए GPU को फ़्री छोड़ देता है।
समर्थित भाषाएँ
| भाषा | कोड | उदाहरण Voices |
|---|---|---|
| अंग्रेज़ी (US) | en | af_heart, am_adam, af_sky |
| अंग्रेज़ी (UK) | en | bf_emma, bm_george |
| स्पेनिश | es | ef_dora |
| फ़्रेंच | fr | ff_siwis |
| हिन्दी | hi | hf_alpha, hm_omega |
| इटालियन | it | if_sara |
| जापानी | ja | jf_alpha, jm_omega |
| पुर्तगाली | pt | pf_dora |
| चीनी | zh | zf_xiaobei, zm_yunjian |
| कोरियाई | ko | kf_somi |
कुल 50 preset voices। Voice नामकरण convention: [language][gender]_[name] — जैसे, af_heart = American Female "Heart"।
आर्किटेक्चर
Kokoro एक 3-stage CoreML पाइपलाइन का उपयोग करता है। कोई sampling loop नहीं — सभी चरण stages 1 और 2 के बीच एक Swift-side alignment चरण के साथ non-autoregressive forward passes हैं।
3-चरण पाइपलाइन
| चरण | मॉडल | इनपुट | आउटपुट |
|---|---|---|---|
| 1. Duration | duration.mlmodelc | Phoneme tokens + voice embedding + speed | Durations, prosody features, text encoding |
| — | Swift alignment | Durations + stage 1 features | Aligned prosody और text features |
| 2. Prosody | prosody.mlmodelc | Aligned prosody features + style | F0 (pitch) + noise predictions |
| 3. Decoder | decoder_*.mlmodelc | Aligned text + F0 + noise + style | 24 kHz ऑडियो waveform |
Phoneme Buckets (Duration Model)
Duration मॉडल enumerated input shapes का उपयोग करता है। Input सबसे छोटे bucket पर पैड किया जाता है जो fit होता है:
| Bucket | Max Phonemes | उपयोग केस |
|---|---|---|
| p16 | 16 | छोटे वाक्यांश |
| p32 | 32 | छोटे वाक्य |
| p64 | 64 | मध्यम वाक्य |
| p128 | 128 | लंबे वाक्य |
Decoder Buckets
विभिन्न अधिकतम ऑडियो लंबाइयों के लिए Fixed-shape decoder मॉडल (प्रत्येक frame = 24 kHz पर 600 samples):
| Bucket | Max Frames | Max Audio |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10.0s |
decoder_15s | 600 | 15.0s |
iOS 18+ / macOS 15+ की आवश्यकता है।
Phonemizer
Text को तीन-स्तरीय पाइपलाइन के माध्यम से phoneme tokens में कन्वर्ट किया जाता है — सभी Apache-2.0 licensed, कोई GPL dependencies नहीं:
- Dictionary lookup — heteronym समर्थन के साथ US अंग्रेज़ी और British अंग्रेज़ी उच्चारण शब्दकोश
- Suffix stemming — ज्ञात suffixes के लिए morphological विघटन (जैसे, "-ing", "-tion")
- BART G2P — out-of-vocabulary शब्दों के लिए एक अलग CoreML encoder-decoder मॉडल का उपयोग करके neural grapheme-to-phoneme fallback
मॉडल Weights
| कॉम्पोनेंट | आकार | फ़ॉर्मैट |
|---|---|---|
| Duration model | ~39 MB | .mlmodelc |
| Prosody model | ~17 MB | .mlmodelc |
| Decoder models (3 buckets) | ~107 MB प्रत्येक | .mlmodelc |
| Voice embeddings (54 voices) | ~0.3 MB | JSON (256-dim Float32) |
| G2P encoder + decoder | ~1.5 MB | .mlmodelc |
| शब्दकोश + vocab | ~6 MB | JSON |
| कुल (1 decoder) | ~170 MB |
परफ़ॉर्मेंस
| मेट्रिक | मान |
|---|---|
| पैरामीटर | 82M |
| इन्फ़रेंस बैकएंड | CoreML (Neural Engine) |
| इन्फ़रेंस RTFx | ~0.7 (रियल-टाइम से तेज़) |
| आउटपुट sample rate | 24 kHz |
| Weight memory | ~170 MB (1 decoder bucket) |
Qwen3-TTS और CosyVoice3 के विपरीत जो tokens को step-by-step उत्पन्न करते हैं, Kokoro बिना sampling loop के 3-stage पाइपलाइन का उपयोग करता है। सभी चरण deterministic forward passes हैं।
CLI उपयोग
audio kokoro "Hello, world!" --voice af_heart --output hello.wav
विकल्प
| विकल्प | डिफ़ॉल्ट | विवरण |
|---|---|---|
<text> | Synthesize करने के लिए text | |
--voice | af_heart | Voice preset नाम |
--language | en | भाषा कोड: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Output WAV फ़ाइल पथ |
--list-voices | सभी उपलब्ध voices सूचीबद्ध करें और बाहर निकलें | |
--model, -m | HuggingFace मॉडल ID |
उदाहरण
# English with default voice
audio kokoro "Hello, how are you today?" --output hello.wav
# French
audio kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav
# Japanese
audio kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav
# List all 50 voices
audio kokoro --list-voices
Swift API
import KokoroTTS
import AudioCommon
let tts = try await KokoroTTSModel.fromPretrained()
// Downloads ~170 MB on first run
let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — 24 kHz mono PCM
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)
Kokoro कब उपयोग करें
| उपयोग केस | अनुशंसित TTS |
|---|---|
| iOS ऐप, हल्का, battery-efficient | Kokoro (CoreML, 82M params, ~170 MB) |
| उच्चतम गुणवत्ता, streaming, voice cloning | Qwen3-TTS (MLX, 600M params, ~1.7 GB) |
| बहुभाषी streaming, 9 भाषाएँ | CosyVoice3 (MLX, 500M params, ~1.2 GB) |
| Full-duplex बोला गया संवाद | PersonaPlex (MLX, 7B params, ~5.5 GB) |
लाइसेंस
- Model weights: Apache-2.0 (hexgrad/Kokoro-82M)
- CoreML conversion: Apache-2.0 (aufklarer/Kokoro-82M-CoreML)
- Dictionaries and G2P: Apache-2.0