k5 Kazakh VoxCPM2 («main C»)
A Kazakh fine-tune of VoxCPM2 (OpenBMB, 2B, Apache-2.0). It is a tokenizer-free, autoregressive diffusion TTS model that streams natively: about 0.1 s to first audio, and about 32 concurrent real-time streams per H100 with Nano-vLLM-VoxCPM. It speaks Kazakh and also reads Russian and mixed Kazakh–Russian text. It clones a voice from a short reference clip.
This is the commercially usable model of the k5 project. The base is Apache-2.0 and the fine-tuning data is CC BY 4.0. Our separate OmniVoice fine-tune sounds better but is non-commercial.
Training
- Base: VoxCPM2 (2B, 48 kHz decoder).
- Data: the 5 studio speakers of ISSAI KazakhTTS2 (CC BY 4.0), including long-form, gated by DNSMOS BAK ≥ 3.5: ~248 h. Speakers are balanced by √hours.
- Recipe:
- full fine-tune with token-budget batching (2,000);
- EMA weights, epoch 3 (step 30,276);
- checkpoint chosen on a fixed-seed held-out set; near-ties go to the more stable checkpoint.
Results
| Test | CER (GigaAM ASR) |
|---|---|
| FLEURS kk | 0.34 % |
| Kazakh–Russian mixed | 0.35 % |
| FLEURS ru | 0.62 % |
- Stability: 0 failures on a 1,106-sentence stability run (long and short sentences, numbers, abbreviations).
- Blind listening test (native speaker, 20 sentences, base-model bake-off). It used an earlier single-speaker fine-tune of the same VoxCPM2 base, not this checkpoint. That fine-tune scored MOS 3.35, against 3.31 for the human recordings, 3.00 for CosyVoice3 and 2.80 for Qwen3-TTS, and was picked best in 12 of 20 sentences.
- Latency: time to first audio ~0.09 s (H100). With Nano-vLLM batched serving, ~32 concurrent real-time streams per H100.
Important: decode at 24 kHz
The training data is 24 kHz. Decoding with the default 48 kHz VAE conditioning invents a faint >12 kHz "buzz" band. Set the AudioVAE sr_cond = 24000 and resample or play at 24 kHz. The companion repository's inference code does this.
Usage
Use the official voxcpm package (OpenBMB) and point it at this repository:
from voxcpm import VoxCPM
model = VoxCPM.from_pretrained("alibiserikbay/k5-kazakh-voxcpm2") # see the companion repo for the 24 kHz sr_cond setting
wav = model.generate(text="Сәлеметсіз бе! Сізге қалай көмектесе аламын?",
prompt_wav_path="reference.wav", prompt_text="exact transcript of reference.wav")
- Write numbers as words, or use our Kazakh normaliser
kk_tn(in the k5 STT repository). - Streaming and batched serving (Nano-vLLM-VoxCPM), the demo studio and the voice-dialogue cascade are in the companion GitHub repository
k5-kazakh-russian-tts.
Limitations
- Russian has a light Kazakh accent: the training data is Kazakh-only.
- Best with clean, studio-like references.
- Emotions are not trained in this checkpoint.
Licence and attribution
- Weights: Apache-2.0, following the base model.
- Base model: VoxCPM2 by OpenBMB (Apache-2.0).
- Training data: ISSAI KazakhTTS2, Nazarbayev University, CC BY 4.0. Mussakhojayeva et al., KazakhTTS2: Extending the Open-Source Kazakh TTS Corpus With More Data, Speakers, and Topics, LREC 2022. Changes: quality gating, resampling and text normalisation.
Responsible use
Clone only voices you have the right to use. Do not use this model for impersonation, fraud or deception.
Кратко по-русски
- Казахская версия VoxCPM2: потоковая, первый звук ~0.1 с.
- Можно использовать коммерчески: Apache-2.0, данные ISSAI KazakhTTS2 под CC BY 4.0 с указанием авторов.
- Ошибки распознавания синтезированной речи: 0.34 % на казахском, 0.35 % на смешанной речи.
- При декодировании ставьте
sr_cond = 24000.