Kitten-TTS 2 runs a 1.7B speech model with 1.58-bit weights on a plain CPU
KittenML has released code and weights for Kitten-TTS 2, a text-to-speech model with 1.7 billion parameters and ternary weights. It reportedly runs in real time on an ordinary CPU, clones voices from a few seconds of audio and supports emotion control. The license, though, isn't a classic open-source one.

What this is about
KittenML has released Kitten-TTS 2, a text-to-speech (TTS) model: text goes in, spoken audio comes out. Code and weights are on GitHub and Hugging Face. According to the announcement on r/LocalLLaMA, it is the first TTS model with 1.58-bit weights, and it runs in real time on a CPU alone. That's the maker's claim. The sources contain no independent measurements.
The model has 1.7 billion parameters (roughly, the adjustable values learned during training). It is a "speech language model": it reads text and writes codec tokens (discrete audio building blocks, here called "S3"), which a vocoder turns into 24 kHz audio. The architecture is completely new compared with version 0.8.
Where the 1.58 bits come from
Every weight in the linear layers of the model body has one of just three values: −scale, 0 or +scale. This is called ternary. Three states correspond to about 1.58 bits of information (log2 of 3). One full-precision scale factor is stored for each group of 128 weights.
A bf16 weight normally takes 16 bits. The repository packs five ternary values into one byte, or 1.6 bits per weight. The file shrinks from 3.47 GB to 0.95 GB (3.6x). According to the Model Card, this is exact: the audio output stays bit-identical.
The token embedding table, with 324M parameters, is not ternary. In the default variant it stays at bf16.
Weight variants and decoder
| Variant | Size | Properties |
|---|---|---|
| packed (default) | 954 MB | 1.58-bit body, bf16 embedding, lossless |
| emb4 | 469 MB | Body in TL2, 4-bit embedding, lossy |
| full | 3469 MB | Pure bf16 |
In "emb4" the transformer body is still exact. Only the embedding is imprecise (relative L2 error 0.118, about 4.21 bits per weight). That's why "packed" remains the default.
The audio decoder works in two stages. The first stage comes as "default" (459 MB, best quality) or as a distilled one-step student, "student_w4", with 4-bit weights (39 MB). According to the card, this saves memory, not compute time.
Features
- Voice cloning: From 5–30 seconds of a single speaker, with no fine-tuning. The maker says expression and accent are preserved.
- Voices: 115 built-in voices. Eight of them (Bella, Jasper, Luna, Bruno, Rosie, Hugo, Kiki, Leo) carry over from version 0.8. You choose the language through the voice that carries the accent, e.g. "German", "SpanishAbuela" or "JapaneseTrainConductor".
- Languages: Named voices for 16 languages, including German, English, French, Japanese, Chinese and Turkish. For non-English text, set
normalize=False. The text normalizer is built for English and would otherwise garble numbers and dates. - Expression control (beta): A leading emotion tag such as
[joyful],[sad],[angry]or[tender]; event tags such as<laugh>,<sigh>and<gasp>; and(((emphasis)))for individual words. Exactly 20 tags are recognized. Any others are simply read aloud. According to the card, the effect depends on the voice and the sentence.
Usage
from kittenml import KittenTTS
m = KittenTTS("KittenML/kitten-tts-2")
audio = m.generate("Good morning.", voice="German", normalize=False)
You need Python 3.10+ and PyTorch. No Hugging Face login is required. CPU execution is automatic, but the fastest route is a llama.cpp fork (kitten-tts-2-cpp) with GGUF files in the repo's cpp/ folder.
What you need to try it
The default variant needs a download of roughly 1 GB (about 947 MiB of loaded weights including the decoder, according to the card). You don't need a graphics card. Real time on CPU is promised, especially with the C++ fork. For the "full" variant, plan on a good 3.5 GB. Realistically, 8 GB of RAM or more should do, but that's an estimate. Mac and Linux on CPU should work, and so should Google Colab, though the sources give no exact details.
License
The Reddit announcement calls the model "open source". But the weights are under the "Stellon Labs Community License": research, non-commercial and limited commercial use are free. Commercial permission ends once you or your affiliates exceed USD 1 million in annual revenue or cumulative funding. Attribution requirements apply when you redistribute. The speaker model (pyannote) is MIT-licensed, and the Python package is Apache 2.0. By the usual definition, that makes it "open weights" rather than free open-source software.
Context
Until now, ternary models have mostly been a language-model topic. A 1.7B speech language model that fits in under 1 GB and is meant to run on a CPU is attractive for local use, such as self-hosting without a GPU. The maker pitches it as an open-source alternative to ElevenLabs. The sources contain no quality comparisons, benchmarks or latency figures, so the "SOTA" label is unsupported. Caveats: emotion control is in beta, text normalization is only good for English, and voice cloning raises misuse questions that the sources don't address. You should also check the license threshold for any commercial project.
Sources
- r/LocalLLaMA reddit.com
Try it yourself: Kitten-TTS 2
Explained step by step, no prior knowledge needed – on your own computer or free in your browser.
What can I do with it?
You can turn text into natural-sounding speech, including in German, and clone your own voice from 5–30 seconds of recording. Tags like [joyful] or <laugh> let you steer the delivery. Everything runs locally, with no cloud.
Who is it worth it for?
Worth it for tinkerers and developers who want to self-host speech output without a GPU. Less suitable if you're a larger company (license limit of USD 1 million) or need perfectly controllable emotions.
What your computer needs
The default "packed" (954 MB, lossless) for most people. "emb4" (469 MB) if memory is tight and small quality losses are fine. "full" (3.5 GB) only for tools that use standard transformers. The "student_w4" decoder (39 MB) saves space at the cost of quality.
- No GPU needed; real time on CPU according to the maker, fastest with the llama.cpp fork kitten-tts-2-cpp (GGUF files in the cpp/ folder).
- The default variant is a download of about 1 GB, the full version about 3.5 GB.
- Python 3.10+ and PyTorch are required.
- Quantizing the decoder saves memory, but not compute time.
How do I find out what my computer has?
- Windows: Press Ctrl + Shift + Esc → Task Manager → Performance tab → click GPU on the left. At the bottom you'll see Dedicated GPU memory (that's your VRAM). You'll find system memory under Memory.
- Mac: Apple menu at the top left → About This Mac. You'll see your chip (e.g. M2) and memory (e.g. 16 GB). On Apple chips, graphics and processor share this memory.
- Linux: Type
nvidia-smiin the terminal (shows your graphics card and its memory) andfree -hfor system memory.
Guide
This model runs with its developers' own program (KittenML/kitten-tts-2-cpp on GitHub). The commands below come from the Model Card and the developers' instructions.
Windows 10 / 11
Windows 10 / 11: not officially tested. The source doesn't mention Windows explicitly. The Python package should work, but it's untested. The fast C++ variant is described for Linux only.
- Check the prerequisites. You need Python 3.10 or newer and an internet connection. You don't need a graphics card; the model also runs on the processor. Check your Python version in PowerShell.
python --version - Create a folder and environment. Create a new folder. Inside it you'll set up a virtual environment (.venv) so nothing else on your PC gets mixed up.
mkdir kitten-test cd kitten-test python -m venv .venv - Activate the environment. Afterwards, (.venv) appears in front of your prompt. If PowerShell reports an error about scripts, allow them for this window with the first command.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .venv\Scripts\Activate.ps1 - Install the packages. The kittenml package downloads the program. PyTorch is the computing library the model needs. soundfile saves the audio file.
pip install kittenml torch soundfile - Save the example script. Save the code as demo.py in the kitten-test folder. On first run, the program downloads the model automatically (about 1 GB). You don't need a Hugging Face account.
from kittenml import KittenTTS import soundfile as sf m = KittenTTS("KittenML/kitten-tts-2") audio = m.generate("Hi! umm.. how are you, I guess? .. uh.. nice to meet you??", voice="WeatherPresenterCheerful") sf.write("output.wav", audio, m.sample_rate) - Run the script. This can take a moment on the processor. Wait until the prompt reappears.
python demo.py - Result. The folder contains the file output.wav with the spoken example sentence.
macOS
macOS: not officially tested. The source doesn't mention macOS explicitly. The Python package should run on the processor, but it's untested. The fast C++ variant is described for Linux only, and Metal is disabled there.
- Check the prerequisites. You need Python 3.10 or newer and an internet connection. You don't need a graphics card. Check the version in Terminal. If Python or Git is missing, the second command installs the Xcode tools for you.
python3 --version xcode-select --install - Create a folder and environment. Create a new folder. Inside it you'll set up a virtual environment (.venv) so nothing else gets mixed up.
mkdir kitten-test cd kitten-test python3 -m venv .venv - Activate the environment. Afterwards, (.venv) appears in front of your prompt.
source .venv/bin/activate - Install the packages. The kittenml package downloads the program. PyTorch is the computing library the model needs. soundfile saves the audio file.
pip install kittenml torch soundfile - Save the example script. Save the code as demo.py in the kitten-test folder. On first run, the program downloads the model automatically (about 1 GB). You don't need a Hugging Face account.
from kittenml import KittenTTS import soundfile as sf m = KittenTTS("KittenML/kitten-tts-2") audio = m.generate("Hi! umm.. how are you, I guess? .. uh.. nice to meet you??", voice="WeatherPresenterCheerful") sf.write("output.wav", audio, m.sample_rate) - Run the script. This can take a moment on the processor. Wait until the prompt reappears.
python3 demo.py - Result. The folder contains the file output.wav with the spoken example sentence.
Linux
Linux: supported. The Python route is the easiest and picks GPU or processor automatically. For the fastest CPU performance there's the C++ project kitten-tts-2-cpp, but it needs a compiler, CMake and LibTorch.
- Check the prerequisites. You need Python 3.10 or newer and an internet connection. You don't need a graphics card; the model also runs on the processor. Check the version in the terminal.
python3 --version - Create a folder and environment. Create a new folder. Inside it you'll set up a virtual environment (.venv) so nothing else gets mixed up.
mkdir kitten-test cd kitten-test python3 -m venv .venv - Activate the environment. Afterwards, (.venv) appears in front of your prompt.
source .venv/bin/activate - Install the packages. The kittenml package downloads the program. PyTorch is the computing library the model needs. soundfile saves the audio file.
pip install kittenml torch soundfile - Save the example script. Save the code as demo.py in the kitten-test folder. On first run, the program downloads the model automatically (about 1 GB). You don't need a Hugging Face account.
from kittenml import KittenTTS import soundfile as sf m = KittenTTS("KittenML/kitten-tts-2") audio = m.generate("Hi! umm.. how are you, I guess? .. uh.. nice to meet you??", voice="WeatherPresenterCheerful") sf.write("output.wav", audio, m.sample_rate) - Run the script. This can take a moment on the processor. Wait until the prompt reappears.
python3 demo.py - Try German (optional). For other languages, pick a matching voice and turn off the number preprocessing. To do that, replace the generate call in demo.py.
audio = m.generate("Guten Morgen. Ich wünsche dir einen wunderschönen Tag.", voice="German", normalize=False) - Result. The folder contains the file output.wav with the spoken example sentence.
Try it
Good morning. I hope you have a wonderful day. (voice="German", normalize=False)[joyful] We got the grant <laugh> I can hardly (((believe))) it!This is my own voice. (reference="my_voice.wav" with 5–30 seconds of recording)
If something goes wrong
For non-English text, set normalize=False, otherwise numbers and dates will be spoken incorrectly.
Only the 20 documented tags work; other tags are read aloud as plain text.
Emotion control is in beta and works differently depending on the voice and the sentence.
The license limits commercial use above USD 1 million in revenue or funding and requires attribution.
“out of memory,” a crash, or your computer freezes
The model is too big for your VRAM (video memory). Pick a smaller variant from the table above and close other programs, especially games and browsers with lots of tabs.
It runs, but extremely slowly
Your CPU is probably doing the work instead of your graphics card. In Ollama, the PROCESSOR column of ollama ps shows how much runs on the GPU. If it says "100% CPU", update your graphics driver or pick a smaller variant that fits entirely into VRAM (video memory).
“ollama” or “python” is not found
Close the terminal window and open it again so it recognizes the newly installed program. For Python on Windows: reinstall it and check Add python.exe to PATH.
Windows: "Running scripts is disabled on this system"
Run the script with exactly the command above: powershell -ExecutionPolicy Bypass -File try_windows.ps1. This allows execution for this one time only.
Error message when loading the model (version, "trust_remote_code", unknown architecture)
Brand-new models often need the latest software version. With Ollama: update Ollama. With Python: pip install -U transformers in the activated environment. The Model Card usually lists the exact version.
Tokenstrom generates the scripts and notebook automatically. Please take a quick look before running them – they're plain, readable text. Mind the model's license: custom license (see Model Card).
Ask the AI assistant
Questions about this article, installation or background? Our assistant knows this page and runs on our own machine, not in someone else's cloud.
The Assistant is an AI (Gemma 4) and can make mistakes – please check important details against the source. Questions are used only to generate an answer and are deleted after one hour. Please don't enter any personal data.
Comments
What do you think? Already tried it? Write it here, no sign-up needed.
Comments are public. Links aren't allowed, and we delete abusive posts. You can delete your own comment at any time in this browser. Learn more in the Privacy Policy.