Model reference · open weights

kokoro-tts-kazakh

Audio TilLabs Text→speech 1 build Open weights 515 dl/mo

kokoro-tts-kazakh is an open-weight audio or speech model from TilLabs. kokoro-tts-kazakh (BF16) weighs 327 MB; the smallest configuration that runs it is RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • kokoro-tts-kazakh is a single-speaker Kazakh text-to-speech model developed by TilLabs.
  • It is built by fine-tuning the 82M-parameter Kokoro architecture on the ISSAI KazakhTTS2 corpus.
  • The model supports the Kazakh language and operates at a 24 kHz sample rate.
  • It is designed for real-time synthesis on CPU without requiring a GPU, with peak memory usage around 1.4 GB.
  • The model is released under the Apache 2.0 license.

Summary of the TilLabs/kokoro-tts-kazakh model card, 2026-10-01

What it is

Released byTilLabs
Released2026-07-28
VRAM327 MB for the weights

What it runs on

Memory and cards for kokoro-tts-kazakh (BF16)

327 MBweights, file size
1.6 GBruntime overhead
CardOne streamMemory
RTX 3060 12 GBfits11.6 GB
RTX 4060 Ti 16 GBfits15.4 GB
RTX 3090 24 GBfits23.4 GB
RTX 4090 24 GBfits23.4 GB
RTX 5090 32 GBfits31.0 GB
L40S 48 GBfits44.0 GB
A100 80 GBfits78.2 GB
H100 80 GBfits78.1 GB
RTX PRO 6000 Blackwell 96 GBfits93.8 GB
DGX Spark (GB10) 128 GB unifiedfits107 GB
H200 141 GBfits138 GB
B200 180 GBfits176 GB

From the model card

What TilLabs says about kokoro-tts-kazakh

Read the model card

Nuraidar Mambetaly · Anuar Sultanbekov · Altair Balakhazy

A single-speaker Kazakh text-to-speech voice, built by fine-tuning Kokoro-82M on the ISSAI KazakhTTS2 corpus with a StyleTTS2-based training pipeline (kikiri-tts).

Kokoro is an 82M-parameter architecture, which keeps this checkpoint lightweight and fast — synthesis runs comfortably in real time on a regular CPU, with no GPU required for inference.

Samples

All three were synthesized from held-out validation text not seen during training (see Why This Checkpoint).

Model Details

Base modelhexgrad/Kokoro-82M (82M params, 24 kHz)
LanguageKazakh (kk)
Speakerkm_m1 — male, single speaker
Training frameworkkikiri-tts (StyleTTS2 Stage 1 + Stage 2)
Phonemizationespeak-ng via misaki, IPA
Training audio (km_m1)102.8 h across 48,154 clips
Full multi-speaker corpusISSAI KazakhTTS2 — 5 speakers, 269.9 h total
LicenseApache 2.0 (inherited from Kokoro-82M / kikiri-tts)

Training Configuration

Value
Batch size12
OptimizerAdamW (betas=0.0/0.99, eps=1e-9, weight_decay=1e-4)
Learning rate (acoustic / PL-BERT)1e-4 / 1e-5
Epochs (Stage 1 / Stage 2)5 / 5
joint_epoch2 (adversarial/SLM loss starts here — required to avoid style-encoder collapse)
Sample rate24,000 Hz, 80 mel bands
Training time≈ 52 hours (13h Stage 1 + 38.6h Stage 2)

Why This Checkpoint

StyleTTS2/GAN-style training can silently collapse the style encoder partway through a run, so checkpoints are not reliable to pick by filename or epoch number alone. Several km_m1 candidates produced during training were instead synthesized on 20 held-out validation sentences (not seen during training) and scored for word error rate (WER) using a Kazakh-fine-tuned Whisper ASR model with jiwer:

VoicepackWER on held-out setVerdict
final (this release)16.4%Clean, intelligible speech
epoch4_good131.3%Garbled / repetitive looping — stale, incompatible with the current decoder despite the filename
epoch9_collapsed217.4%Confirmed style-encoder collapse

final matches the exact decoder weights shipped here (kokoro_kazakh.pth) — both were exported from the same training checkpoint, so there is no decoder/voicepack mismatch. Stage 2 validation loss also decreased monotonically across all 5 epochs of this run (0.402 → 0.385), with no sign of the divergence seen in the collapsed run.

Installation & Usage

Runs on CPU — no GPU needed.

pip install torch kokoro "misaki[kk]"

misaki[kk] pulls in espeak-ng bindings for Kazakh phonemization; see kikiri-tts for a ready-made inference script (inference_kazakh.py).

Note: kokoro_kazakh.pth is stored using the legacy weight_norm key format (weight_g / weight_v) so it loads cleanly with current torch/kokoro releases. If you re-export this checkpoint yourself from a different PyTorch version, double-check the resulting key names match what your installed kokoro expects — a silent weight_g/weight_v vs. parametrizations.weight.original0/original1 mismatch will make load_state_dict skip the decoder/predictor weights without raising an error, producing noise instead of speech.

import torch
from kokoro import KModel
from misaki import espeak

g2p = espeak.EspeakG2P(language="kk")
model = KModel(repo_id="hexgrad/Kokoro-82M", config="config.json", model="kokoro_kazakh.pth").eval()
voicepack = torch.load("km_m1.pt", map_location="cpu", weights_only=True)

text = "Сәлем! Бұл қазақ тіліндегі сөйлеу синтезі."
phonemes, _ = g2p(text)
ref_s = voicepack[min(len(phonemes) - 1, voicepack.shape[0] - 1)]

audio = model(phonemes, ref_s, speed=1.0)

Download the checkpoint files directly with huggingface_hub:

from huggingface_hub import snapshot_download
snapshot_download("AnuarSv/kokoro-tts-kazakh", local_dir="kokoro-tts-kazakh")

CPU Benchmarks

Measured on an AMD Ryzen 5 5500U (6 physical cores / 12 threads via SMT, up to 4.06 GHz, no GPU), synthesizing a 3-sentence, 22.45s-audio test set:

CPU threadsSynthesis timeReal-time factor (RTF)Speed vs. real timePeak RAM
120.9 s0.93×1.1×1.46 GB
213.1 s0.58×1.7×1.46 GB
311.0 s0.49×2.0×1.39 GB
49.5 s0.42×2.4×1.41 GB
59.1 s0.41×2.5×1.41 GB
68.7 s0.39×2.6× (peak)1.41 GB
89.7 s0.43×2.3×1.42 GB
109.7 s0.43×2.3×1.42 GB
1210.1 s0.45×2.2×1.39 GB

Throughput scales with core count up to the number of physical cores (6 here); beyond that, additional SMT threads add scheduling overhead without extra real compute, so speed slightly regresses. Even single-threaded, this model already runs faster than real time. Peak memory stays flat at ~1.4 GB regardless of thread count.

The table above measures single-request latency: how many threads to give one synthesis call so it finishes faster. That's a different question from throughput: how many simultaneous requests from different users the machine can serve. For that, each request should run single-threaded, with concurrency handled by running multiple worker processes in parallel instead of parallelizing one request across threads — this avoids the synchro

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

How it works

How audio & music work

Audio or textinputAudio modelrecognise / synthesiseText or audiooutputSpeech-to-text turns audio into text; text-to-speech and music models turn text into audio.
© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms