Kokoro keeps showing up—it topped Hacker News, tops open text-to-speech leaderboards, and creators keep asking whether an 82-million-parameter model that runs on a plain CPU can really replace a paid voice API. So we installed it, ran it on a laptop, and generated the samples you can play below. This is a hands-on teardown: what Kokoro is, how well it actually sounds, the two setup traps that cost us time, and when a hosted tool is the better call. Source: github.com/hexgrad/kokoro (Apache-2.0).
What is Kokoro, and who made it?
Kokoro is an open-weight text-to-speech model published by hexgrad as Kokoro-82M. The headline is right there in the name: 82 million parameters—tiny by 2026 standards, small enough to run on a phone—yet it produces natural, expressive narration. It is built on the StyleTTS 2 lineage and released under the permissive Apache-2.0 license, so it is genuinely free for commercial use.
As of 2026-07-11 the main repo hexgrad/kokoro sits at about 7,900 GitHub stars. We ran it through the community ONNX runtime thewh1teagle/kokoro-onnx (about 2,600 stars, MIT), which is the easiest way to run it on a CPU with no PyTorch install.
Poking at the actual weights file, we counted 54 built-in voices spanning 9 language and accent groups—American and British English, Spanish, French, Hindi, Italian, Japanese, Brazilian Portuguese, and Mandarin Chinese. The American English voices are clearly the most polished.
We actually ran it (Apple M3 Pro, CPU only)
No GPU, no cloud—just a MacBook Pro with an M3 Pro and 18 GB of RAM. Here is the honest play-by-play.
Install and weights
The Python package installs in seconds: pip install kokoro-onnx soundfile. But here is the first trap—the pip package ships the code, not the model. You have to download two files by hand from the kokoro-onnx GitHub releases page: kokoro-v1.0.onnx (310 MB) and voices-v1.0.bin (27 MB). The quickstart glosses over this, so a first run fails with a missing-file error until you grab the weights.
The espeak-ng path bug (the one that cost us real time)
Kokoro turns text into phonemes with espeak-ng. On the very first synthesis we hit this:
Error processing file '/Users/runner/work/espeakng-loader/.../espeak-ng-data/phontab': No such file or directoryThat /Users/runner/work/ path is a dead giveaway: the pip espeakng-loader wheel bundles a libespeak-ng that was compiled in CI with a hard-coded data path that does not exist on your machine. The frustrating part: setting an ESPEAK_DATA_PATH environment variable does nothing, because kokoro-onnx never reads it—it takes the data path straight from the bundled loader.
The fix that worked: install a real system espeak-ng and point Kokoro at it explicitly through its EspeakConfig:
brew install espeak-ng # macOS; apt install espeak-ng on Linux
from kokoro_onnx import Kokoro, EspeakConfig
cfg = EspeakConfig(
lib_path="/opt/homebrew/lib/libespeak-ng.dylib",
data_path="/opt/homebrew/share/espeak-ng-data",
)
k = Kokoro("kokoro-v1.0.onnx", "voices-v1.0.bin", espeak_config=cfg)After that, generation just works. If you have ever fought this exact phontab: No such file error, that is the fix.
Speed (measured, warm)
On CPU alone the model loads in about 1.7 seconds, and synthesis is comfortably faster than real time. A 22-second paragraph of narration rendered in 3.5 seconds—a real-time factor around 0.16×, roughly six times faster than playback. Short single sentences come back in 1 to 2 seconds. For a model this small on a laptop, that is genuinely production-usable throughput. Here is the actual waveform of that paragraph render:

Samples we generated (unedited)
Every clip below was produced by us with Kokoro on the M3 Pro CPU described above—raw model output, no cleanup, no post-processing. Play them and judge the quality yourself.
Generated by VisionStory with Kokoro-82M via kokoro-onnx, 2026-07-11. Notice the giveaway: this is a clean voice track—but it is only a voice. There is no face, no lip movement, no on-screen presenter. That gap is the whole point of the next section.
Honest verdict: strengths and real limits
What genuinely impressed us:
- Quality per byte is remarkable. For 82 million parameters, the American English voices are natural and expressive—close enough to paid TTS that most listeners would not flag it in a short clip.
- It really runs on a CPU, fast. Six-times-real-time on a laptop with no GPU is the headline feature, and it holds up.
- Truly free and commercial-friendly. Apache-2.0 with no per-character billing. For high-volume voiceover, that economics is hard to beat.
Where it falls down—and these are real:
- No voice cloning. You get 54 fixed preset voices. You cannot clone your own voice or a client’s voice—if that is your use case, Kokoro is a dead end.
- English quality depends on espeak-ng, which means the packaging bug above, plus the occasional mispronounced name, brand, or acronym.
- Long text needs manual chunking. There is a phoneme-length cap per call, so you have to split long scripts yourself and stitch the audio.
- Non-English voices are hit or miss—noticeably more variable than the flagship American English set.
- It outputs a bare WAV. No word timestamps, no visemes—nothing to drive lip-sync out of the box.
- It is voice only. No face, no video. To get a talking presenter you must pair Kokoro with a separate lip-sync or avatar system and handle the timing yourself.
Self-host Kokoro vs. a hosted tool: which should you pick?
Kokoro and a hosted avatar tool solve different halves of the problem. Kokoro gives you a voice; a tool like VisionStory gives you a talking presenter—voice, face, and lip-sync in one output. Here is the honest trade-off.
| Kokoro (self-host) | VisionStory (hosted) | |
|---|---|---|
| Cost | Free (your own hardware) | Subscription / credits |
| Setup | pip + 330 MB weights + espeak-ng fix | None—runs in the browser |
| What you get | Voice track only (WAV) | Talking avatar video (voice + face + lip-sync) |
| Voice cloning | No—54 presets | Yes—clone your own voice |
| Speed per clip | ~0.16× real-time on CPU (seconds) | Seconds, hosted—no local compute |
| Commercial use | Yes (Apache-2.0) | Yes (per plan) |
| Maintenance | You patch espeak, deps, chunking | None |
| Best when | You only need a free voice track and can code | You need a finished talking video, fast |
Choose Kokoro if you just need a free voiceover, you are comfortable in Python, and you will handle the face and lip-sync separately (or you do not need a face at all). Choose a hosted tool if you need the voice attached to a presenter that lip-syncs, or you need to clone a specific person’s voice—Kokoro cannot do either.
What Kokoro taught us
The real lesson from running Kokoro is that voice is becoming commoditized. An 82 MB model on a laptop now produces voiceovers good enough for real work, for free. If your product’s only claim was “we do text-to-speech,” that moat is gone.
The hard, still-unsolved part is everything after the voice: turning an audio track into a believable talking face—accurate lip-sync, expression, head motion, and timing that all hold together. That is exactly the layer we work on. So our takeaway is not “don’t use Kokoro”—it is a legitimately good voice engine. It is that a voice on its own is half a video. If you want the other half, VisionStory turns a photo and a script into a lip-synced talking presenter in one step, and if you have a specific voice to match, it can clone it too.
