Model reference · open weights

Kokoro

Audio oddadmix · community Text→speech 1 build Open weights 554 dl/mo

Kokoro is an open-weight audio or speech model from oddadmix. Kokoro-7M-Distill (BF16) weighs 30 MB; the smallest configuration that runs it is RTX 3060 12 GB.

What it is

Released byoddadmix
TypeAudio & music
TaskText→speech
Released2026-09-08
Popularity554 downloads / month
Weights30 MB (Kokoro-7M-Distill (BF16), file size)
LicenceOpen weights

What it runs on

Memory and cards for Kokoro-7M-Distill (BF16)

Weights 30 MB (file size) · overhead about 1.6 GB.

CardOne streamCounted
memory
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

Estimates, not measurements: the weights are the build's file size. A speech model's decoder keeps a small cache for every stream it transcribes, so memory grows with the streams and beams at once. Counted memory is 92 % of what CUDA reports for the card.

From the model card

What oddadmix says about Kokoro

English text to speech in 7.48M parameters, 28.7 MB at full precision. Distilled from Kokoro-82M, which is 11x larger. Small enough to run on a phone, entirely offline, with no server in the loop.

parameters7,477,702
model file28.7 MB (fp32)
sample rate24 kHz
languageEnglish
licenseApache 2.0
Read the full model card

Speed on CPU

Median real time factor over 24 sentences, both models on 4 CPU threads, no GPU. A phone class thread budget rather than a workstation. Text to phoneme conversion is excluded from the timing for both, since it is the same front end either way.

modelparamsRTFsynth time
Kokoro-7M-Distill7.48M0.02200.081 s
Kokoro-82M81.81M0.09020.327 s

That is 4.1x faster than the 82M and 45x faster than realtime: one second of speech in 22 ms.

Usage

from load_model import load
model, pipeline, voice = load()
audio = next(pipeline("Hello, this is a small English voice.", voice=voice))[2]  # 24 kHz

Use load_model.py rather than a bare from kokoro import KModel: this config sets the decoder's hidden_channels and out_channels, which upstream Kokoro hardcodes at 1024/512, so the stock package raises a TypeError on it. The patched package is vendored in kokoro_patched/ with its defaults unchanged, so the 82M teacher still loads through it untouched.

Use af_msa.pt, not af_heart.pt

The student is conditioned on a style pack, and it was distilled against af_msa.pt. load_model.py defaults to it. af_heart.pt is kept only so older code still runs; the model never saw it in training, and using it degrades both naturalness and intelligibility.

Architecture

Kokoro / StyleTTS2: a 12 layer ALBERT over phonemes, a prosody predictor for duration, pitch and energy, and an ISTFTNet decoder that ends in a 20 point inverse STFT rather than more convolution.

blockparams
decoder (ISTFTNet)4,062,450
prosody predictor2,219,572
plbert (12 shared layers)595,520
text encoder569,280
projection30,880

Two details carry most of the size saving. The 12 ALBERT layers share one parameter block, so depth costs 596K rather than 7M. And duration is predicted by summing 50 sigmoid gates per phoneme instead of regressing a number.

The same architecture is used by the Arabic Nabra-7M-Distill, so a change to the recipe can be tested once and read across both languages.

How it was distilled

The teacher emits the per phoneme durations that generated its own audio, so the student trains against an alignment that is correct by construction. That is what makes this architecture distillable at all.

Objective: multi resolution STFT, duration L1, log mel L1, a silence term, and WavLM feature matching, with multi period and multi resolution spectrogram discriminators. Two of those earn their place. The silence term exists because the small decoder floors at a noise level the teacher does not have, which is audible as a constant hiss and which a log magnitude loss barely penalises. The WavLM term exists because every other loss here is magnitude domain, so nothing else constrains phase, and without it the output stays subtly robotic.

Limitations

Single voice, English only. Best with ordinary prose; heavy punctuation and unusual formatting are passed to the front end as written.

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