license: apache-2.0
language:
- en
pipeline_tag: text-to-speech
model_name: Inflect-Micro-v2
metrics:
- wer
tags:
- text-to-speech
- speech-synthesis
- local-tts
- cpu
- edge-ai
- small-model
- pytorch
- vits
- 24khz
thumbnail: assets/inflect-v2-repository-hero.png
inference: false
Inflect-Micro-v2
Complete local text-to-waveform speech synthesis under 10M parameters.
24 kHz English TTS with the neural waveform decoder already inside the model.
9.36M complete parameters · 37.53 MB FP32 weights · one fixed English voice · no external vocoder
Complete means complete. The published parameter count includes text encoding, duration prediction, latent synthesis, and the integrated 24 kHz waveform decoder. Inflect does not hide a second vocoder, server model, or inference-time teacher.
Explore this model card
| Start here | Technical detail |
|---|---|
| Listen | Architecture |
| Evaluation | Controls and long text |
| Choose Micro or Nano | Data and adaptation |
| Run locally | Package map |
| Limitations | Evaluation protocol |
Listen
These are held-out text generations, not reconstructions of training audio. Each transcript is shown exactly as passed to the public frontend.
| Test | Exact transcript | Generated audio |
|---|---|---|
| Conversational | It wasn't until later that I realized what had actually happened. | |
| Punctuation | First, close the window; second, turn off the lamp; finally, lock the door. | |
| Numbers | The package weighs twelve point six kilograms and arrived on July twenty-first. | |
| Names and places | Gwendolyn photographed the eucalyptus trees outside Ljubljana. | |
| Technical | The system runs on three core components that all have to stay in sync. |
Evaluation
No single metric captures TTS quality. Inflect v2 reports human preference, predicted naturalness, multi-ASR intelligibility, complete footprint, and runtime separately rather than compressing them into one unverifiable score.
| Community preference ↑ | UTMOS22 ↑ | Two-ASR semantic WER ↓ | Complete FP32 weights ↓ |
|---|---|---|---|
| 66.2% | 4.395 | 3.99% | 37.53 MB |
The headline row always refers to Inflect-Micro-v2. Detailed competitor results and protocol boundaries are kept visible below.
1. Human blind preference
Inflect-Micro-v2 recorded a 66.2% preference rate (21 wins · 10 losses · 3 ties) in the final anonymous community study. Systems were hidden, left/right order was randomized, and ties count as half a win. This is descriptive community evidence, not formal MOS.
2. Predicted naturalness versus footprint
The UTMOS22 run used 500 identical unseen prompts per voice. KittenTTS and Piper are equal-weight two-voice means; their observed voice ranges appear as whiskers. Supertonic 3-step is reported below the plotted range rather than flattening every other system.
Inflect-Micro-v2: 4.395 UTMOS22, 95% bootstrap CI 4.381–4.408. UTMOS22 is a learned predictor, not human MOS.
3. Intelligibility on unseen text
The headline score is the equal-weight mean of Qwen3-ASR and Nemotron 3.5 corpus WER for every system. Whisper is excluded consistently from the headline because it produced insertion-heavy hallucinations on a subset of otherwise intelligible Supertonic 8-step clips. It is not deleted: the complete three-ASR evidence remains below.
Open the complete three-ASR audit
| System / voice | Qwen3-ASR ↓ | Nemotron 3.5 ↓ | Whisper large-v3 ↓ |
|---|---|---|---|
| Inflect-Micro-v2 | 2.52% | 5.45% | 2.73% |
| Inflect-Nano-v2 | 2.79% | 5.63% | 2.65% |
| KittenTTS Nano · Bruno | 2.15% | 3.96% | 2.17% |
| KittenTTS Nano · Hugo | 2.39% | 3.80% | 2.11% |
| Piper Low · Danny | 2.62% | 5.60% | 2.55% |
| Piper Low · Ryan | 2.81% | 5.51% | 2.87% |
| Supertonic 3 · M2 · 3-step | 3.03% | 6.04% | 3.22% |
| Supertonic 3 · M2 · 8-step | 2.05% | 3.56% | 8.08% |
For Inflect-Micro-v2, the individual results are 2.52% Qwen3-ASR, 5.45% Nemotron 3.5, and 2.73% Whisper large-v3. The former three-model mean, 3.57%, is retained only as a descriptive audit value and is not used as the headline score.
4. Complete weight footprint
Voice variants sharing the same weights are merged. Inflect totals include the integrated waveform decoder.
Open the frozen protocol and host-specific runtime snapshot
- Modern400 uses 400 identical unseen English prompts per system: 200 fixed modern/stress prompts plus 200 deterministic FLEURS
en_ustest prompts. - Exact-text exclusion was checked against 87,362 training transcripts.
- All ASR inputs are resampled to 16 kHz and scored with the same disclosed English normalizer.
- UTMOS22 uses
tarepan/SpeechMOSv1.2.0 on a separate 500-prompt generation set. - Headline intervals use 10,000 bootstrap samples.
- The Modern400 corpus SHA-256 is
b7504ce2dce44a2da82770a6a5dfd2a034fe17e2113980f8a69663ade417a34c. - Prompts, hypotheses, compressed row-level reports, and summaries ship under
evaluation/final/.
The retained CPU snapshot used one isolated process on an AMD EPYC 7K62, 50 prompts, three warmups, and runtime-default CPU threading:
| RTF ↓ | Audio generated / wall time ↑ | Median utterance | p95 utterance | Cold load |
|---|---|---|---|---|
| 0.743 | 1.35× real time | 3.205 s | 4.681 s | 1.35 s |
RTF is wall time divided by generated audio duration. This is a host-specific engineering snapshot, not a portable cross-system speed claim. A matched local CPU rerun is tracked before the public release.
Choose the right Inflect
| Inflect-Nano-v2 | Inflect-Micro-v2 | |
|---|---|---|
| Complete parameters | 3,966,721 | 9,356,513 |
| FP32 weights | 15.97 MB | 37.53 MB |
| Positioning | Smallest practical footprint | Strongest Inflect v2 quality |
| 24 kHz waveform decoder | Included | Included |
| Python API and frontend | Same | Same |
Inflect-Micro-v2 is the quality-focused member of the family. Both models use the same public API and complete text-to-waveform packaging.
Run locally
Install
git clone https://huggingface.co/owensong/Inflect-Micro-v2
cd Inflect-Micro-v2
python -m pip install -r requirements.txt
Python
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,
)
Download through the Hub
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.")
The result is a 24 kHz mono float32 waveform. Long input is split at punctuation-aware boundaries, synthesized chunk by chunk, and joined with controlled pauses.
Why Inflect
| Small enough to ship | Complete by design |
|---|---|
| 37.53 MB of FP32 model weights, with no server dependency. | Text frontend, acoustic generator, duration model, and waveform decoder ship together. |
| Built for local inference | Measured, not hand-picked |
| CPU-ready PyTorch runtime, deterministic seeds, and punctuation-aware long text. | Frozen prompts, raw hypotheses, intervals, hashes, and per-system reports are included. |
Architecture and parameter budget
Inflect v2 is a parameter-efficient VITS-family end-to-end text-to-waveform generator with an English phoneme frontend, monotonic alignment, stochastic latent synthesis, residual coupling flow, and an integrated alias-reduced neural waveform decoder.
| Component | Inflect-Micro-v2 |
|---|---|
| Latent channels | 192 |
| Text hidden channels | 96 |
| Encoder layers / heads | 3 / 2 |
| Feed-forward channels | 768 |
| Flow coupling blocks | 4 |
| Initial decoder channels | 320 |
| Upsample rates | 8, 8, 2, 2 |
| Training segment | 16,384 samples |
| Output | 24 kHz mono waveform |
The release describes the deployable architecture. Private corpus-construction and optimization details are not part of this open-weight package.
Controls, determinism, and long text
| Control | Default | Public range | Meaning |
|---|---|---|---|
speed |
1.0 |
0.5–2.0 |
Lower is slower; higher is faster. |
variation |
0.667 |
0.0–1.0 |
Lower is steadier; higher samples more latent variation. |
seed |
0 |
integer | Repeats the same stochastic sample on the same runtime stack. |
Long passages are punctuation-aware chunks, not one unlimited autoregressive pass. Chunk boundaries receive short pauses and edge fades. See docs/API.md for waveform contracts and concurrency notes.
Data, voice, and adaptation status
The release voice was trained on a single-speaker synthetic English corpus generated with a larger third-party TTS teacher. No teacher model is required or shipped at inference. The package does not redistribute a real speaker dataset and does not claim the synthetic voice as the identity of a real person.
This release is inference-first. New-voice and new-language adaptation are not currently validated or supported. A new voice would replace the fixed speaker rather than add a selectable speaker; language adaptation also requires rebuilding normalization, phonemes, symbols, embeddings, and training data. See docs/DATA_AND_VOICE.md and docs/FINETUNING.md.
Package map
| Path | Purpose |
|---|---|
model.pth |
Inference-only generator checkpoint |
config.json |
Architecture and audio configuration; also the Hub download-count query file |
inference.py |
Public Python API and CLI |
inflect_vits_frontend.py |
English normalization, phonemization, and punctuation frontend |
runtime/ |
Self-contained model implementation |
samples/ |
Held-out example generations |
evaluation/final/ |
Frozen benchmark prompts, reports, and protocol artifacts |
docs/ |
API, deployment, evaluation, data, and adaptation documentation |
release_manifest.json |
File sizes and SHA-256 hashes |
Limitations
- English only, with one fixed male voice. This is not zero-shot voice cloning.
- Unfamiliar phrasing can become flatter, less expressive, or less stable.
- Numbers, abbreviations, homographs, and uncommon names remain frontend- and context-sensitive.
- Long passages use punctuation-aware chunking; transitions can differ from a native long-form model pass.
- Stochastic variation can alter timing and pronunciation. Fix the seed for comparisons.
- UTMOS22 and ASR scores do not replace controlled human MOS or MUSHRA-style evaluation.
- Not validated for medical, legal, emergency, or accessibility-critical communication.
Responsible use
Do not use the included voice to impersonate a real person, deceive listeners, or create fraudulent content. Disclose synthetic speech where the context could otherwise mislead. Users are responsible for applicable laws and the Apache-2.0 license.
License, integrity, and attribution
Original Inflect code and weights are released under Apache-2.0. Bundled third-party components retain their own notices in THIRD_PARTY_NOTICES.md. release_manifest.json records packaged file sizes and SHA-256 hashes.
Private training scope and contact
Inflect v2 is an open-weight release. Deployable weights, inference code, frontend code, evaluation prompts, and release reports are public. The training corpus-generation pipeline, private filtering infrastructure, and full optimization recipe are not part of the public package.
Owen Song may share additional technical context privately for credible research, collaboration, reproducibility, or deployment inquiries when the request has a clear purpose and does not conflict with licensing or data-provenance constraints.
- Discord:
b111ue— fastest for informal technical questions - Email: owen.aw.song@gmail.com — preferred for professional inquiries
Citation
@software{song2026inflectmicrov2,
author = {Owen Song},
title = {Inflect-Micro-v2: Complete Local Text-to-Waveform TTS Under 10M Parameters},
year = {2026},
url = {https://huggingface.co/owensong/Inflect-Micro-v2}
}
Designed and developed independently by Owen Song · open weights · Apache-2.0 · complete local text-to-waveform inference
