IntermediateAI
KittenTTS 2 Packs a 1.7B Speech Model Into 1.58-Bit Weights
- Audio
- on-device
- open weights
- quantization
- tts
KittenTTS 2, published to Hugging Face on September 30, 2026, is a 1.7-billion-parameter speech model with in-context voice cloning — a very different animal from the 25-megabyte KittenTTS the same team shipped in February. What makes it notable is how it is stored: the language model’s linear layers hold ternary weights packed at roughly 1.6 bits each, taking the checkpoint from 3.47 GB to 954 MB without, the model card says, changing a single sample of audio.
What Changed
The earlier KittenTTS models were exercises in miniaturisation: a nano model near 15 million parameters, a mini at 80 million, both small enough to fit in tens of megabytes and run on a CPU with no ceremony. KittenTTS 2 goes the other way. It is a 1.7B speech language model that reads text and writes S3 codec tokens, which a vocoder turns into 24 kHz audio.
It ships built-in voices — the project README counts 47, and the model card’s list runs longer — across 20 languages, with eight speakers carried over from the 0.8 release so existing code keeps working. Cloning takes a reference clip of five to thirty seconds from a single speaker. Expression control is the other new capability: ten emotion tags, ten inline vocal events such as <laugh> and <sigh>, and triple-parenthesis emphasis, all parsed as markup rather than spoken. The card labels that feature beta and notes it steers delivery rather than guaranteeing it, and only those twenty tags are recognised — anything else bracketed is read aloud as text.
Why the Packing Is Free
A 1.7B model at 16 bits needs about 3.5 GB before you run anything. KittenTTS 2 avoids that with ternary weights: within every group of 128 values, each weight is exactly -scale, 0 or +scale, with the scale kept at full precision. A trit carries log₂3 ≈ 1.585 bits of information, and the release packs five of them into each byte, which works out to about 1.6 bits per weight and a 0.95 GB file for the language model.
The subtlety is why this costs nothing in quality. The ternary values are the weights the model uses; the 16-bit file is the same values written out at sixteen bits each. Packing them into trits is therefore exact, and the card says the two builds produce bit-identical audio. That is a different claim from post-training quantization, where you round an existing bf16 model and accept some drift.
Not everything gets that treatment. The token embedding is 324 million parameters that are not ternary, so the default packed build leaves it at bf16. The optional emb4 build halves the download to 469 MB by coding that embedding at 4.21 bits per weight across three frequency tiers, and the card is explicit that this one is lossy: all 313 non-embedding tensors still reproduce the full model exactly, but the embedding sits at an L2 relative error of 0.118 against the bf16 export. Hence packed as the default.
What It Costs
Two variants control the footprint further. The default decoder is 459 MB; a distilled single-step student packs to 39 MB at four bits. The card is careful about what that buys — quantization shrinks storage and memory bandwidth, not arithmetic, so a smaller decoder saves space rather than compute.
Total weights are listed at 947 MiB: 910 for the language model and 37 for the decoder. Python packaging arrives through the kittenml package, which has iterated from 0.9.0 on September 29 to 0.9.6 on October 21, and CPU inference is fastest through kitten-tts-2-cpp, a llama.cpp fork that reads GGUF weights and is MIT-licensed. The card also warns that the text normaliser is English-tuned and will mangle numbers and dates in other languages unless you pass normalize=False.
The licence is not an open-source one. The weights fall under the Stellon Labs Community License: research, non-commercial and limited commercial use are free, but the commercial grant ends once you or your affiliates pass $1 million in annual revenue or total cumulative funding, and distributing the weights or a product built on them carries attribution requirements. The speaker/ embedding model is pyannote’s under MIT, and the Python package is Apache 2.0.
What This Means
KittenTTS 2 is a good illustration of where small-model engineering has moved. A year ago the pitch was parameter count; now it is weight format. A 1.7B speech model that fits in under a gigabyte and runs on a CPU is not smaller than a 25 MB model, but it is small enough to ship — and ternary weights are what make that arithmetic work without a GPU-specific kernel.
The caveats are ordinary but worth stating. There are no independent word-error or naturalness numbers here, only the vendor’s framing and a feature card; the expressive tags are beta; the languages are reached through voices rather than a language setting; and the licence stops being free at a revenue threshold most startups cross. For a research group testing local speech, none of that blocks use. For a product, the licence is the first thing to read.
This post was drafted with AI assistance and reviewed by RITS staff.




