explainx / blog
Inflect-Micro-v2: Full Local TTS Under 10M Params
Owen Song’s Inflect-Micro-v2 ships complete local text-to-waveform TTS at 9.36M params (37.53 MB). Benchmarks, install, Nano sibling, and honest limits.
explainx / blog
Owen Song’s Inflect-Micro-v2 ships complete local text-to-waveform TTS at 9.36M params (37.53 MB). Benchmarks, install, Nano sibling, and honest limits.

Jul 8, 2026
A 303-point HN thread and Ariya Hidayat's walkthrough put Kokoro back in focus — 82M params, CPU-only, OpenAI speech API compatible. explainx.ai covers setup, benchmarks, limitations, and community workarounds.
May 28, 2026
Coral Edge AI combines AI-first hardware architecture with unified developer experience to enable efficient, local AI inference at the edge. Learn how software and hardware developers are leveraging Coral's RISC-V architecture, MLIR compiler toolchains, and standards-based approach for next-generation edge devices.
Jul 26, 2026
AI-ban headlines collapse export controls, private model gating, proposed rules, procurement blocks, and product safety filters into one phrase. This running scorecard separates the policy from the product outcome.
Most “tiny TTS” releases still ship a decoder the size of a real app, or they outsource waveform generation to a cloud API. Inflect-Micro-v2 takes the other bet: complete local text-to-waveform speech under 10 million parameters — 9,356,513 deployable weights, ~37.53 MB FP32, 24 kHz mono — with a public Python API, deterministic seeds, and an official ONNX path.
Owen Song funded and shipped it independently on Hugging Face as owensong/Inflect-Micro-v2 under Apache-2.0. The Hacker News thread (Inflect-Micro-v2: complete voice in 9.36M parameters) immediately asked the right clarifying question: complete means TTS end-to-end, not STT+TTS. This explainx.ai guide is the builder decode — install, Micro vs Nano, benchmarks vs Piper/Kitten/Supertonic, and the limitations you should read before shipping it into a product.
| Question | Answer |
|---|---|
| What is it? | Local English text → waveform TTS |
| Params / size? | 9.36M · ~37.53 MB FP32 |
| License? | Apache-2.0 |
| Voice? | One fixed male · no cloning |
| STT included? | No |
| CPU speed (ref)? | ~6.28× real-time (Micro) |
| Sibling? | Nano ~3.97M / ~16 MB |
| Where? | Hugging Face owensong/Inflect-Micro-v2 |
| Good for? | Edge, offline demos, privacy-sensitive UX |
| Not for? | Multilingual, cloning, medical/legal critical audio |
Edge speech usually fails one of three ways:
Inflect’s claim is package-level honesty: the integrated waveform decoder is in the weight total. That puts it in the same product conversation as other edge-sized open models and browser-tiny embeddings — not as a frontier LLM, but as a deployable artifact you can reason about on disk.
If your stack already values local inference for coding agents (llama.cpp, OpenCode local runs), Inflect is the speech sibling: small enough for CPU laptops and hobby boards, licensed for redistribution, boring enough to actually ship.
| Inflect-Nano-v2 | Inflect-Micro-v2 | |
|---|---|---|
| Parameters | ~3,966,721 | ~9,356,513 |
| FP32 weights | ~15.97 MB | ~37.53 MB |
| Positioning | Smallest practical | Strongest Inflect v2 quality |
| 24 kHz decoder | Included | Included |
| API / frontend | Same | Same |
Rule of thumb: Nano when flash storage or RAM is the constraint; Micro when preference/UTMOS margins matter more than a few megabytes. Both use the same long-text segmentation and seed controls.
python -m pip install --upgrade huggingface_hub
hf download owensong/Inflect-Micro-v2 --local-dir Inflect-Micro-v2
cd Inflect-Micro-v2
python -m pip install -r requirements.txt
from inference import InflectTTS
tts = InflectTTS(".", device="cpu")
tts.save(
"A small voice can still have something meaningful to say.",
"sample.wav",
speed=1.0,
variation=0.667,
seed=7,
)
Snapshot download variant:
import sys
from huggingface_hub import snapshot_download
model_dir = snapshot_download("owensong/Inflect-Micro-v2")
sys.path.insert(0, model_dir)
from inference import InflectTTS
tts = InflectTTS(model_dir, device="cpu")
sample_rate, waveform = tts.synthesize("The complete model runs locally.")
Long input is split at punctuation-aware boundaries, synthesized chunk by chunk, and joined with controlled pauses. Fix seed when you need bit-stable comparisons across runs on the same runtime stack.
Official FP32 graphs live in a sibling package (Inflect-Micro-v2-ONNX): duration.onnx + decode.onnx, CPU/CUDA/DirectML providers, same long-text wrapper, eSpeak-ng frontend remains CPU-side. Use ONNX when you want torch-free deployment or browser-adjacent runtimes — parity reports and checksums ship with that repo.
Inflect refuses a single “quality score.” The model card reports preference, predicted naturalness, intelligibility, footprint, and runtime separately.
| Metric | Micro result | Notes |
|---|---|---|
| Community preference | 66.2% (21W · 10L · 3T) | Blind, order randomized; ties half-win |
| UTMOS22 | 4.395 (CI ~4.381–4.408) | Learned predictor, not human MOS |
| Two-ASR semantic WER | ~3.99% | Mean of Qwen3-ASR + Nemotron 3.5 |
| FP32 footprint | 37.53 MB | Complete deployable package |
| CPU throughput | ~6.28× RT | 4 threads, steady-state |
Comparison set includes KittenTTS Nano, Piper Low, and Supertonic 3 — established compact/local baselines with larger deployable footprints than both Inflect releases. Weight sizes are package-level; no single metric is treated as proof of overall superiority.
Whisper was excluded from the headline two-ASR mean because it hallucinated insertions on some otherwise intelligible Supertonic clips; the full three-ASR audit remains on the card. That kind of protocol footnote is why this release feels more serious than a vibes demo.
For privacy-first product context, pair this with local meeting transcription stacks like Meetily — TTS and STT are different layers, but the keep audio on-device product story is the same.
evaluation/final/release_manifest.json SHA-256 hashesTraining corpus pipeline and full optimization recipe are not public — classic open-weight (not full open science) posture. That still beats closed SaaS TTS for air-gapped and redistribute-friendly apps; see the broader closed vs local open trade-offs.
hf downloadseed for CI regression audio hashes| Path | Purpose |
|---|---|
model.pth | Inference-only generator checkpoint |
config.json | Architecture + audio config |
inference.py | Public Python API and CLI |
inflect_vits_frontend.py | English normalization / phonemization |
runtime/ | Self-contained model implementation |
samples/ | Held-out example generations |
evaluation/final/ | Frozen prompts, reports, protocol |
release_manifest.json | File sizes + SHA-256 hashes |
That layout is what “complete” means operationally: you are not hunting a separate vocoder repo at 2 a.m. ONNX users clone the sibling graphs and keep eSpeak on the CPU side.
The local vs closed frame applies: Inflect is a sovereignty and footprint win, not a feature-parity win against SaaS TTS.
Before you ship Inflect into a product voice:
That five-step habit is more valuable than chasing a 0.05 UTMOS bump.
Primary sources: Hugging Face — owensong/Inflect-Micro-v2 · Inflect-Micro-v2-ONNX sibling · Hacker News discussion of the release · Owen Song model card limitations and evaluation protocol.
Specs, benchmarks, and Hub paths are accurate as of July 26, 2026. Recheck the model card before production pins — small TTS releases iterate fast.