owensong commited on
Commit
3e8c567
·
verified ·
1 Parent(s): 69c2b11

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +343 -343
README.md CHANGED
@@ -1,217 +1,217 @@
1
- ---
2
- license: apache-2.0
3
- language:
4
- - en
5
- pipeline_tag: text-to-speech
6
- model_name: Inflect-Micro-v2
7
- metrics:
8
- - wer
9
- tags:
10
- - text-to-speech
11
- - speech-synthesis
12
- - local-tts
13
- - cpu
14
- - edge-ai
15
- - small-model
16
- - pytorch
17
- - vits
18
- - 24khz
19
- thumbnail: assets/inflect-v2-repository-hero.png
20
- inference: false
21
- ---
22
-
23
- ![Inflect-Micro-v2 release cover](assets/inflect-v2-repository-hero.png)
24
-
25
  <h1 align="center">Inflect-Micro-v2</h1>
26
  <p align="center"><strong>Complete local text-to-waveform speech synthesis under 10M parameters.</strong><br>
27
  Fixed-voice English TTS with deterministic seeds, long-text handling, and CPU or CUDA inference.</p>
28
 
29
  > **A note from Owen**
30
  >
31
- > I built and funded Inflect v2 independently, spending more than US$500 on training and evaluation. If this release finds a real audience, I would like to continue the project with a broader v3. If the model is useful to you, leaving a like on Hugging Face genuinely helps more people discover it.
32
 
33
  <p align="center">
34
  <a href="https://huggingface.co/spaces/owensong/Inflect-v2"><img alt="Live playground" src="https://img.shields.io/badge/Playground-0B2A54?style=for-the-badge&logo=huggingface&logoColor=white"></a>
