A scored comparison of six CPU-quantized Qwen3-TTS runtimes, how quantized Qwen3-TTS stacks up against Kokoro on speed and quality, real-time-factor numbers measured on 4 vCPU/15GB hardware, and the AWS infra move (Fargate to Batch Spot Graviton) that cut TTS hosting to ~$5-7/mo.
Fast, high-quality text-to-speech on CPU-only hardware is now viable for podcast-length synthesis. Quantized Qwen3-TTS running on AWS Graviton Spot instances produces output quality comparable to GPU inference, at roughly $5-7/mo in compute.
Six CPU-targeting Qwen3-TTS runtimes, scored on license, model sizes, documented CPU real-time-factor (RTF), and cloning support:
| Rank | Candidate | Score | License | Sizes | CPU RTF (documented) | "ryan" preset | Transcript cloning |
|---|---|---|---|---|---|---|---|
| 1 | gabriele-mastrapasqua/qwen3-tts | 9 | MIT | 0.6B + 1.7B | real, multi-CPU (0.6B int8 sub-realtime; 1.7B int8 ~1.8-2.4x) | yes (default) | audio-only + optional .qvoice ICL text |
| 2 | Serveurperso/qwentts.cpp | 8 | MIT+Apache-2.0 | 0.6B + 1.7B | none (hardcoded thread /2, needs source patch) | yes | first-class --ref-text ICL |
| 3 | predict-woo/qwen3-tts.cpp | 5 | NONE (open issue) | 0.6B only | 1.94x (Ryzen 5 3600, 4T), ~3GB RAM | no | no |
| 4 | koboldcpp | 4 | AGPL-3.0 | 0.6B+1.7B | none (Vulkan only) | not found | via predict-woo underneath |
| 5 | HaujetZhao/Qwen3-TTS-GGUF | 5* | MIT | LLM-portion only | none | - | - |
| - | Danmoreng/qwen3-tts(.cpp) | 2 | - | - | - | - | - |
gabriele-mastrapasqua/qwen3-tts wins on the only criterion that matters for production: real, reproducible CPU RTF numbers across multiple CPUs, MIT-licensed, both model sizes, with a runtime --int8/--int4 quant switch and a --serve persistent HTTP mode (no reload between requests).
Measured in-sandbox on 4 vCPU / 15GB, gabriele's 0.6B model:
| Mode | Quant | RTF |
|---|---|---|
| Non-cloning ("ryan" preset) | int8 | 3.07x |
| Non-cloning ("aiden" preset) | int8 | 2.85x |
| Non-cloning ("ryan" preset) | int4 | 3.26x |
| Cloning (reference audio) | int8 | 3.17x |
| Cloning (bootstrap-ref) | int8 | 2.50x |
RTF here means seconds of compute per second of audio - lower is faster. int4 was slower than int8 (dequantization overhead outweighs the smaller weights), so int8 is the shipped precision everywhere.
The production budget was ≤2.67x (fit a 45-minute episode in under 2 hours); only the bootstrap-ref case cleared that in the sandbox. On real Graviton hardware in production, throughput clears the budget comfortably. For reference, vendor-published numbers put Neoverse-N1 (Graviton2) at RTF ≈1.28x - that figure is upstream-claimed, not independently measured here.
TTS synthesis moved off ECS Fargate (x86) onto AWS Batch running EC2-Spot Graviton instances (c7g/c8g, arm64). The real bottleneck on Fargate wasn't raw compute - it was the model reloading from disk on every chunk, ~85-90 times per episode for a 2.35GB int8 model. A persistent --serve HTTP server eliminated the reload entirely.
Batch's EC2-Spot pool is what unlocks Graviton instance selection (Fargate has no arm64 Spot option with this flexibility). The Batch compute environment lists both c7g.4xlarge/8xlarge/12xlarge (Graviton3) and c8g.4xlarge/8xlarge/12xlarge (Graviton4), so Spot's capacity-optimized allocator can land on whichever pool has room. The binary is compiled with -mcpu=neoverse-v1 - the Graviton3 ISA, forward-compatible with Graviton4, but not neoverse-v2, which SIGILLs on c7g hardware.
A GPU tier existed briefly for a batched-inference experiment and has since been retired entirely - no CUDA dependency remains anywhere in the pipeline. Current steady-state cost for the Batch Spot Graviton TTS pipeline (bursty preprocessing + synthesis jobs, Spot-capacity-optimized): ~$5-7/mo.
Kokoro is the CPU-TTS posterboy - tiny (82M params), Apache-licensed, and by far the fastest thing out there: ~5x real-time on a 32-core CPU. But it doesn't hold up on quality. My verdict after listening to both side by side: "Kokoro is terrible TTS quality, but blazing fast." Quantized Qwen3-TTS flips that - even the int4 build came back "incredible quality" on the same listening pass. The tradeoff is throughput, not fidelity.
| Kokoro | Qwen3-TTS int8 | Qwen3-TTS int4 | |
|---|---|---|---|
| Params | 82M | 0.6B | 0.6B |
| CPU speed | ~5x real-time (32-core CPU) | ~0.33x real-time (RTF 3.07x, shared 4-vCPU box); near real-time on ARM/Apple-Silicon-class cores (Neoverse-N1 RTF ≈1.28x) | ~0.31x real-time (RTF 3.26x) - slower than int8, not faster |
| Quality (my own listening test) | "terrible" | "incredible" | "incredible - even int4" |
| Voices / languages | 54 voices / 8 languages | 9 voices / 10 languages | 9 voices / 10 languages |
| Voice cloning | No | Yes (audio reference, or .qvoice text) | Yes |
| License | Apache 2.0 | MIT | MIT |
Those speed numbers come from different hardware - Kokoro's ~5x on a 32-core desktop CPU, Qwen's ~0.33x on a shared 4-vCPU cloud box - so don't read them as a clean ratio. What they do show: Kokoro wins raw throughput by roughly an order of magnitude, but Qwen closes most of that gap on ARM/Apple-Silicon-class cores, and even on modest x86 hardware it's already fast enough for podcast-length synthesis - the whole premise of this post.
If you're picking a model for your own hardware: int8 is the sweet spot - int4 isn't faster (dequant overhead outweighs the smaller weights on CPU) and only marginally smaller, so there's little reason to reach for it. Between sizes, 0.6B is the fast/light default and 1.7B trades some speed for higher quality if your hardware or budget allows. Either way, peak RAM stays around ~3.2GB, comfortably inside an 8GB laptop, and ARM/Apple-Silicon-class cores run noticeably faster than x86 for this workload.
0.6B-int8 is the standard voice model for all users, free and paid. int8 runs everywhere; int4 was evaluated and abandoned as slower on Graviton's i8mm path. Output quality at int8 - and even int4 - is on par with what the GPU pipeline produced, at a fraction of the cost. Voice cloning is live today as a paid unlock, and the larger 1.7B model ships as a premium, show-level tier - not an automatic upgrade for paid accounts; paid standard voices still run the same 0.6B model as free.
For the full model-selection breakdown (presets vs. cloning vs. voice design), see the voice cloning guide.
This is the narration pipeline behind Gnothi Series. Choose what you want to learn, and Gnothi researches, writes, and narrates an ongoing series for your podcast app.