Pocket TTS vs Kokoro: two CPU voices, two different jobs
The two open models that speak faster than real time on a plain CPU are Kokoro and Pocket TTS. They split by job, not by rank. Kokoro, at 82M parameters, is the fixed voice pick for volume. It has 28 English voices on this platform, the faster measured lane, and no cloning. Pocket TTS, at 100M, is the flexible pick. It clones a voice from about five seconds of audio on your own machine, speaks seven languages, and holds its speed from a greeting to a chapter.
Every number below carries a source and a date. The speed section uses this platform's own lane numbers from one September 2026 window. Both models ran on the same class of hardware, so the pair is matched. The sound section maps a real dispute between three dated sources. It does not average them away. And the cloning section draws the one line that decides the pick. Kokoro cannot clone a voice. Pocket TTS can. The rest is detail.
Why this pair gets compared
Both models sit in one rare bracket. Each speaks quicker than real time on a plain laptop chip, with no graphics card. Each has open weights under a permissive license that anyone can download. Search treats the two as rivals. The exact phrase "pocket tts vs kokoro" is a verbatim autocomplete suggestion in both directions as of 2026-10-28. Four or more pages exist just to compare them.
The odd part is what ranks first. On the live Google page for the head query, read 2026-10-28, the top result is not a guide or a vendor. It is an open issue on the Pocket TTS repo, titled "Prosody and audio quality worse than Kokoro". It opened 2026-02-09 and is still open under the October 2026 release. An issue thread is the current authority for this query. That is the gap this page fills.
The scoreboard
| Dimension | Kokoro 82M | Pocket TTS 100M |
|---|---|---|
| Parameters | 82M | 100M, plus an 18M voice encoder used once per voice |
| License | Apache 2.0 on the weights | MIT on the code; each voice carries its own listed license |
| Design | StyleTTS 2 backbone with an ISTFTNet decoder, fed by a phoneme pipeline | a streaming language model over a neural audio codec, making audio frames directly |
| Voice cloning | none, fixed voice packs | yes, from about five seconds of sample audio, local builds |
| Languages, official count | eight | seven |
| Official voices | 54 across those eight | an evolving catalog, about 25 listed in the repo |
| Voices served on this platform | 28 English | 17 English, license cleared |
| Output | 24 kHz wav | 24 kHz wav |
| Measured lane speed here | about 0.8 s plus 0.0149 s per character | about 1.0 s plus 0.0188 s per character |
| Request cap here | 3,500 characters | 2,500 characters |
| Measured day ceiling here, at eight ways at once | 7.0M characters | 3.0M characters |
| Word error rate, per Kyutai's report | 1.93 | 1.84, the best in that table |
| Real time on a CPU | yes | yes |
| Smallest variant | none | 1.9M parameters, October 2026 |
| Local RAM footprint | - | - |
The two dashed cells are set on purpose. Neither project posts a memory need we could verify from a primary source in the October 2026 reads. A dash beats a guess.
Speed on the same hardware, measured
This platform serves both models. Both lanes were measured in the same September 2026 window on the same class of card. That makes these numbers the only matched set in this debate. The speed metric itself, real time factor, has its own guide.
Each request costs a fixed start plus a steady per character cost:
T = t0 + ( r x c )
kokoro lane: t0 = 0.8 s, r = 0.0149 s per char (measured 2026-09-09)
pocket lane: t0 = 1.0 s, r = 0.0188 s per char (measured 2026-09-09)
Take a 1,000 character script. Kokoro finishes near 15.7 seconds. Pocket TTS lands near 19.8 seconds. At each model's full cap the two land close, about 52.9 seconds for the 82M model and about 48 seconds for the 100M one, because its cap is lower. Run them all day and the gap widens. The Kokoro lane held 7.0 million characters a day at eight ways at once. The Pocket lane held 3.0 million.
Two outside reads agree on the direction. Kyutai's own technical report ran the field on an Intel Core Ultra 7 165H laptop chip and a MacBook Air M3. It found that these two are the only entries that clear real time on those chips by a wide margin. An outside July 2026 CPU test, heyneo.com, ran both on a four core Xeon with no graphics card. The 82M model turned in a mean real time factor near 0.66. The 100M one sat near 0.71. Both beat real time with room to spare. The slower of the two was also the flattest, holding 0.69 to 0.76 at every length from 12 to 1,712 characters.
That flatness is a design trait, not luck. Kokoro shapes an utterance as a whole, so its speed per character moves with length. The same test watched its factor climb on long inputs. Pocket TTS makes audio one small frame at a time, the way a language model writes one token at a time. Short and long scripts cost about the same per character. For live use, first audio matters more than total time. The Pocket repo lists about 200 milliseconds to first audio on a MacBook Air M4, on two CPU cores.
Sound: the sources disagree
Anyone who says one model plainly sounds better has read only one of three dated sources. Here is the map.
Kyutai's report, January 2026, scores clear speech on Librispeech test-clean under the F5-TTS protocol. Whisper-large-v3 does the scoring. Pocket TTS reads 1.84 word error rate. Kokoro reads 1.93. The 100M figure ties a model 7.5 times its size. On human pairwise ratings, Pocket TTS scores an audio quality ELO of 2016 against F5-TTS at 1949. Kokoro sits outside the rated columns, because it has no cloning to rate. Its entry reads "no voice cloning". Pocket's own speaker match score, 1898, is the honest price of its size.
The outside test, July 2026, scored the same two models with a neural rating tool on its own samples. Kokoro read 4.46. Pocket TTS read 4.10. On those samples, Kokoro sounded more natural.
The forum record sits between the two. The repo's open prosody issue, from February 2026, carries the debate. Users say Kokoro holds an edge in pure voice tone. They report stray glitches on single words from the 100M model. They also say the shipped default voices underwhelm. A maintainer answer in that thread concedes the team spent too little time picking defaults. The same thread holds the counterweight. Users who fed the model a good sample clip call the result clearly ahead. One more wrinkle from the multilingual note: a voice recorded in one language can speak another, and the accent moves.
The honest close: out of the box, on English speech, the evidence leans Kokoro. The moment the voice itself is the job, cloning closes the gap and more. Test both on your own text. Each lane here makes that a single call.
Cloning is the whole decision
Kokoro speaks only in the voices it was trained with. That is a design choice with an upside. No sample audio. No consent question about whose voice a clone imitates, and no drift. Adding a voice to Kokoro means retraining or community tooling. The model card is plain that the weights train on permissively licensed audio with phoneme labels, and the fixed packs are the whole catalog.
Pocket TTS clones. Give the local build about five seconds of sample audio and it speaks in that voice. It keeps the accent, the cadence, even the room sound and the microphone of the clip. No fine tuning happens. The voice is a prompt, one pass. The repo adds two practical notes. Turning a clip into a voice is the slow step, done once. The result exports to a file that reloads fast. And the clip's own sound is copied too, so a clean clip is worth the cleanup.
Cloning carries duties that both projects treat as real. Each voice in Kyutai's voice repo carries its own listed license. The shipped voices are picked to stay permissive. The maintainer's issue answer notes that cloning another project's default voice would not meet those terms. Get the voice owner's consent before you clone anyone. Which lanes here support cloning, and which vendors cap it, is mapped in the cloning limits guide.
One line inside this platform, stated plainly. The hosted Pocket lane here does not clone. It serves 17 fixed voices, all license cleared. Cloning lives on the local build, by design. The sample audio never has to leave your machine.
Languages, voices, and what ships
Kokoro's official v1.0 catalog, published 2025-01-27, holds 54 voices across eight languages. English is the deep set at 28. The card's own voice guide is blunt about the rest. Non-English support may be thin. French carries exactly one voice. Each language leans on its own phoneme step.
Pocket TTS shipped with one language in January 2026. Five more landed in May 2026. The repo now lists seven: English, French, German, Spanish, Portuguese, Italian, and Dutch. Any voice can attempt any language, accent shifts included. The trained list is the floor, not the ceiling, with ears as the judge.
Then there is the October 2026 move no rival page has caught yet. Kyutai shrank the family. New English builds run at 18.2M, 6.9M, and 1.9M parameters, picked by a language flag in the same package. The smallest is said to run up to 25 times faster than real time on one CPU thread. The 18.2M build is stated to match the original's sound, per the release note. Kokoro has published no such tier. If your target is a phone or a browser tab, that lane now belongs to Pocket TTS.
Running them yourself
Both local setups are real and cheap. Kokoro is a Python package plus espeak-ng, the fallback engine for odd words. Its misaki step turns text into phonemes first. That is also why you can force a pronunciation by feeding phonemes directly. The full local walk with code lives in the Kokoro cost guide.
Pocket TTS is one package, with no GPU build of PyTorch needed. A first local call fits in a cell:
# pip install pocket-tts (CPU-only PyTorch is enough)
from pocket_tts import TTSModel
import scipy.io.wavfile
tts = TTSModel.load_model()
state = tts.get_state_for_audio_prompt("alba") # or a wav path, to clone
audio = tts.generate_audio(state, "Two CPU voices, one wallet.")
scipy.io.wavfile.write("out.wav", tts.sample_rate, audio.numpy())
That prompt line is the cloning door. Pass a preset name. Or pass a path to five seconds of a voice. Two local facts are worth knowing before you plan hardware. On chips with strong single thread speed, like Apple Silicon, the repo's own tests found no gain from a graphics card, because the model is small and runs one request at a time. On a four vCPU cloud box with a Tesla T4, it did gain, about 2.6 times. Long text also behaves differently. Kokoro's guide asks for a middle range of roughly 100 to 200 phoneme tokens, with quality falling at the extremes. Pocket TTS streams, and takes input of any length locally.
One wallet, two lanes
As of 2026-10-28 this platform serves both models on the same speech route. Both meter per input character against a prepaid wallet. Both sit in the speech set on the TTS lane page. Rates are never typed by hand on this site. They render from the live catalog at build time:
| Model | Context | $/1M in | $/1M out | $/1M cached |
|---|---|---|---|---|
| Qwen | ||||
| qwen3.8-27b | 262K | $0.35 | $2.55 | $0.105 |
| qwen3.6-35b | 131K | $0.11 | $0.8 | $0.044 |
| Minimax | ||||
| minimax-m2.7 | 197K | $0.24 | $0.95 | $0.072 |
| Muse | ||||
| muse-glimmer-30b | 131K | $0.28 | $1.2 | $0.084 |
| Ornith | ||||
| ornith-1.5-35b | 100K | $0.35 | $2.55 | $0.105 |
| ornith-1.5-9b | 100K | $0.1 | $0.3 | $0.03 |
| Glm | ||||
| glm-5.3-flash | 1049K | $0.11 | $0.35 | $0.033 |
| Deepseek | ||||
| deepseek-v4-flash-0731 | 1311K | $0.15 | $0.42 | $0.045 |
| Gemma | ||||
| gemma-4-31b-it | 262K | $0.22 | $0.49 | $0.066 |
| Deepseek | ||||
| deepseek-v4-pro | 1000K | $1.13 | $2.21 | $0.339 |
| deepseek-v4.1-flash | 1000K | $0.19 | $0.71 | $0.06 |
| deepseek-v4.1-flash-1017 | 1049K | $0.16 | $0.65 | $0.003 |
| Glm | ||||
| glm-5.3 | 1000K | $1.32 | $4.25 | $0.4 |
| Flux | ||||
| flux-1-schnell | — | $0.003/image | ||
| flux-pro-1.1 | — | $0.04/image | ||
| Chatterbox | ||||
| chatterbox-tts | — | $25/1M chars | ||
| Kokoro | ||||
| kokoro-tts | — | $15/1M chars | ||
| pocket-tts | — | $16/1M chars | ||
| Audio | ||||
| audio8-tts | — | $8/1M chars | ||
| Hayamimi | ||||
| hayamimi-stt | — | $0.6/audio-hr | ||
| Bge | ||||
| bge-m3 | — | $0.05/1M tokens | ||
| bge-reranker-v2-m3 | — | $1.5/1k searches | ||
| Ocr | ||||
| ocr-print | — | $1/1k pages | ||
| ocr-archival | — | $3/1k pages | ||
| Whisper | ||||
| whisper | — | $0.12/audio-hr | ||
| Iab | ||||
| iab-2x | — | $0.7/1k pages | ||
| iab-3x | — | $0.7/1k pages | ||
| Gliner | ||||
| gliner-extract | — | $0.9/1k searches | ||
| Jev | ||||
| jev-fast | 1K | $0.03 | $0 | — |
| jev-causal | 1K | $0.03 | $0 | — |
| jev-batch | 1K | $0.03 | $0 | — |
| Wemm | ||||
| wemm-embed | — | $0.09/1M tokens | ||
| Molmo | ||||
| molmo2-er | 8K | $1 | $5 | $0.5 |
| Cosmos | ||||
| cosmos-reason2-2b | 4K | $0.1 | $0.4 | $0.05 |
| Sam | ||||
| sam2.1-base | — | $0.02/image | ||
| Da | ||||
| da3-small | — | $0.05/image | ||
| Smolvla | ||||
| smolvla | — | $0.001/call | ||
| Openvla | ||||
| openvla-oft | — | $0.006/call | ||
| Act | ||||
| act | — | $0.001/call | ||
One request body reaches either model. Only the model string and the voice change:
curl -sS https://api.ironstratum.com/v1/audio/speech \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"model": "kokoro-tts", "input": "Two CPU voices, one wallet.", "voice": "af_heart"}' \
--no-buffer --output kokoro.wav
# switch lanes: model "pocket-tts", voice "alba"
Contract facts that matter on both lanes. The caps are 3,500 characters for kokoro-tts and 2,500 for pocket-tts. The gateway rejects longer input with a 400 before synthesis starts, and a refusal bills nothing. Audio arrives by chunked transfer, so keep client read timeouts generous. A 120 second floor is sane. A done request bills the characters you sent. Retries run and bill again, so check your client's retry defaults. Voices are a free read: GET /v1/audio/voices with the model parameter lists every valid id. The kokoro-tts page and the pocket-tts page carry each lane's full contract and voice list.
The pick, by job
| Your job | The pick |
|---|---|
| English speech at volume, fixed narrator | Kokoro. The faster measured lane, the higher day ceiling, 28 English voices. |
| One specific voice, cloned | Pocket TTS, local build. Five seconds of sample audio, no fine tuning. |
| Speech on a phone, a browser tab, or a weak CPU | Pocket TTS. The October 2026 small builds go down to 1.9M parameters. |
| Live prompts, agent speech, fast first audio | Pocket TTS. Streaming design, about 200 ms to first audio locally. |
| Steady and predictable over flexible | Kokoro. Fixed packs, a set phoneme path, no stray word glitches. |
| Languages past English, local | Pocket TTS. Seven trained languages, with voice transfer across them. Kokoro's own guide calls its non-English set thin. |
| Someone else runs the box | Either lane here. Same route, same wallet, same metering. |
Both models are cheap enough that the wrong pick costs less than an afternoon of testing. The nearby corners of the same decision: Kokoro vs Chatterbox if a third voice is in the frame, and Pocket TTS use cases for the hardware by hardware view. The wallet math for local versus hosted is the Kokoro break even guide. Its method transfers to Pocket TTS directly.
Questions people actually ask
Is Pocket TTS better than Kokoro?
On clear speech, Kyutai's report says slightly yes. Word error rate reads 1.84 against 1.93. On natural sound, one outside test and much of the forum record say Kokoro, 4.46 to 4.10 on that test's samples. On ability, the 100M model clones voices and the 82M one does not. The honest answer needs a job attached. The table above attaches it.
Can Kokoro clone voices?
No. Fixed voice packs are the design. That removes a whole class of consent and license questions. The trade is a voice catalog you cannot extend without retraining or community tooling.
Which one is faster on a CPU?
On this platform's measured lanes, Kokoro. It reads 0.0149 seconds per character against 0.0188, same window, same hardware class. On first audio, Pocket TTS wins locally, with about 200 milliseconds and a streaming flow. On flatness, Pocket TTS again, with a near steady per character cost at any length. Speed has three axes here. Each model wins one.
What are the small Pocket models I keep hearing about?
October 2026 releases. English builds at 18.2M, 6.9M, and 1.9M parameters, picked by language flag in the same package. The smallest is reported up to 25 times faster than real time on one CPU thread. The 18.2M build is stated to match the original's sound. They exist because the model's design shrinks unusually well.
Do the hosted lanes clone voices?
No, and neither does the hosted Kokoro lane. The hosted surface here is fixed voice sets, all license cleared. Count 28 English voices for kokoro-tts and 17 for pocket-tts. Cloning runs on the local Pocket build. That keeps sample audio on your machine.
What does each cost to run?
The weights are free both ways. Apache 2.0 for Kokoro, MIT code for Pocket TTS. Local costs are hardware and power, worked through in the Kokoro break even guide. Hosted, both lanes meter per input character. The live rates render on the pricing page and in the fence above.
Both lanes sit behind one signup. Create an account, make a key, and send the same sentence down each. Your own ears settle this faster than any table, ours included.
Last verified: 2026-10-28