35
- <a href="https://github.com/owenawsong/Inflect"><img alt="GitHub" src="https://img.shields.io/badge/GitHub-1769E0?style=for-the-badge&logo=github&logoColor=white"></a>
36
- <a href="https://huggingface.co/owensong/Inflect-Nano-v2"><img alt="Inflect Nano v2" src="https://img.shields.io/badge/Nano_3.96M-FFFFFF?style=for-the-badge&logo=huggingface&logoColor=1769E0"></a>
37
- <a href="https://discord.gg/CVJYedvzvp"><img alt="Inflect Discord" src="https://img.shields.io/badge/Discord-1769E0?style=for-the-badge&logo=discord&logoColor=white"></a>
38
- <a href="https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/EVALUATION.md"><img alt="Benchmarks" src="https://img.shields.io/badge/Benchmarks-0B2A54?style=for-the-badge&logo=chartdotjs&logoColor=white"></a>
39
- </p>
40
-
41
- <p align="center"><strong>9,356,513 deployable parameters</strong> · <strong>37.53 MB FP32</strong> · <strong>24 kHz mono output</strong></p>
42
-
43
- ---
44
-
45
- Inflect v2 uses one public API across two sizes: **Micro prioritizes quality below 10M parameters; Nano prioritizes footprint below 4M.**
46
-
47
- <details>
48
- <summary><strong>Explore this model card</strong></summary>
49
-
50
- | Start here | Technical detail |
51
- | --- | --- |
52
- | [Listen](#listen) | [Architecture](#architecture-and-parameter-budget) |
53
- | [Evaluation](#evaluation) | [Controls and long text](#controls-determinism-and-long-text) |
54
- | [Choose Micro or Nano](#choose-the-right-inflect) | [Data and adaptation](#data-voice-and-adaptation-status) |
55
- | [Run locally](#run-locally) | [Exports and quantization](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/EXPORTS.md) |
56
- | [Package map](#package-map) | [Evaluation and raw protocol](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/EVALUATION.md) |
57
- | [Limitations](#limitations) | [Deployment guide](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/DEPLOYMENT.md) |
58
-
59
- </details>
60
-
61
- ## Listen
62
-
63
- These are held-out text generations, not reconstructions of training audio. Each transcript is shown exactly as passed to the public frontend.
64
-
65
- | Test | Exact transcript | Generated audio |
66
- | --- | --- | --- |
67
- | **Conversational** | It wasn't until later that I realized what had actually happened. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/conversational.wav"></audio> |
68
- | **Punctuation** | First, close the window; second, turn off the lamp; finally, lock the door. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/punctuation.wav"></audio> |
69
- | **Numbers** | The package weighs twelve point six kilograms and arrived on July twenty-first. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/numbers.wav"></audio> |
70
- | **Names and places** | Gwendolyn photographed the eucalyptus trees outside Ljubljana. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/names_places.wav"></audio> |
71
- | **Technical** | The system runs on three core components that all have to stay in sync. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/technical.wav"></audio> |
72
-
73
- ## Evaluation
74
-
75
- 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.
76
-
77
- | Community preference ↑ | UTMOS22 ↑ | Two-ASR semantic WER ↓ | Complete FP32 weights ↓ | 4-thread CPU throughput ↑ |
78
- | ---: | ---: | ---: | ---: | ---: |
79
- | **66.2%** | **4.395** | **3.99%** | **37.53 MB** | **6.28× real-time** |
80
-
81
- The headline row always refers to **Inflect-Micro-v2**. Detailed competitor results and protocol boundaries are kept visible below.
82
-
83
- **Comparison set.** Results include [KittenTTS Nano](https://huggingface.co/KittenML/kitten-tts-nano-0.8), [Piper Low](https://huggingface.co/rhasspy/piper-voices), and [Supertonic 3](https://huggingface.co/Supertone/supertonic-3), established compact or local TTS baselines with larger deployable weight footprints than both Inflect releases. Weight sizes are compared at package level, and no single metric is treated as proof of overall superiority.
84
-
85
- ### 1. Human blind preference
86
-
87
- ![Community blind listening](assets/evidence/human-preference.svg)
88
-
89
- 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.
90
-
91
- ### 2. Predicted naturalness versus footprint
92
-
93
- ![Predicted quality versus footprint](assets/evidence/quality-vs-footprint.svg)
94
-
95
- 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.
96
-
97
- **Inflect-Micro-v2: 4.395 UTMOS22**, 95% bootstrap CI **4.381–4.408**. UTMOS22 is a learned predictor, not human MOS.
98
-
99
- ### 3. Intelligibility on unseen text
100
-
101
- ![Two-ASR semantic WER consensus](assets/evidence/asr-consensus.svg)
102
-
103
- 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.
104
-
105
- <details>
106
- <summary><strong>Open the complete three-ASR audit</strong></summary>
107
-
108
- ![Semantic WER across Qwen3-ASR, Nemotron 3.5, and Whisper large-v3](assets/evidence/modern400-three-asr.svg)
109
-
110
- | System / voice | Qwen3-ASR ↓ | Nemotron 3.5 ↓ | Whisper large-v3 ↓ |
111
- | --- | ---: | ---: | ---: |
112
- | **Inflect-Micro-v2** | **2.52%** | **5.45%** | **2.73%** |
113
- | **Inflect-Nano-v2** | **2.79%** | **5.63%** | **2.65%** |
114
- | KittenTTS Nano · Bruno | 2.15% | 3.96% | 2.17% |
115
- | KittenTTS Nano · Hugo | 2.39% | 3.80% | 2.11% |
116
- | Piper Low · Danny | 2.62% | 5.60% | 2.55% |
117
- | Piper Low · Ryan | 2.81% | 5.51% | 2.87% |
118
- | Supertonic 3 · M2 · 3-step | 3.03% | 6.04% | 3.22% |
119
- | Supertonic 3 · M2 · 8-step | 2.05% | 3.56% | 8.08% |
120
-
121
- 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.
122
-
123
- </details>
124
-
125
- <details>
126
- <summary><strong>Open evaluator robustness and error-category diagnostics</strong></summary>
127
-
128
- ![ASR evaluator robustness](assets/evidence/asr-robustness.svg)
129
-
130
- ![Semantic WER by prompt category](assets/evidence/category-semantic-wer.svg)
131
-
132
- These views are diagnostics, not additional leaderboards. They show where the
133
- recognizers disagree and which prompt categories still produce recoverable
134
- transcription errors.
135
-
136
- </details>
137
-
138
- ### 4. CPU runtime
139
-
140
- Both Inflect releases synthesize comfortably faster than real time on CPU. The
141
- managed reference run used a Hugging Face **CPU Upgrade** instance (8 vCPU,
142
- 32 GB RAM) with **four framework threads**, end-to-end text-to-waveform timing,
143
- and 100 fixed Modern400 prompts. Three complete passes were recorded; the first
144
- cache-building pass was excluded and the table pools passes two and three.
145
-
146
- | Release | Steady-state RTF ↓ | Audio / wall time ↑ |
147
- | --- | ---: | ---: |
148
- | **Inflect-Micro-v2** | **0.1593** | **6.28×** |
149
- | **Inflect-Nano-v2** | **0.0933** | **10.72×** |
150
-
151
- These are package-level results from the public PyTorch runtime, not a claim
152
- that Inflect is the fastest compact TTS system. Hardware, frontend behavior,
153
- framework, compilation, and thread policy all affect small-model measurements.
154
-
155
- <details>
156
- <summary><strong>Open directional compact-system speed context</strong></summary>
157
-
158
- The same managed CPU and four-thread policy were used for a shorter comparator
159
- pass: the identical 50-prompt prefix, repeated twice. KittenTTS and Piper are
160
- equal-work pooled across their two tested voices.
161
-
162
- | System | Audio / wall time ↑ |
163
- | --- | ---: |
164
- | Piper Low | 31.37× |
165
- | KittenTTS Nano | 13.33× |
166
- | **Inflect-Nano-v2** | **10.72×** |
167
- | Supertonic 3 · 3-step | 10.15× |
168
- | **Inflect-Micro-v2** | **6.28×** |
169
- | Supertonic 3 · 8-step | 4.37× |
170
-
171
- Because Inflect uses the larger 100-prompt steady-state run while comparator
172
- rows use the shorter 50-prompt confirmation pass, this table is deployment
173
- context rather than a perfectly matched speed leaderboard. Several comparators
174
- also use optimized ONNX runtimes while this Inflect release uses PyTorch.
175
-
176
- </details>
177
-
178
- ### 5. Complete weight footprint
179
-
180
- ![Complete deployable model footprint](assets/evidence/model-footprint.svg)
181
-
182
- Voice variants sharing the same weights are merged. Inflect totals include the integrated waveform decoder.
183
-
184
- <details>
185
- <summary><strong>Open the frozen evaluation protocol</strong></summary>
186
-
187
- - Modern400 uses 400 identical unseen English prompts per system: 200 fixed modern/stress prompts plus 200 deterministic FLEURS `en_us` test prompts.
188
- - Exact-text exclusion was checked against 87,362 training transcripts.
189
- - All ASR inputs are resampled to 16 kHz and scored with the same disclosed English normalizer.
190
- - UTMOS22 uses `tarepan/SpeechMOS` v1.2.0 on a separate 500-prompt generation set.
191
- - Headline intervals use 10,000 bootstrap samples.
192
- - The Modern400 corpus SHA-256 is `b7504ce2dce44a2da82770a6a5dfd2a034fe17e2113980f8a69663ade417a34c`.
193
- - Prompts, hypotheses, compressed row-level reports, and summaries ship under `evaluation/final/`.
194
- - Runtime is evaluated separately because framework, thread policy, compilation,
195
- and host load can dominate small-model comparisons.
196
-
197
- </details>
198
-
199
- ---
200
-
201
- ## Choose the right Inflect
202
-
203
- | | **Inflect-Nano-v2** | **Inflect-Micro-v2** |
204
- | --- | ---: | ---: |
205
- | Complete parameters | 3,966,721 | 9,356,513 |
206
- | FP32 weights | 15.97 MB | 37.53 MB |
207
- | Positioning | Smallest practical footprint | Strongest Inflect v2 quality |
208
- | 24 kHz waveform decoder | Included | Included |
209
- | Python API and frontend | Same | Same |
210
-
211
- **Inflect-Micro-v2** is the quality-focused member of the family. Both models use the same public API and complete text-to-waveform packaging.
212
-
213
- ## Run locally
214
-
215
  ### Install
216
 
217
  ```bash
@@ -224,141 +224,141 @@ python -m pip install -r requirements.txt
224
  This uses the Hub's version-aware downloader and retrieves the complete
225
  repository. A Git clone also works, but `hf download` is the recommended path
226
  for ordinary model installation.
227
-
228
- ### Python
229
-
230
- ```python
231
- from inference import InflectTTS
232
-
233
- tts = InflectTTS(".", device="cpu")
234
- tts.save(
235
- "A small voice can still have something meaningful to say.",
236
- "sample.wav",
237
- speed=1.0,
238
- variation=0.667,
239
- seed=7,
240
- )
241
- ```
242
-
243
- ### Download through the Hub
244
-
245
- ```python
246
- import sys
247
- from huggingface_hub import snapshot_download
248
-
249
- model_dir = snapshot_download("owensong/Inflect-Micro-v2")
250
- sys.path.insert(0, model_dir)
251
-
252
- from inference import InflectTTS
253
-
254
- tts = InflectTTS(model_dir, device="cpu")
255
- sample_rate, waveform = tts.synthesize("The complete model runs locally.")
256
- ```
257
-
258
- 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.
259
-
260
- ## Release profile
261
-
262
- | **Local runtime** | **Long-text handling** |
263
- | --- | --- |
264
- | CPU and CUDA inference through the same Python API and CLI. | Punctuation-aware segmentation with controlled pauses and edge fades. |
265
- | **Repeatable output** | **Auditable evaluation** |
266
- | Fixed seeds reproduce the same latent sample on the same runtime stack. | Frozen prompts, raw ASR hypotheses, intervals, hashes, and per-system reports are included. |
267
-
268
- <details>
269
- <summary id="architecture-and-parameter-budget"><strong>Architecture and parameter budget</strong></summary>
270
-
271
- 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.
272
-
273
- | Component | Inflect-Micro-v2 |
274
- | --- | ---: |
275
- | Latent channels | 192 |
276
- | Text hidden channels | 96 |
277
- | Encoder layers / heads | 3 / 2 |
278
- | Feed-forward channels | 768 |
279
- | Flow coupling blocks | 4 |
280
- | Initial decoder channels | 320 |
281
- | Upsample rates | 8, 8, 2, 2 |
282
- | Training segment | 16,384 samples |
283
- | Output | 24 kHz mono waveform |
284
-
285
- The release describes the deployable architecture. Private corpus-construction and optimization details are not part of this open-weight package.
286
-
287
- </details>
288
-
289
- <details>
290
- <summary id="controls-determinism-and-long-text"><strong>Controls, determinism, and long text</strong></summary>
291
-
292
- | Control | Default | Public range | Meaning |
293
- | --- | ---: | ---: | --- |
294
- | `speed` | `1.0` | `0.5–2.0` | Lower is slower; higher is faster. |
295
- | `variation` | `0.667` | `0.0–1.0` | Lower is steadier; higher samples more latent variation. |
296
- | `seed` | `0` | integer | Repeats the same stochastic sample on the same runtime stack. |
297
-
298
- Long passages are punctuation-aware chunks, not one unlimited autoregressive pass. Chunk boundaries receive short pauses and edge fades. See [`docs/API.md`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/API.md) for waveform contracts and concurrency notes.
299
-
300
- </details>
301
-
302
- <details>
303
- <summary id="data-voice-and-adaptation-status"><strong>Data, voice, and adaptation status</strong></summary>
304
-
305
- The release contains one fixed synthetic English voice. The package does not redistribute a real-speaker recording corpus, does not claim the voice as the identity of a real person, and requires no reference audio or external model at inference.
306
-
307
- 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`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/DATA_AND_VOICE.md) and [`docs/FINETUNING.md`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/FINETUNING.md).
308
-
309
- </details>
310
-
311
- ## Package map
312
-
313
- | Path | Purpose |
314
- | --- | --- |
315
- | `model.pth` | Inference-only generator checkpoint |
316
- | `config.json` | Architecture and audio configuration; also the Hub download-count query file |
317
- | `inference.py` | Public Python API and CLI |
318
- | `inflect_vits_frontend.py` | English normalization, phonemization, and punctuation frontend |
319
- | `runtime/` | Self-contained model implementation |
320
- | `samples/` | Held-out example generations |
321
- | `evaluation/final/` | Frozen benchmark prompts, reports, and protocol artifacts |
322
- | `docs/` | API, deployment, evaluation, adaptation, and export documentation |
323
- | `release_manifest.json` | File sizes and SHA-256 hashes |
324
-
325
- ## Limitations
326
-
327
- - English only, with one fixed male voice. This is not zero-shot voice cloning.
328
- - Unfamiliar phrasing can become flatter, less expressive, or less stable.
329
- - Numbers, abbreviations, homographs, and uncommon names remain frontend- and context-sensitive.
330
- - Long passages use punctuation-aware chunking; transitions can differ from a native long-form model pass.
331
- - Stochastic variation can alter timing and pronunciation. Fix the seed for comparisons.
332
- - UTMOS22 and ASR scores do not replace controlled human MOS or MUSHRA-style evaluation.
333
- - Not validated for medical, legal, emergency, or accessibility-critical communication.
334
-
335
- ## Responsible use
336
-
337
- 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.
338
-
339
- ## License, integrity, and attribution
340
-
341
- Original Inflect code and weights are released under Apache-2.0. Bundled third-party components retain their own notices in [`THIRD_PARTY_NOTICES.md`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/THIRD_PARTY_NOTICES.md). `release_manifest.json` records packaged file sizes and SHA-256 hashes.
342
-
343
- ### Private training scope and contact
344
-
345
- 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.
346
-
347
- 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.
348
-
349
- - **Discord:** `b111ue` — fastest for informal technical questions
350
- - **Community server:** [discord.gg/CVJYedvzvp](https://discord.gg/CVJYedvzvp)
351
- - **Email:** [owen.aw.song@gmail.com](mailto:owen.aw.song@gmail.com) — preferred for professional inquiries
352
-
353
- ## Citation
354
-
355
- ```bibtex
356
- @software{song2026inflectmicrov2,
357
- author = {Owen Song},
358
- title = {Inflect-Micro-v2: Complete Local Text-to-Waveform TTS Under 10M Parameters},
359
- year = {2026},
360
- url = {https://huggingface.co/owensong/Inflect-Micro-v2}
361
- }
362
- ```
363
-
364
- <p align="center"><sub>Designed and developed independently by Owen Song · open weights · Apache-2.0 · complete local text-to-waveform inference</sub></p>
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ pipeline_tag: text-to-speech
6
+ model_name: Inflect-Micro-v2
7
+ metrics:
8
+ - wer
9
+ tags:
10
+ - text-to-speech
11
+ - speech-synthesis
12
+ - local-tts
13
+ - cpu
14
+ - edge-ai
15
+ - small-model
16
+ - pytorch
17
+ - vits
18
+ - 24khz
19
+ thumbnail: assets/inflect-v2-repository-hero.png
20
+ inference: false
21
+ ---
22
+
23
+ ![Inflect-Micro-v2 release cover](assets/inflect-v2-repository-hero.png)
24
+
25
  <h1 align="center">Inflect-Micro-v2</h1>
26
  <p align="center"><strong>Complete local text-to-waveform speech synthesis under 10M parameters.</strong><br>
27
  Fixed-voice English TTS with deterministic seeds, long-text handling, and CPU or CUDA inference.</p>
28
 
29
  > **A note from Owen**
30
  >
31
+ > I built and funded Inflect v2 independently. If this release finds a real audience, I would like to continue the project with a broader v3, which might include things like more langauges, voices, and stability improvements. If the model is useful to you, leaving a like on Hugging Face genuinely helps more people discover it.
32
 
33
  <p align="center">
34
  <a href="https://huggingface.co/spaces/owensong/Inflect-v2"><img alt="Live playground" src="https://img.shields.io/badge/Playground-0B2A54?style=for-the-badge&logo=huggingface&logoColor=white"></a>
35
+ <a href="https://github.com/owenawsong/Inflect"><img alt="GitHub" src="https://img.shields.io/badge/GitHub-1769E0?style=for-the-badge&logo=github&logoColor=white"></a>
36
+ <a href="https://huggingface.co/owensong/Inflect-Nano-v2"><img alt="Inflect Nano v2" src="https://img.shields.io/badge/Nano_3.96M-FFFFFF?style=for-the-badge&logo=huggingface&logoColor=1769E0"></a>
37
+ <a href="https://discord.gg/CVJYedvzvp"><img alt="Inflect Discord" src="https://img.shields.io/badge/Discord-1769E0?style=for-the-badge&logo=discord&logoColor=white"></a>
38
+ <a href="https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/EVALUATION.md"><img alt="Benchmarks" src="https://img.shields.io/badge/Benchmarks-0B2A54?style=for-the-badge&logo=chartdotjs&logoColor=white"></a>
39
+ </p>
40
+
41
+ <p align="center"><strong>9,356,513 deployable parameters</strong> · <strong>37.53 MB FP32</strong> · <strong>24 kHz mono output</strong></p>
42
+
43
+ ---
44
+
45
+ Inflect v2 uses one public API across two sizes: **Micro prioritizes quality below 10M parameters; Nano prioritizes footprint below 4M.**
46
+
47
+ <details>
48
+ <summary><strong>Explore this model card</strong></summary>
49
+
50
+ | Start here | Technical detail |
51
+ | --- | --- |
52
+ | [Listen](#listen) | [Architecture](#architecture-and-parameter-budget) |
53
+ | [Evaluation](#evaluation) | [Controls and long text](#controls-determinism-and-long-text) |
54
+ | [Choose Micro or Nano](#choose-the-right-inflect) | [Data and adaptation](#data-voice-and-adaptation-status) |
55
+ | [Run locally](#run-locally) | [Exports and quantization](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/EXPORTS.md) |
56
+ | [Package map](#package-map) | [Evaluation and raw protocol](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/EVALUATION.md) |
57
+ | [Limitations](#limitations) | [Deployment guide](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/DEPLOYMENT.md) |
58
+
59
+ </details>
60
+
61
+ ## Listen
62
+
63
+ These are held-out text generations, not reconstructions of training audio. Each transcript is shown exactly as passed to the public frontend.
64
+
65
+ | Test | Exact transcript | Generated audio |
66
+ | --- | --- | --- |
67
+ | **Conversational** | It wasn't until later that I realized what had actually happened. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/conversational.wav"></audio> |
68
+ | **Punctuation** | First, close the window; second, turn off the lamp; finally, lock the door. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/punctuation.wav"></audio> |
69
+ | **Numbers** | The package weighs twelve point six kilograms and arrived on July twenty-first. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/numbers.wav"></audio> |
70
+ | **Names and places** | Gwendolyn photographed the eucalyptus trees outside Ljubljana. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/names_places.wav"></audio> |
71
+ | **Technical** | The system runs on three core components that all have to stay in sync. | <audio controls preload="metadata" src="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/technical.wav"></audio> |
72
+
73
+ ## Evaluation
74
+
75
+ 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.
76
+
77
+ | Community preference ↑ | UTMOS22 ↑ | Two-ASR semantic WER ↓ | Complete FP32 weights ↓ | 4-thread CPU throughput ↑ |
78
+ | ---: | ---: | ---: | ---: | ---: |
79
+ | **66.2%** | **4.395** | **3.99%** | **37.53 MB** | **6.28× real-time** |
80
+
81
+ The headline row always refers to **Inflect-Micro-v2**. Detailed competitor results and protocol boundaries are kept visible below.
82
+
83
+ **Comparison set.** Results include [KittenTTS Nano](https://huggingface.co/KittenML/kitten-tts-nano-0.8), [Piper Low](https://huggingface.co/rhasspy/piper-voices), and [Supertonic 3](https://huggingface.co/Supertone/supertonic-3), established compact or local TTS baselines with larger deployable weight footprints than both Inflect releases. Weight sizes are compared at package level, and no single metric is treated as proof of overall superiority.
84
+
85
+ ### 1. Human blind preference
86
+
87
+ ![Community blind listening](assets/evidence/human-preference.svg)
88
+
89
+ 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.
90
+
91
+ ### 2. Predicted naturalness versus footprint
92
+
93
+ ![Predicted quality versus footprint](assets/evidence/quality-vs-footprint.svg)
94
+
95
+ 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.
96
+
97
+ **Inflect-Micro-v2: 4.395 UTMOS22**, 95% bootstrap CI **4.381–4.408**. UTMOS22 is a learned predictor, not human MOS.
98
+
99
+ ### 3. Intelligibility on unseen text
100
+
101
+ ![Two-ASR semantic WER consensus](assets/evidence/asr-consensus.svg)
102
+
103
+ 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.
104
+
105
+ <details>
106
+ <summary><strong>Open the complete three-ASR audit</strong></summary>
107
+
108
+ ![Semantic WER across Qwen3-ASR, Nemotron 3.5, and Whisper large-v3](assets/evidence/modern400-three-asr.svg)
109
+
110
+ | System / voice | Qwen3-ASR ↓ | Nemotron 3.5 ↓ | Whisper large-v3 ↓ |
111
+ | --- | ---: | ---: | ---: |
112
+ | **Inflect-Micro-v2** | **2.52%** | **5.45%** | **2.73%** |
113
+ | **Inflect-Nano-v2** | **2.79%** | **5.63%** | **2.65%** |
114
+ | KittenTTS Nano · Bruno | 2.15% | 3.96% | 2.17% |
115
+ | KittenTTS Nano · Hugo | 2.39% | 3.80% | 2.11% |
116
+ | Piper Low · Danny | 2.62% | 5.60% | 2.55% |
117
+ | Piper Low · Ryan | 2.81% | 5.51% | 2.87% |
118
+ | Supertonic 3 · M2 · 3-step | 3.03% | 6.04% | 3.22% |
119
+ | Supertonic 3 · M2 · 8-step | 2.05% | 3.56% | 8.08% |
120
+
121
+ 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.
122
+
123
+ </details>
124
+
125
+ <details>
126
+ <summary><strong>Open evaluator robustness and error-category diagnostics</strong></summary>
127
+
128
+ ![ASR evaluator robustness](assets/evidence/asr-robustness.svg)
129
+
130
+ ![Semantic WER by prompt category](assets/evidence/category-semantic-wer.svg)
131
+
132
+ These views are diagnostics, not additional leaderboards. They show where the
133
+ recognizers disagree and which prompt categories still produce recoverable
134
+ transcription errors.
135
+
136
+ </details>
137
+
138
+ ### 4. CPU runtime
139
+
140
+ Both Inflect releases synthesize comfortably faster than real time on CPU. The
141
+ managed reference run used a Hugging Face **CPU Upgrade** instance (8 vCPU,
142
+ 32 GB RAM) with **four framework threads**, end-to-end text-to-waveform timing,
143
+ and 100 fixed Modern400 prompts. Three complete passes were recorded; the first
144
+ cache-building pass was excluded and the table pools passes two and three.
145
+
146
+ | Release | Steady-state RTF ↓ | Audio / wall time ↑ |
147
+ | --- | ---: | ---: |
148
+ | **Inflect-Micro-v2** | **0.1593** | **6.28×** |
149
+ | **Inflect-Nano-v2** | **0.0933** | **10.72×** |
150
+
151
+ These are package-level results from the public PyTorch runtime, not a claim
152
+ that Inflect is the fastest compact TTS system. Hardware, frontend behavior,
153
+ framework, compilation, and thread policy all affect small-model measurements.
154
+
155
+ <details>
156
+ <summary><strong>Open directional compact-system speed context</strong></summary>
157
+
158
+ The same managed CPU and four-thread policy were used for a shorter comparator
159
+ pass: the identical 50-prompt prefix, repeated twice. KittenTTS and Piper are
160
+ equal-work pooled across their two tested voices.
161
+
162
+ | System | Audio / wall time ↑ |
163
+ | --- | ---: |
164
+ | Piper Low | 31.37× |
165
+ | KittenTTS Nano | 13.33× |
166
+ | **Inflect-Nano-v2** | **10.72×** |
167
+ | Supertonic 3 · 3-step | 10.15× |
168
+ | **Inflect-Micro-v2** | **6.28×** |
169
+ | Supertonic 3 · 8-step | 4.37× |
170
+
171
+ Because Inflect uses the larger 100-prompt steady-state run while comparator
172
+ rows use the shorter 50-prompt confirmation pass, this table is deployment
173
+ context rather than a perfectly matched speed leaderboard. Several comparators
174
+ also use optimized ONNX runtimes while this Inflect release uses PyTorch.
175
+
176
+ </details>
177
+
178
+ ### 5. Complete weight footprint
179
+
180
+ ![Complete deployable model footprint](assets/evidence/model-footprint.svg)
181
+
182
+ Voice variants sharing the same weights are merged. Inflect totals include the integrated waveform decoder.
183
+
184
+ <details>
185
+ <summary><strong>Open the frozen evaluation protocol</strong></summary>
186
+
187
+ - Modern400 uses 400 identical unseen English prompts per system: 200 fixed modern/stress prompts plus 200 deterministic FLEURS `en_us` test prompts.
188
+ - Exact-text exclusion was checked against 87,362 training transcripts.
189
+ - All ASR inputs are resampled to 16 kHz and scored with the same disclosed English normalizer.
190
+ - UTMOS22 uses `tarepan/SpeechMOS` v1.2.0 on a separate 500-prompt generation set.
191
+ - Headline intervals use 10,000 bootstrap samples.
192
+ - The Modern400 corpus SHA-256 is `b7504ce2dce44a2da82770a6a5dfd2a034fe17e2113980f8a69663ade417a34c`.
193
+ - Prompts, hypotheses, compressed row-level reports, and summaries ship under `evaluation/final/`.
194
+ - Runtime is evaluated separately because framework, thread policy, compilation,
195
+ and host load can dominate small-model comparisons.
196
+
197
+ </details>
198
+
199
+ ---
200
+
201
+ ## Choose the right Inflect
202
+
203
+ | | **Inflect-Nano-v2** | **Inflect-Micro-v2** |
204
+ | --- | ---: | ---: |
205
+ | Complete parameters | 3,966,721 | 9,356,513 |
206
+ | FP32 weights | 15.97 MB | 37.53 MB |
207
+ | Positioning | Smallest practical footprint | Strongest Inflect v2 quality |
208
+ | 24 kHz waveform decoder | Included | Included |
209
+ | Python API and frontend | Same | Same |
210
+
211
+ **Inflect-Micro-v2** is the quality-focused member of the family. Both models use the same public API and complete text-to-waveform packaging.
212
+
213
+ ## Run locally
214
+
215
  ### Install
216
 
217
  ```bash
 
224
  This uses the Hub's version-aware downloader and retrieves the complete
225
  repository. A Git clone also works, but `hf download` is the recommended path
226
  for ordinary model installation.
227
+
228
+ ### Python
229
+
230
+ ```python
231
+ from inference import InflectTTS
232
+
233
+ tts = InflectTTS(".", device="cpu")
234
+ tts.save(
235
+ "A small voice can still have something meaningful to say.",
236
+ "sample.wav",
237
+ speed=1.0,
238
+ variation=0.667,
239
+ seed=7,
240
+ )
241
+ ```
242
+
243
+ ### Download through the Hub
244
+
245
+ ```python
246
+ import sys
247
+ from huggingface_hub import snapshot_download
248
+
249
+ model_dir = snapshot_download("owensong/Inflect-Micro-v2")
250
+ sys.path.insert(0, model_dir)
251
+
252
+ from inference import InflectTTS
253
+
254
+ tts = InflectTTS(model_dir, device="cpu")
255
+ sample_rate, waveform = tts.synthesize("The complete model runs locally.")
256
+ ```
257
+
258
+ 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.
259
+
260
+ ## Release profile
261
+
262
+ | **Local runtime** | **Long-text handling** |
263
+ | --- | --- |
264
+ | CPU and CUDA inference through the same Python API and CLI. | Punctuation-aware segmentation with controlled pauses and edge fades. |
265
+ | **Repeatable output** | **Auditable evaluation** |
266
+ | Fixed seeds reproduce the same latent sample on the same runtime stack. | Frozen prompts, raw ASR hypotheses, intervals, hashes, and per-system reports are included. |
267
+
268
+ <details>
269
+ <summary id="architecture-and-parameter-budget"><strong>Architecture and parameter budget</strong></summary>
270
+
271
+ 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.
272
+
273
+ | Component | Inflect-Micro-v2 |
274
+ | --- | ---: |
275
+ | Latent channels | 192 |
276
+ | Text hidden channels | 96 |
277
+ | Encoder layers / heads | 3 / 2 |
278
+ | Feed-forward channels | 768 |
279
+ | Flow coupling blocks | 4 |
280
+ | Initial decoder channels | 320 |
281
+ | Upsample rates | 8, 8, 2, 2 |
282
+ | Training segment | 16,384 samples |
283
+ | Output | 24 kHz mono waveform |
284
+
285
+ The release describes the deployable architecture. Private corpus-construction and optimization details are not part of this open-weight package.
286
+
287
+ </details>
288
+
289
+ <details>
290
+ <summary id="controls-determinism-and-long-text"><strong>Controls, determinism, and long text</strong></summary>
291
+
292
+ | Control | Default | Public range | Meaning |
293
+ | --- | ---: | ---: | --- |
294
+ | `speed` | `1.0` | `0.5–2.0` | Lower is slower; higher is faster. |
295
+ | `variation` | `0.667` | `0.0–1.0` | Lower is steadier; higher samples more latent variation. |
296
+ | `seed` | `0` | integer | Repeats the same stochastic sample on the same runtime stack. |
297
+
298
+ Long passages are punctuation-aware chunks, not one unlimited autoregressive pass. Chunk boundaries receive short pauses and edge fades. See [`docs/API.md`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/API.md) for waveform contracts and concurrency notes.
299
+
300
+ </details>
301
+
302
+ <details>
303
+ <summary id="data-voice-and-adaptation-status"><strong>Data, voice, and adaptation status</strong></summary>
304
+
305
+ The release contains one fixed synthetic English voice. The package does not redistribute a real-speaker recording corpus, does not claim the voice as the identity of a real person, and requires no reference audio or external model at inference.
306
+
307
+ 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`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/DATA_AND_VOICE.md) and [`docs/FINETUNING.md`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/docs/FINETUNING.md).
308
+
309
+ </details>
310
+
311
+ ## Package map
312
+
313
+ | Path | Purpose |
314
+ | --- | --- |
315
+ | `model.pth` | Inference-only generator checkpoint |
316
+ | `config.json` | Architecture and audio configuration; also the Hub download-count query file |
317
+ | `inference.py` | Public Python API and CLI |
318
+ | `inflect_vits_frontend.py` | English normalization, phonemization, and punctuation frontend |
319
+ | `runtime/` | Self-contained model implementation |
320
+ | `samples/` | Held-out example generations |
321
+ | `evaluation/final/` | Frozen benchmark prompts, reports, and protocol artifacts |
322
+ | `docs/` | API, deployment, evaluation, adaptation, and export documentation |
323
+ | `release_manifest.json` | File sizes and SHA-256 hashes |
324
+
325
+ ## Limitations
326
+
327
+ - English only, with one fixed male voice. This is not zero-shot voice cloning.
328
+ - Unfamiliar phrasing can become flatter, less expressive, or less stable.
329
+ - Numbers, abbreviations, homographs, and uncommon names remain frontend- and context-sensitive.
330
+ - Long passages use punctuation-aware chunking; transitions can differ from a native long-form model pass.
331
+ - Stochastic variation can alter timing and pronunciation. Fix the seed for comparisons.
332
+ - UTMOS22 and ASR scores do not replace controlled human MOS or MUSHRA-style evaluation.
333
+ - Not validated for medical, legal, emergency, or accessibility-critical communication.
334
+
335
+ ## Responsible use
336
+
337
+ 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.
338
+
339
+ ## License, integrity, and attribution
340
+
341
+ Original Inflect code and weights are released under Apache-2.0. Bundled third-party components retain their own notices in [`THIRD_PARTY_NOTICES.md`](https://huggingface.co/owensong/Inflect-Micro-v2/blob/main/THIRD_PARTY_NOTICES.md). `release_manifest.json` records packaged file sizes and SHA-256 hashes.
342
+
343
+ ### Private training scope and contact
344
+
345
+ 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.
346
+
347
+ 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.
348
+
349
+ - **Discord:** `b111ue` — fastest for informal technical questions
350
+ - **Community server:** [discord.gg/CVJYedvzvp](https://discord.gg/CVJYedvzvp)
351
+ - **Email:** [owen.aw.song@gmail.com](mailto:owen.aw.song@gmail.com) — preferred for professional inquiries
352
+
353
+ ## Citation
354
+
355
+ ```bibtex
356
+ @software{song2026inflectmicrov2,
357
+ author = {Owen Song},
358
+ title = {Inflect-Micro-v2: Complete Local Text-to-Waveform TTS Under 10M Parameters},
359
+ year = {2026},
360
+ url = {https://huggingface.co/owensong/Inflect-Micro-v2}
361
+ }
362
+ ```
363
+
364
+ <p align="center"><sub>Designed and developed independently by Owen Song · open weights · Apache-2.0 · complete local text-to-waveform inference</sub></p>