Leokani-tts 7M
Leokani-tts is a fast English text-to-speech model: high-quality speech in a tiny model for any CPU, no GPU needed. It speaks in one female American English voice, which in this release was trained on a corpus of synthetic speech generated by Kokoro-82M. The name is Hawaiian: leo (voice) and kani (sound).
Leokani-tts is from Milliwatt Labs: AI measured in milliwatts, not megawatts. We build small, efficient models that run on the devices you already own, with no data center and no GPU.
Everything else is on milliwattlabs.com, free, with docs:
- Try it in your browser: the model page runs Leokani locally in JavaScript; your text never leaves your device.
- Mac app and a command-line tool with an MCP server for AI assistants.
- Android app, which also works as the phone's system text-to-speech voice.
- Linux and Raspberry Pi command-line tool (x86_64 and ARM64).
- Home Assistant: a local Wyoming voice server, plus an OpenAI-compatible speech API, in Docker (amd64 and arm64).
- JavaScript library for browsers and Node.js, and Python with ONNX Runtime or PyTorch (the files in this repo).
Samples
| Text | Audio |
|---|---|
| Hello! I'm a small text-to-speech model, and I run on an ordinary computer. | |
| That sounds like a great plan! Let me know how it goes, and good luck tomorrow. | |
| Did you remember to water the tomatoes before the rain started? | |
| Your flight leaves on March 14th at 7:45 AM, and the fare is 219 dollars. | |
| The trail is 4.2 miles long, climbs about 1,200 feet, and takes around 3 hours. | |
| Maria Gonzalez and Hiroshi Tanaka are meeting Dr. Okafor in Minneapolis on Friday. | |
| The old lighthouse stood at the edge of the bay for more than a century, and every evening the keeper climbed one hundred and twelve steps to light the lamp. | |
| Sure, no problem. |
Usage
hf download milliwattlabs/leokani-tts-7M --local-dir leokani-tts
cd leokani-tts
pip install -r requirements.txt # torch, safetensors
python leokani.py "Hello there. How was your day?" -o hello.wav
python leokani.py "A little slower, please." --speed 0.85 -o slow.wav
python leokani.py --fp16 "Same voice, half-size weights." -o fp16.wav
Leokani-tts needs espeak-ng to turn text into phonemes. espeak-ng is a separate dependency under GPL-3.0, and it
is not included here. Install it with brew install espeak-ng (macOS) or sudo apt install espeak-ng
(Debian/Ubuntu), or point to it with --espeak PATH. To skip it, pass Kokoro-style phonemes with
--phonemes "...".
Usage (ONNX)
pip install onnxruntime
python leokani_onnx.py "Hello there. How was your day?" -o hello.wav
python leokani_onnx.py --int8 "Same voice, the smallest file." -o int8.wav
INT8: ~half the size of FP16; rated the same as full precision in blind listening tests.
Specs
7.0M parameters · 28 MB (fp32) or 14 MB (fp16) safetensors · leokani-tts.onnx (fp32), leokani-tts-fp16.onnx
(fp16) and leokani-tts-int8.onnx (int8, 7.8 MB) · 24 kHz mono output.
On every platform
| Platform | Device | Speed | First speech |
|---|---|---|---|
| Mac | M3 Pro (native app) | 296× | 19 ms |
| iPhone | 17 Pro Max | 101× | 64 ms |
| Browser | Chrome on Mac | 97× | 64 ms |
| Linux server | 1 vCPU VPS | 36× | 91 ms |
| Android | moto g play 2024 ($50) | 20.6× | 234 ms |
| Raspberry Pi | CM4, 4 cores | 11.5× | 440 ms |
| GPU | DGX Spark (GB10), many lines at once | 4,043× | 9 ms |
Speed = seconds of speech per second of compute. First speech = time to the first audio of a line, with the voice already loaded. Apps and downloads: milliwattlabs.com.
On a GPU
No GPU is needed, but on one Leokani is very efficient. Same GPU (NVIDIA GB10, DGX Spark), same test, every model:
| Model | Params | × real time, per line | × real time, many lines at once | GPU J per minute of speech |
|---|---|---|---|---|
| Leokani-tts 7M | 7M | 488× | 4,043× | 0.36 |
| Piper (en_US lessac medium) | 15.7M | 72× | — | 3.52 |
| KittenTTS nano 0.8 | 14M | 75× | — | 6.15 |
| KittenTTS mini 0.8 | 73M | 29× | — | 9.29 |
| Kokoro-82M | 82M | 86× | — | 14.6 |
| Kyutai Pocket TTS | 110M | 14.1× | — | 32.1 |
| Chatterbox | 798M | 2.1× | — | 430 |
4,043× real time is about an hour of speech every second. J per minute = GPU energy above idle; the GB10 has no CPU power sensor, so models that do part of their work on the CPU look slightly better than they are. — = no batch mode.
Performance on One Thread
| Model | Params | Size | Speed, Mac | Speed, 1 Arm core | First speech, Mac | First speech, 1 Arm core | WER | UTMOS |
|---|---|---|---|---|---|---|---|---|
| Leokani-tts ¹ | 7.0M | 28 MB | 90× | 25× | 50 ms | 190 ms | 0.07 % | 3.53 |
| KittenTTS nano 0.8 | 14.0M | 60 MB | 26× | 3.6× | 240 ms | 1.7 s | 0.41 % | 2.18 |
| Piper (en_US lessac medium) | 15.7M | 63 MB | 49× | 5.6× | 86 ms | 710 ms | 0.90 % | 3.77 |
| KittenTTS mini 0.8 | 73M | 82 MB | 16× | 3.4× | 330 ms | 1.6 s | 0.21 % | 2.04 |
| Kokoro-82M | 82M | 328 MB | 7.6× | 0.48× | 670 ms | 11 s | 0.35 % | 3.76 |
| Kyutai Pocket TTS | 110M | 226 MB | 9.7× | 1.2× | 34 ms | 280 ms | 0.35 % | 3.25 |
| Chatterbox | 798M | 3.2 GB | 0.28× | 0.028× | 15 s | 150 s | 0.55 % | 3.36 |
¹ PyTorch on one thread, like every row here; the apps run faster (see On every platform). The ONNX version gives the same output, within 1 % of this speed on the Arm core and 4 % on the Mac.
On an iPhone 17 Pro Max (Core ML, Neural Engine), Leokani-tts renders the 8 sample lines at 101× real time, 64 ms per line (median, the whole line). Kokoro-82M on the same phone takes 308 ms to its first audio chunk (median).
Speed = seconds of speech per second of compute; first speech = median time to first audio over 20 sentences. Mac: M3 Pro CPU; Arm: one 2.8 GHz Cortex-A725 core (Raspberry Pi-class). WER (Whisper large-v3), UTMOSv2: 120 sentences.
Limitations
- One voice, English only.
- Pronunciation follows espeak-ng, so unusual names may be misread. Some symbols are read literally ("$219" becomes "dollar two hundred nineteen"), so write amounts out ("219 dollars").
- Delivery is neutral, intended for a home-assistant style of inflection.
Acceptable use
Don't use Leokani-tts, or speech made with it, to:
- impersonate a real person, or make it sound like someone said something they didn't, without their consent;
- deceive or defraud people, including scams, phishing calls and fake emergency or official messages;
- harass, threaten or bully anyone, or produce hateful or sexual content involving minors;
- spread disinformation, including fake news audio or election-related deception;
- break any law, including privacy, consumer-protection and robocall rules.
Tell people when speech is synthetic wherever the law requires it or they could reasonably be misled. You are responsible for what you make with the model. These terms come in addition to the license.
Speech made with Leokani-tts carries an inaudible watermark, built into the model, that lets Milliwatt Labs recognize audio it generated. The mark is the same in all audio and contains no information about you or your text.
License
CC BY-NC 4.0: non-commercial use only (see LICENSE).
For a commercial license or a custom voice, email hello@milliwattlabs.com.
Training audio data generated from Kokoro-82M by hexgrad, which is licensed under
Apache-2.0 (licenses/Kokoro-82M-Apache-2.0.txt).
- Downloads last month
- -

