owensong commited on
Commit
8a0ff7e
·
verified ·
1 Parent(s): 6789a33

Stage verified Inflect v2 release candidate and evaluation evidence

Browse files
Files changed (43) hide show
  1. README.md +186 -133
  2. THIRD_PARTY_NOTICES.md +10 -0
  3. assets/evidence/asr-robustness.svg +0 -65
  4. assets/evidence/category-semantic-wer.svg +0 -94
  5. assets/evidence/cpu-throughput.svg +0 -51
  6. assets/evidence/model-footprint.svg +19 -25
  7. assets/evidence/quality-vs-cpu-speed.svg +0 -55
  8. assets/evidence/quality-vs-footprint.svg +23 -37
  9. assets/evidence/semantic-wer.svg +0 -63
  10. docs/API.md +98 -23
  11. docs/DATA_AND_VOICE.md +42 -0
  12. docs/DEPLOYMENT.md +53 -8
  13. docs/EVALUATION.md +14 -3
  14. docs/FINETUNING.md +11 -4
  15. evaluation/final/{runtime → runtime_snapshot}/inflect-micro-v2_cpu.json +0 -0
  16. evaluation/final/{runtime → runtime_snapshot}/inflect-micro-v2_cuda.json +0 -0
  17. evaluation/final/{runtime → runtime_snapshot}/inflect-nano-v2_cpu.json +0 -0
  18. evaluation/final/{runtime → runtime_snapshot}/inflect-nano-v2_cuda.json +0 -0
  19. evaluation/final/{runtime → runtime_snapshot}/kitten-nano-bruno_cpu.json +0 -0
  20. evaluation/final/{runtime → runtime_snapshot}/kitten-nano-hugo_cpu.json +0 -0
  21. evaluation/final/{runtime → runtime_snapshot}/piper-danny-low_cpu.json +0 -0
  22. evaluation/final/{runtime → runtime_snapshot}/piper-ryan-low_cpu.json +0 -0
  23. evaluation/final/{runtime → runtime_snapshot}/supertonic3-james-3step_cpu.json +0 -0
  24. evaluation/final/{runtime → runtime_snapshot}/supertonic3-james-8step_cpu.json +0 -0
  25. evaluation/final/{raw/utmos22 → utmos22}/report.json +0 -0
  26. evaluation/{final/raw → legacy/release500}/asr_combined/report.json +0 -0
  27. evaluation/{final/raw → legacy/release500}/combined_manifest_validation.json +0 -0
  28. evaluation/{final → legacy/release500}/evidence-summary.json +0 -0
  29. evaluation/{final/raw → legacy/release500}/prompt_report.json +0 -0
  30. evaluation/{final/raw → legacy/release500}/prompts.jsonl +0 -0
  31. evaluation/{final/raw → legacy/release500}/signal_diagnostics/per_clip.csv +0 -0
  32. evaluation/{final/raw → legacy/release500}/signal_diagnostics/report.json +0 -0
  33. evaluation/legacy/release500/utmos22/report.json +0 -0
  34. evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/hypotheses_wav2vec2-large-lv60k-960h.json +0 -0
  35. evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/report.json +0 -0
  36. evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/rows.csv +0 -0
  37. evaluation/{final/raw → legacy/release500}/whisper_large_v3/hypotheses_whisper-large-v3.json +0 -0
  38. evaluation/{final/raw → legacy/release500}/whisper_large_v3/report.json +0 -0
  39. evaluation/{final/raw → legacy/release500}/whisper_large_v3/rows.csv +0 -0
  40. release_manifest.json +106 -111
  41. requirements-tested.txt +11 -0
  42. requirements.txt +1 -0
  43. third_party/ALIAS_FREE_TORCH_LICENSE.txt +201 -0
README.md CHANGED
@@ -3,218 +3,269 @@ license: apache-2.0
3
  language:
4
  - en
5
  pipeline_tag: text-to-speech
 
 
 
6
  tags:
7
  - text-to-speech
8
  - speech-synthesis
9
  - local-tts
10
  - cpu
 
11
  - small-model
 
12
  - vits
13
  - 24khz
14
- library_name: pytorch
 
15
  ---
16
 
17
  ![Inflect v2](assets/inflect-v2-repository-hero.png)
18
 
19
  <h1 align="center">Inflect-Micro-v2</h1>
20
- <p align="center"><strong>Complete local TTS under 10M parameters.</strong><br>A complete 24 kHz English text-to-waveform model with its neural waveform decoder included.</p>
21
- <p align="center"><a href="https://huggingface.co/spaces/owensong/Inflect-v2-Private-Playground"><strong>Try it in the browser</strong></a> · <a href="https://huggingface.co/owensong/Inflect-Nano-v2">Inflect-Nano-v2</a> · <a href="#evaluation">Evaluation</a> · <a href="#limitations">Limitations</a></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
- Inflect-Micro-v2 is the quality-focused member of Inflect v2. The complete deployable system has **9,356,513 parameters**; there is no second vocoder download and no hidden large language model at inference time.
24
 
25
- ## Listen First
26
 
27
- Every clip below uses held-out text rather than a training-audio reconstruction.
28
 
29
- | Prompt type | Audio |
30
- | --- | --- |
31
- | Conversational | <audio controls preload="none" src="samples/male/conversational.wav"></audio> |
32
- | Punctuation | <audio controls preload="none" src="samples/male/punctuation.wav"></audio> |
33
- | Numbers | <audio controls preload="none" src="samples/male/numbers.wav"></audio> |
34
- | Names and places | <audio controls preload="none" src="samples/male/names_places.wav"></audio> |
35
- | Technical | <audio controls preload="none" src="samples/male/technical.wav"></audio> |
36
 
37
- ## At a Glance
38
 
39
- | | Inflect-Micro-v2 |
40
- | --- | ---: |
41
- | Complete deployable parameters | **9,356,513** |
42
- | FP32 model weights | **37.53 MB** |
43
- | Sample rate | **24 kHz** |
44
- | Voice | **1 fixed English male voice** |
45
- | External vocoder | **None** |
46
- | Release format | **PyTorch FP32** |
47
- | Long text | **Punctuation-aware chunking** |
48
 
49
- Inflect v2 is released in two deliberately different sizes. **Micro** spends its larger budget on waveform capacity and hidden width; **Nano** prioritizes footprint while preserving the same public runtime and text frontend. Both numbers above count the complete deployable generator, including the waveform decoder.
50
 
51
- ## Human Listening
52
 
53
- ![Community blind listening](assets/evidence/human-preference.svg)
54
 
55
- Inflect-Micro-v2 recorded a **66.2% preference rate** (21 wins, 10 losses, 3 ties) in the final anonymous community study. The full study contains **147 pairwise decisions** across the published lineup. Ties count as half a win. This is descriptive community evidence, not a formal MOS study; pair coverage and vote counts differ by system.
56
 
57
- ## Evaluation
 
 
 
 
58
 
59
- ### Quality versus footprint
60
 
61
- ![Predicted quality versus footprint](assets/evidence/quality-vs-footprint.svg)
 
62
 
63
- ### Three-ASR intelligibility
64
-
65
- ![Semantic WER across Qwen3-ASR, Nemotron 3.5, and Whisper large-v3](assets/evidence/modern400-three-asr.svg)
 
 
 
 
 
 
66
 
67
- ### CPU throughput
68
 
69
- ![Warm CPU throughput](assets/evidence/cpu-throughput.svg)
 
 
70
 
71
- ### Quality and speed
 
72
 
73
- ![Quality and CPU throughput](assets/evidence/quality-vs-cpu-speed.svg)
74
 
75
- ### Complete model footprint
 
 
76
 
77
- ![Model footprint](assets/evidence/model-footprint.svg)
78
 
79
- | System | Weights | UTMOS22 ↑ | Qwen3 WER ↓ | Nemotron WER ↓ | Whisper WER ↓ | ASR avg. ↓ |
80
- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
81
- | **Inflect-Micro-v2** | 37.5 MB | 4.395 | **2.52%** | **5.45%** | **2.73%** | **3.57%** |
82
- | **Inflect-Nano-v2** | 16.0 MB | 4.386 | **2.79%** | **5.63%** | **2.65%** | **3.69%** |
83
- | KittenTTS Nano · Bruno | 56.8 MB | 4.217 | 2.15% | 3.96% | 2.17% | 2.76% |
84
- | KittenTTS Nano · Hugo | 56.8 MB | 4.191 | 2.39% | 3.80% | 2.11% | 2.77% |
85
- | Piper · Ryan Low | 63.1 MB | 4.289 | 2.81% | 5.51% | 2.87% | 3.73% |
86
- | Piper · Danny Low | 63.1 MB | 4.195 | 2.62% | 5.60% | 2.55% | 3.59% |
87
- | Supertonic 3 · M2 · 3-step | 398.1 MB | 2.471 | 3.03% | 6.04% | 3.22% | 4.10% |
88
- | Supertonic 3 · M2 · 8-step | 398.1 MB | 4.295 | 2.05% | 3.56% | 8.08% | 4.56% |
89
-
90
- Inflect-Micro-v2 measured **4.395 UTMOS22** on the matched quality set (95% bootstrap CI 4.381–4.408). On the separately frozen Modern400 intelligibility set it measured **2.52% semantic WER** with Qwen3-ASR, **5.45%** with Nemotron 3.5 ASR, and **2.73%** with Whisper large-v3. Their unweighted corpus-level macro-average is **3.57%**. UTMOS22 is an automated quality predictor, not human MOS; WER measures transcript recoverability, not naturalness.
91
-
92
- The corrected Supertonic run uses version 1.3.1, official voice `M2`, clean generations, and explicit 16 kHz ASR input normalization. Whisper still produces insertion-heavy hallucinations on a small subset of otherwise intelligible Supertonic 8-step clips, yielding **8.08%** versus **2.05% / 3.56%** from Qwen and Nemotron. Individual recognizer scores therefore remain visible beside the requested descriptive average.
93
 
94
- <details>
95
- <summary><strong>Protocol and raw evidence</strong></summary>
96
-
97
- - 400 identical unseen English prompts per system; 3,200 generated clips total.
98
- - The frozen set combines 200 fixed modern/stress prompts with 200 deterministic Google FLEURS `en_us` test prompts.
99
- - Exact-text exclusion was run against 87,362 training transcripts.
100
- - Semantic WER is reported independently for `Qwen/Qwen3-ASR-1.7B`, `nvidia/nemotron-3.5-asr-streaming-0.6b`, and `openai/whisper-large-v3` with the same disclosed English normalizer.
101
- - `ASR avg.` is the unweighted mean of the three corpus-level semantic WERs; it is descriptive and never replaces the individual scores.
102
- - UTMOS22 uses `tarepan/SpeechMOS` v1.2.0.
103
- - Headline intervals use 10,000 bootstrap samples.
104
- - Kitten and Piper voices are reported separately; Supertonic 3-step and 8-step are never pooled.
105
- - The Modern400 corpus hash is `b7504ce2dce44a2da82770a6a5dfd2a034fe17e2113980f8a69663ade417a34c`.
106
- - Prompts, summary data, and compressed row-level ASR reports are under `evaluation/final/modern400/`.
107
 
108
- </details>
109
 
110
- ## Quickstart
111
 
112
- ```bash
113
- pip install -r requirements.txt
114
- python inference.py \
115
- --model-dir . \
116
- --device cpu \
117
- --text "A small voice can still have something meaningful to say." \
118
- --output sample.wav
119
- ```
120
 
121
- ```python
122
- import sys
123
- from huggingface_hub import snapshot_download
124
 
125
- model_dir = snapshot_download("owensong/Inflect-Micro-v2")
126
- sys.path.insert(0, model_dir)
127
- from inference import InflectTTS
128
 
129
- tts = InflectTTS(model_dir, device="cpu")
130
- tts.save(
131
- "The complete speech model runs locally.",
132
- "sample.wav",
133
- speed=1.0,
134
- variation=0.667,
135
- seed=7,
136
- )
137
- ```
 
 
 
 
 
 
 
138
 
139
- The packaged runtime accepts `speed` from `0.5` to `2.0`, `variation` from `0.0` to `1.0`, and a deterministic integer seed. Long input is split at punctuation-aware boundaries and concatenated with controlled pauses.
140
 
141
- ### Controls
142
 
143
- | Control | Default | Effect |
144
- | --- | ---: | --- |
145
- | `speed` | `1.0` | Speech rate; supported range `0.5`–`2.0` |
146
- | `variation` | `0.667` | Stochastic latent variation; lower is steadier, higher is more variable |
147
- | `seed` | `0` | Reproducible sampling seed; incremented per long-text chunk |
148
 
149
- Use a fixed seed when comparing systems. A different seed is a different stochastic sample, not a different checkpoint.
 
 
 
 
 
 
 
 
 
150
 
151
- ## Architecture
152
 
153
- Inflect v2 is a **parameter-efficient VITS-family, end-to-end text-to-waveform speech generator** with a phoneme frontend, monotonic alignment, stochastic latent synthesis, and an integrated neural waveform decoder.
 
 
 
 
 
 
 
 
 
 
 
 
154
 
155
- - punctuation-preserving English normalization and stress-marked phonemes
156
- - compact Transformer text encoder and duration model
157
- - latent prior and residual coupling flow
158
- - integrated adversarial waveform decoder at 24 kHz
159
- - inference-only checkpoint with training discriminators and optimizer state removed
160
 
161
- | Component | Value |
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  | --- | ---: |
163
  | Latent channels | 192 |
164
  | Text hidden channels | 96 |
165
- | Text encoder layers / heads | 3 / 2 |
166
  | Feed-forward channels | 768 |
167
  | Flow coupling blocks | 4 |
168
  | Initial decoder channels | 320 |
169
  | Upsample rates | 8, 8, 2, 2 |
170
  | Training segment | 16,384 samples |
 
171
 
172
- The model card describes the deployable architecture. The private corpus-construction and optimization recipe is not part of this open-weight release.
173
 
174
- ## Runtime
175
 
176
- Warm end-to-end CPU inference on **AMD EPYC 7K62 48-Core Processor**, with **192 logical CPUs visible** to the isolated process and runtime-default thread settings:
 
177
 
178
- | RTF | Audio / wall time ↑ | Median latency | p95 latency | Cold load |
179
- | ---: | ---: | ---: | ---: | ---: |
180
- | 0.7431 | 1.35× | 3.205 s | 4.681 s | 1.35 s |
 
 
 
 
 
 
181
 
182
- Runtime varies with processor, PyTorch build, thread policy, text length, and operating system. Use the raw report rather than extrapolating these measurements to untested devices.
 
 
 
183
 
184
- ## Fine-tuning
185
 
186
- The initial release is inference-first. The checkpoint is structurally compatible with voice and language adaptation, but the private training recipe and corpus-generation pipeline are not included. A tested public adaptation toolkit should be treated as a separate release rather than inferred from the inference package. See `docs/FINETUNING.md` for the supported status and data contract.
187
 
188
- ## Repository Layout
189
 
190
  | Path | Purpose |
191
  | --- | --- |
192
  | `model.pth` | Inference-only generator checkpoint |
193
- | `config.json` | Deployable architecture and audio configuration |
194
  | `inference.py` | Public Python API and CLI |
195
- | `inflect_vits_frontend.py` | Normalization, phonemization, and punctuation frontend |
196
- | `runtime/` | Self-contained model implementation required for inference |
197
  | `samples/` | Held-out example generations |
198
- | `evaluation/final/` | Final matched benchmark reports and protocol artifacts |
199
- | `release_manifest.json` | File sizes and SHA-256 integrity hashes |
 
200
 
201
  ## Limitations
202
 
203
- - English only and one fixed male voice. This is not a zero-shot voice-cloning model.
204
- - Unfamiliar phrasing can become flatter or less expressive.
205
- - Numbers, abbreviations, homographs, and uncommon names depend strongly on frontend normalization and context.
206
- - Long passages are synthesized in chunks, so transitions can differ from a single long-form model pass.
207
- - Stochastic variation can change pronunciation and timing; use a fixed seed for reproducibility.
208
- - Learned MOS predictors can reward or penalize spectral traits differently from human listeners.
209
  - Not validated for medical, legal, emergency, or accessibility-critical communication.
210
 
211
- ## Responsible Use
212
 
213
- 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 license.
214
 
215
- ## Integrity and License
216
 
217
- `release_manifest.json` records file sizes and SHA-256 hashes. Original Inflect code and weights in this repository are licensed under Apache-2.0; bundled third-party components retain their own notices in `THIRD_PARTY_NOTICES.md`.
218
 
219
  ## Citation
220
 
@@ -226,3 +277,5 @@ Do not use the included voice to impersonate a real person, deceive listeners, o
226
  url = {https://huggingface.co/owensong/Inflect-Micro-v2}
227
  }
228
  ```
 
 
 
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 v2](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
+ 24 kHz English TTS with the neural waveform decoder already inside the model.</p>
28
+
29
+ <p align="center">
30
+ <a href="https://huggingface.co/spaces/owensong/Inflect-v2"><img alt="Live demo" src="https://img.shields.io/badge/Live_demo-1769E0?style=for-the-badge&logo=huggingface&logoColor=white"></a>
31
+ <a href="https://huggingface.co/owensong/Inflect-Nano-v2"><img alt="Inflect-Nano-v2" src="https://img.shields.io/badge/Inflect--Nano--v2-FFFFFF?style=for-the-badge&logo=huggingface&logoColor=1769E0"></a>
32
+ <a href="https://github.com/owenawsong/Inflect"><img alt="GitHub" src="https://img.shields.io/badge/GitHub-10253F?style=for-the-badge&logo=github&logoColor=white"></a>
33
+ </p>
34
+
35
+ <p align="center">
36
+ <a href="#run-locally">Run locally</a> ·
37
+ <a href="#evaluation">Evaluation</a> ·
38
+ <a href="docs/API.md">API</a> ·
39
+ <a href="docs/DEPLOYMENT.md">Deployment</a> ·
40
+ <a href="docs/EVALUATION.md">Raw protocol</a> ·
41
+ <a href="https://huggingface.co/collections/owensong/inflect-v2-6a619e820808eccf361a2948">Inflect v2 collection</a>
42
+ </p>
43
+
44
+ <p align="center"><strong>9.36M complete parameters</strong> · <strong>37.53 MB FP32 weights</strong> · <strong>one fixed English voice</strong> · <strong>no external vocoder</strong></p>
45
 
46
+ ---
47
 
48
+ ## Listen
49
 
50
+ These are held-out text generations, not reconstructions of training audio. Each transcript is shown exactly as passed to the public frontend.
51
 
52
+ | Test | Exact transcript | Generated audio |
53
+ | --- | --- | --- |
54
+ | **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><br><a href="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/conversational.wav">download WAV</a> |
55
+ | **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><br><a href="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/punctuation.wav">download WAV</a> |
56
+ | **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><br><a href="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/numbers.wav">download WAV</a> |
57
+ | **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><br><a href="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/names_places.wav">download WAV</a> |
58
+ | **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><br><a href="https://huggingface.co/owensong/Inflect-Micro-v2/resolve/main/samples/male/technical.wav">download WAV</a> |
59
 
60
+ ## Choose the right Inflect
61
 
62
+ | | **Inflect-Nano-v2** | **Inflect-Micro-v2** |
63
+ | --- | ---: | ---: |
64
+ | Complete parameters | 3,966,721 | 9,356,513 |
65
+ | FP32 weights | 15.97 MB | 37.53 MB |
66
+ | Positioning | Smallest practical footprint | Strongest Inflect v2 quality |
67
+ | Warm CPU throughput¹ | 1.85× real time | 1.35× real time |
68
+ | Waveform decoder | Included | Included |
69
+ | Public API and frontend | Same | Same |
 
70
 
71
+ **Inflect-Micro-v2** is the quality-focused member of the family. Both parameter totals count the complete generator, including the 24 kHz neural waveform decoder. There is no hidden inference-time teacher, language model, or second vocoder download.
72
 
73
+ <sub>¹ Host-specific engineering snapshot on an AMD EPYC 7K62. See [Runtime methodology](#runtime-methodology) before comparing hardware.</sub>
74
 
75
+ ## Run locally
76
 
77
+ ### Install
78
 
79
+ ```bash
80
+ git clone https://huggingface.co/owensong/Inflect-Micro-v2
81
+ cd Inflect-Micro-v2
82
+ python -m pip install -r requirements.txt
83
+ ```
84
 
85
+ ### Python
86
 
87
+ ```python
88
+ from inference import InflectTTS
89
 
90
+ tts = InflectTTS(".", device="cpu")
91
+ tts.save(
92
+ "A small voice can still have something meaningful to say.",
93
+ "sample.wav",
94
+ speed=1.0,
95
+ variation=0.667,
96
+ seed=7,
97
+ )
98
+ ```
99
 
100
+ ### Download through the Hub
101
 
102
+ ```python
103
+ import sys
104
+ from huggingface_hub import snapshot_download
105
 
106
+ model_dir = snapshot_download("owensong/Inflect-Micro-v2")
107
+ sys.path.insert(0, model_dir)
108
 
109
+ from inference import InflectTTS
110
 
111
+ tts = InflectTTS(model_dir, device="cpu")
112
+ sample_rate, waveform = tts.synthesize("The complete model runs locally.")
113
+ ```
114
 
115
+ 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.
116
 
117
+ ## Why Inflect
 
 
 
 
 
 
 
 
 
 
 
 
 
118
 
119
+ | **Small enough to ship** | **Complete by design** |
120
+ | --- | --- |
121
+ | 37.53 MB of FP32 model weights, with no server dependency. | Text frontend, acoustic generator, duration model, and waveform decoder ship together. |
122
+ | **Built for local inference** | **Measured, not hand-picked** |
123
+ | CPU-ready PyTorch runtime, deterministic seeds, and punctuation-aware long text. | Frozen prompts, raw hypotheses, confidence intervals, hashes, and per-system reports are included. |
 
 
 
 
 
 
 
 
124
 
125
+ ## Evaluation
126
 
127
+ No single metric captures TTS quality. Inflect v2 reports **human preference**, **predicted naturalness**, **three-ASR intelligibility**, **footprint**, and **runtime** separately rather than hiding them inside one composite score.
128
 
129
+ ### 1. Human blind preference
 
 
 
 
 
 
 
130
 
131
+ ![Community blind listening](assets/evidence/human-preference.svg)
 
 
132
 
133
+ 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.
 
 
134
 
135
+ ### 2. Predicted naturalness versus footprint
136
+
137
+ ![Predicted quality versus footprint](assets/evidence/quality-vs-footprint.svg)
138
+
139
+ The 500-prompt UTMOS22 quality run used the same unseen text per system. KittenTTS and Piper are summarized as equal-weight two-voice means in the figure, with the observed voice range visible. Supertonic 3-step is annotated below the plotted quality range rather than compressing the useful portion of the chart.
140
+
141
+ | System / voice | Weights | UTMOS22 ↑ |
142
+ | --- | ---: | ---: |
143
+ | **Inflect-Micro-v2** | 37.5 MB | **4.395** |
144
+ | **Inflect-Nano-v2** | 16.0 MB | **4.386** |
145
+ | KittenTTS Nano · Bruno | 56.8 MB | 4.217 |
146
+ | KittenTTS Nano · Hugo | 56.8 MB | 4.191 |
147
+ | Piper Low · Ryan | 63.1 MB | 4.289 |
148
+ | Piper Low · Danny | 63.1 MB | 4.195 |
149
+ | Supertonic 3 · James · 8-step | 398.1 MB | 4.295 |
150
+ | Supertonic 3 · James · 3-step | 398.1 MB | 2.471 |
151
 
152
+ Inflect-Micro-v2: **4.395 UTMOS22**, 95% bootstrap CI **4.381–4.408**. UTMOS22 is a learned predictor, not human MOS.
153
 
154
+ ### 3. Intelligibility across three ASR systems
155
 
156
+ ![Semantic WER across Qwen3-ASR, Nemotron 3.5, and Whisper large-v3](assets/evidence/modern400-three-asr.svg)
 
 
 
 
157
 
158
+ | System / voice | Qwen3-ASR | Nemotron 3.5 | Whisper large-v3 | Descriptive mean ↓ |
159
+ | --- | ---: | ---: | ---: | ---: |
160
+ | **Inflect-Micro-v2** | **2.52%** | **5.45%** | **2.73%** | **3.57%** |
161
+ | **Inflect-Nano-v2** | **2.79%** | **5.63%** | **2.65%** | **3.69%** |
162
+ | KittenTTS Nano · Bruno | 2.15% | 3.96% | 2.17% | 2.76% |
163
+ | KittenTTS Nano · Hugo | 2.39% | 3.80% | 2.11% | 2.77% |
164
+ | Piper Low · Danny | 2.62% | 5.60% | 2.55% | 3.59% |
165
+ | Piper Low · Ryan | 2.81% | 5.51% | 2.87% | 3.73% |
166
+ | Supertonic 3 · M2 · 3-step | 3.03% | 6.04% | 3.22% | 4.10% |
167
+ | Supertonic 3 · M2 · 8-step | 2.05% | 3.56% | 8.08% | 4.56% |
168
 
169
+ Inflect-Micro-v2: **2.52% Qwen3-ASR**, **5.45% Nemotron 3.5**, and **2.73% Whisper large-v3** semantic WER. The **3.57%** mean is descriptive only; individual recognizers remain visible because Whisper produced insertion-heavy hallucinations on a small subset of otherwise intelligible Supertonic 8-step clips.
170
 
171
+ <details>
172
+ <summary><strong>Open the frozen evaluation protocol</strong></summary>
173
+
174
+ - Modern400 uses 400 identical unseen English prompts per system: 200 fixed modern/stress prompts plus 200 deterministic FLEURS `en_us` test prompts.
175
+ - Exact-text exclusion was checked against 87,362 training transcripts.
176
+ - Semantic WER is reported independently for `Qwen/Qwen3-ASR-1.7B`, `nvidia/nemotron-3.5-asr-streaming-0.6b`, and `openai/whisper-large-v3`.
177
+ - All ASR inputs are explicitly resampled to 16 kHz and scored with the same disclosed English normalizer.
178
+ - UTMOS22 uses `tarepan/SpeechMOS` v1.2.0 on a separate 500-prompt frozen generation set.
179
+ - Headline intervals use 10,000 bootstrap samples.
180
+ - The Modern400 corpus SHA-256 is `b7504ce2dce44a2da82770a6a5dfd2a034fe17e2113980f8a69663ade417a34c`.
181
+ - Prompts, hypotheses, compressed row-level reports, and summaries ship under `evaluation/final/`.
182
+
183
+ </details>
184
 
185
+ ## Runtime methodology
 
 
 
 
186
 
187
+ The model-specific snapshot below is retained as a transparent engineering measurement, not a portable hardware promise. It used one isolated process on an AMD EPYC 7K62, 50 prompts, three warmups, and runtime-default CPU threading.
188
+
189
+ | RTF ↓ | Audio generated / wall time ↑ | Median utterance | p95 utterance | Cold load |
190
+ | ---: | ---: | ---: | ---: | ---: |
191
+ | 0.743 | 1.35× real time | 3.205 s | 4.681 s | 1.35 s |
192
+
193
+ **RTF is wall time divided by generated audio duration.** For example, `0.54 RTF` means 1.85 seconds of audio were generated per second of wall time. It does not mean “1.85× faster than another model.” CPU model, thread policy, framework provider, and text length can materially change the result.
194
+
195
+ <details>
196
+ <summary><strong>Architecture and parameter budget</strong></summary>
197
+
198
+ 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.
199
+
200
+ | Component | Inflect-Micro-v2 |
201
  | --- | ---: |
202
  | Latent channels | 192 |
203
  | Text hidden channels | 96 |
204
+ | Encoder layers / heads | 3 / 2 |
205
  | Feed-forward channels | 768 |
206
  | Flow coupling blocks | 4 |
207
  | Initial decoder channels | 320 |
208
  | Upsample rates | 8, 8, 2, 2 |
209
  | Training segment | 16,384 samples |
210
+ | Output | 24 kHz mono waveform |
211
 
212
+ The release describes the deployable architecture. Private corpus-construction and optimization details are not part of this open-weight package.
213
 
214
+ </details>
215
 
216
+ <details>
217
+ <summary><strong>Controls, determinism, and long text</strong></summary>
218
 
219
+ | Control | Default | Public range | Meaning |
220
+ | --- | ---: | ---: | --- |
221
+ | `speed` | `1.0` | `0.5–2.0` | Lower is slower; higher is faster. |
222
+ | `variation` | `0.667` | `0.0–1.0` | Lower is steadier; higher samples more latent variation. |
223
+ | `seed` | `0` | integer | Repeats the same stochastic sample on the same runtime stack. |
224
+
225
+ Long passages are punctuation-aware chunks, not one unlimited autoregressive pass. Chunk boundaries receive short pauses and edge fades. See [`docs/API.md`](docs/API.md) for waveform contracts and concurrency notes.
226
+
227
+ </details>
228
 
229
+ <details>
230
+ <summary><strong>Data, voice, and adaptation status</strong></summary>
231
+
232
+ 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.
233
 
234
+ 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`](docs/DATA_AND_VOICE.md) and [`docs/FINETUNING.md`](docs/FINETUNING.md).
235
 
236
+ </details>
237
 
238
+ ## Package map
239
 
240
  | Path | Purpose |
241
  | --- | --- |
242
  | `model.pth` | Inference-only generator checkpoint |
243
+ | `config.json` | Architecture and audio configuration; also the Hub download-count query file |
244
  | `inference.py` | Public Python API and CLI |
245
+ | `inflect_vits_frontend.py` | English normalization, phonemization, and punctuation frontend |
246
+ | `runtime/` | Self-contained model implementation |
247
  | `samples/` | Held-out example generations |
248
+ | `evaluation/final/` | Frozen benchmark prompts, reports, and protocol artifacts |
249
+ | `docs/` | API, deployment, evaluation, data, and adaptation documentation |
250
+ | `release_manifest.json` | File sizes and SHA-256 hashes |
251
 
252
  ## Limitations
253
 
254
+ - English only, with one fixed male voice. This is not zero-shot voice cloning.
255
+ - Unfamiliar phrasing can become flatter, less expressive, or less stable.
256
+ - Numbers, abbreviations, homographs, and uncommon names remain frontend- and context-sensitive.
257
+ - Long passages use punctuation-aware chunking; transitions can differ from a native long-form model pass.
258
+ - Stochastic variation can alter timing and pronunciation. Fix the seed for comparisons.
259
+ - UTMOS22 and ASR scores do not replace controlled human MOS or MUSHRA-style evaluation.
260
  - Not validated for medical, legal, emergency, or accessibility-critical communication.
261
 
262
+ ## Responsible use
263
 
264
+ 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.
265
 
266
+ ## License, integrity, and attribution
267
 
268
+ Original Inflect code and weights are released under Apache-2.0. Bundled third-party components retain their own notices in [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md). `release_manifest.json` records packaged file sizes and SHA-256 hashes.
269
 
270
  ## Citation
271
 
 
277
  url = {https://huggingface.co/owensong/Inflect-Micro-v2}
278
  }
279
  ```
280
+
281
+ <p align="center"><sub>Developed independently by Owen Song. Inflect v2 is an open-weight release: inference code and deployable weights are public; the private training recipe and corpus-generation pipeline are not.</sub></p>
THIRD_PARTY_NOTICES.md CHANGED
@@ -24,3 +24,13 @@ VITS. The text frontend also retains its original Keith Ito MIT license at
24
 
25
  The lightweight alias-free waveform activation implementation derives from
26
  BigVGAN's alias-free design and was adapted for this compact runtime.
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  The lightweight alias-free waveform activation implementation derives from
26
  BigVGAN's alias-free design and was adapted for this compact runtime.
27
+
28
+ ## alias-free-torch
29
+
30
+ - Project: `alias-free-torch` (`junjun3518/alias-free-torch`)
31
+ - License: Apache License 2.0
32
+ - Packaged license: `third_party/ALIAS_FREE_TORCH_LICENSE.txt`
33
+
34
+ The anti-aliased activation resampling design used by the compact waveform
35
+ runtime includes concepts and adapted implementation structure from
36
+ `alias-free-torch`.
assets/evidence/asr-robustness.svg DELETED
assets/evidence/category-semantic-wer.svg DELETED
assets/evidence/cpu-throughput.svg DELETED
assets/evidence/model-footprint.svg CHANGED
assets/evidence/quality-vs-cpu-speed.svg DELETED
assets/evidence/quality-vs-footprint.svg CHANGED
assets/evidence/semantic-wer.svg DELETED
docs/API.md CHANGED
@@ -1,23 +1,98 @@
1
- # Python API
2
-
3
- ## `InflectTTS(model_dir, device="cpu")`
4
-
5
- Loads one released checkpoint and its configuration. Construct the engine once and reuse it for multiple utterances.
6
-
7
- ## `synthesize(text, *, speed=1.0, variation=0.667, seed=0)`
8
-
9
- Returns a mono `numpy.float32` waveform at 24 kHz. Empty text raises `ValueError`. `speed` must be between `0.5` and `2.0`; `variation` must be between `0.0` and `1.0`. Long input is split at punctuation-aware boundaries, and each chunk uses `seed + chunk_index`.
10
-
11
- ## `save(text, output, **kwargs)`
12
-
13
- Synthesizes and writes a WAV file, creating parent directories as needed. It returns the output `Path`.
14
-
15
- ```python
16
- from inference import InflectTTS
17
-
18
- tts = InflectTTS(".", device="cpu")
19
- waveform = tts.synthesize("A compact model can still speak clearly.", seed=7)
20
- tts.save("This is written directly to disk.", "out.wav", seed=7)
21
- ```
22
-
23
- The API is intentionally small. It does not expose speaker cloning, streaming state, SSML, or language switching in the v2 launch package.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python API
2
+
3
+ ## Load once
4
+
5
+ ```python
6
+ from inference import InflectTTS
7
+
8
+ tts = InflectTTS(model_dir=".", device="cpu")
9
+ ```
10
+
11
+ `model_dir` must contain `model.pth`, `config.json`, the public frontend, and
12
+ `runtime/`. `device` accepts a PyTorch device string such as `cpu`, `cuda`, or
13
+ `cuda:0`. Loading validates the release architecture and raises
14
+ `FileNotFoundError` for missing artifacts or `RuntimeError` for an incompatible
15
+ checkpoint.
16
+
17
+ Keep one engine alive for repeated requests. Constructing an engine reloads the
18
+ checkpoint and should not happen per utterance.
19
+
20
+ ## `synthesize`
21
+
22
+ ```python
23
+ sample_rate, waveform = tts.synthesize(
24
+ "A compact model can still speak clearly.",
25
+ speed=1.0,
26
+ variation=0.667,
27
+ seed=7,
28
+ )
29
+ ```
30
+
31
+ Signature:
32
+
33
+ ```python
34
+ synthesize(text, *, speed=1.0, variation=0.667, seed=0)
35
+ ```
36
+
37
+ Returns `(sample_rate, waveform)`:
38
+
39
+ - `sample_rate`: integer `24000`, in samples per second.
40
+ - `waveform`: one-dimensional, mono `numpy.ndarray` with `float32` samples
41
+ clipped to `[-1.0, 1.0]`.
42
+
43
+ Validation:
44
+
45
+ - empty or whitespace-only text raises `ValueError`;
46
+ - `speed` must be in `0.5–2.0`;
47
+ - `variation` must be in `0.0–1.0`;
48
+ - `seed` is converted to an integer.
49
+
50
+ `seed` repeats the same stochastic sample on the same model/runtime stack.
51
+ Cross-version or cross-device bit identity is not guaranteed.
52
+
53
+ ## `save`
54
+
55
+ ```python
56
+ output = tts.save(
57
+ "This is written directly to disk.",
58
+ "outputs/out.wav",
59
+ seed=7,
60
+ )
61
+ ```
62
+
63
+ `save(text, output, **synthesis_options)` creates parent directories, writes a
64
+ mono 24 kHz PCM WAV, and returns the output `Path`.
65
+
66
+ ## Long text
67
+
68
+ Long input is normalized, split first at sentence punctuation and then at safe
69
+ intra-sentence boundaries. Each chunk is generated independently with
70
+ `seed + chunk_index`, edge-faded, and joined with punctuation-dependent silence.
71
+ This bounds memory, but it is not one globally planned long-form prosody pass.
72
+
73
+ ## Concurrency
74
+
75
+ One `InflectTTS` instance mutates random-number state during synthesis. Serialize
76
+ requests to one instance. For concurrent serving, use a worker pool with one
77
+ engine per worker/device and enforce an application-level queue.
78
+
79
+ ## CLI
80
+
81
+ ```bash
82
+ python inference.py \
83
+ --model-dir . \
84
+ --device cpu \
85
+ --text "Inflect is running locally." \
86
+ --output out.wav \
87
+ --speed 1.0 \
88
+ --variation 0.667 \
89
+ --seed 7
90
+ ```
91
+
92
+ Run `python inference.py --help` for the authoritative flag list.
93
+
94
+ ## Deliberate omissions
95
+
96
+ The v2 API does not expose speaker cloning, streaming state, SSML, native pitch
97
+ control, or language switching. Pitch-shifting generated audio is
98
+ post-processing and is not part of the model contract.
docs/DATA_AND_VOICE.md ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Data and voice
2
+
3
+ ## Release scope
4
+
5
+ Inflect v2 is a fixed-voice English text-to-speech release. It is not a
6
+ zero-shot voice-cloning model and does not accept reference audio at inference.
7
+
8
+ ## Training-data summary
9
+
10
+ The release model was trained on a single-speaker synthetic English speech
11
+ corpus generated with a larger third-party text-to-speech teacher. The private
12
+ corpus-construction and optimization recipe is not distributed. The inference
13
+ package does not ship or call the teacher model.
14
+
15
+ The corpus was filtered for transcript consistency, duration, clipping, and
16
+ other audio-quality failures before model training. Frozen unseen-text prompts
17
+ were excluded from training and are included with the final evaluation
18
+ artifacts.
19
+
20
+ ## Voice status
21
+
22
+ The packaged voice is a synthetic model voice. This repository does not
23
+ redistribute a real-speaker recording corpus and does not claim that the output
24
+ is the identity of a real person. Users must not present generated speech as a
25
+ real person's recording.
26
+
27
+ ## Expected biases
28
+
29
+ - English normalization and phonemization are optimized for general North
30
+ American English.
31
+ - Proper names, uncommon locations, abbreviations, homographs, and code-switched
32
+ text may be mispronounced.
33
+ - Synthetic teacher data can transfer its rhythm, prosody, spectral traits, and
34
+ pronunciation biases to the student.
35
+ - The single-speaker design does not represent demographic or accent diversity.
36
+
37
+ ## What is not disclosed
38
+
39
+ The private corpus prompts, teacher configuration, sampling curriculum,
40
+ filtering thresholds, and optimization schedule are not part of this open-weight
41
+ release. Their absence does not change the deployable parameter count: all
42
+ inference-time components and weights are included.
docs/DEPLOYMENT.md CHANGED
@@ -1,8 +1,41 @@
1
- # Deployment notes
2
-
3
- ## Installation
4
-
5
- Use Python 3.10 or newer in a clean virtual environment, install `requirements.txt`, then run `inference.py` from the model repository. The package is tested with PyTorch CPU and CUDA execution; device-specific performance depends on the local PyTorch build.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  ## Reproducibility
8
 
@@ -12,13 +45,25 @@ Keep the checkpoint, `config.json`, frontend files, and `runtime/` directory tog
12
 
13
  The runtime splits long text at sentence punctuation and then at safe intra-sentence boundaries. Chunks are synthesized independently and joined with punctuation-dependent silence. This prevents unbounded inference but means a long paragraph is not one globally planned prosody pass.
14
 
15
- ## Production boundaries
16
 
17
  - Instantiate `InflectTTS` once and reuse it; loading per request wastes time.
18
  - Serialize calls to one model instance unless the surrounding application explicitly manages device memory and random seeds.
19
  - Validate empty or untrusted input before synthesis.
20
  - Set a fixed seed for deterministic caching and tests.
21
- - Measure on the actual target device before claiming real-time operation.
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
  ## Troubleshooting
24
 
@@ -26,4 +71,4 @@ The runtime splits long text at sentence punctuation and then at safe intra-sent
26
  - Unexpected pronunciation: spell out ambiguous abbreviations or add context; the release frontend is English-only.
27
  - Flat or unstable delivery: keep `variation` near the default before changing speed.
28
  - Long pauses: inspect source punctuation because chunk boundaries intentionally follow punctuation.
29
- - Slow first request: model loading is measured separately from warm synthesis and should not happen per utterance.
 
1
+ # Deployment
2
+
3
+ ## Verified release environment
4
+
5
+ The final package was validated on Windows x86-64 with Python 3.11,
6
+ PyTorch 2.10, CPU inference, and CUDA inference. The runtime is ordinary
7
+ PyTorch and is expected to work on modern Linux x86-64, but that combination is
8
+ not yet part of the signed release matrix. Treat Python 3.11 as the reference
9
+ environment rather than interpreting flexible requirements as proof of every
10
+ possible version.
11
+
12
+ Install the CPU or CUDA PyTorch wheel for the target first, then install either:
13
+
14
+ ```bash
15
+ python -m pip install -r requirements.txt
16
+ ```
17
+
18
+ or the exact validation set:
19
+
20
+ ```bash
21
+ python -m pip install -r requirements-tested.txt
22
+ ```
23
+
24
+ The PyTorch build suffix remains platform-specific and is intentionally not
25
+ forced by the tested requirements file.
26
+
27
+ ## Revision-pinned download
28
+
29
+ ```python
30
+ from huggingface_hub import snapshot_download
31
+
32
+ model_dir = snapshot_download(
33
+ "owensong/Inflect-Micro-v2",
34
+ revision="<release-commit-sha>",
35
+ )
36
+ ```
37
+
38
+ Replace the placeholder with the final immutable Hub revision after launch.
39
 
40
  ## Reproducibility
41
 
 
45
 
46
  The runtime splits long text at sentence punctuation and then at safe intra-sentence boundaries. Chunks are synthesized independently and joined with punctuation-dependent silence. This prevents unbounded inference but means a long paragraph is not one globally planned prosody pass.
47
 
48
+ ## Production boundaries
49
 
50
  - Instantiate `InflectTTS` once and reuse it; loading per request wastes time.
51
  - Serialize calls to one model instance unless the surrounding application explicitly manages device memory and random seeds.
52
  - Validate empty or untrusted input before synthesis.
53
  - Set a fixed seed for deterministic caching and tests.
54
+ - Measure on the actual target device before claiming real-time operation.
55
+ - Apply an explicit CPU thread policy in production rather than inheriting all
56
+ visible host cores.
57
+
58
+ ## Capacity planning
59
+
60
+ - The FP32 checkpoint is 37.53 MB for Micro and 15.97 MB for Nano.
61
+ - Peak RAM and VRAM depend on PyTorch, allocator state, input length, and device.
62
+ Measure the deployed process rather than estimating memory from weight size.
63
+ - The reference runtime is non-streaming: the full chunk is returned after
64
+ synthesis.
65
+ - One model instance should process one request at a time unless the application
66
+ owns synchronization and random seed isolation.
67
 
68
  ## Troubleshooting
69
 
 
71
  - Unexpected pronunciation: spell out ambiguous abbreviations or add context; the release frontend is English-only.
72
  - Flat or unstable delivery: keep `variation` near the default before changing speed.
73
  - Long pauses: inspect source punctuation because chunk boundaries intentionally follow punctuation.
74
+ - Slow first request: model loading is measured separately from warm synthesis and should not happen per utterance.
docs/EVALUATION.md CHANGED
@@ -23,9 +23,20 @@ Semantic WER is run independently with Qwen3-ASR-1.7B, Nemotron 3.5 ASR 0.6B, an
23
 
24
  UTMOS22 is run over every generated clip with 10,000-sample bootstrap intervals. It is a learned quality predictor, not human MOS, and is reported separately from WER and human preference.
25
 
26
- ## Runtime
27
-
28
- Runtime reports use one named host, the same 50-prompt subset, warm end-to-end synthesis, one isolated process per system, each public runtime's default thread/provider behavior, and separate model-load timing. RTF, audio-seconds per wall-second, median latency, p95 latency, and per-prompt rows are retained. Cross-machine numbers are not mixed.
 
 
 
 
 
 
 
 
 
 
 
29
 
30
  ## Human evidence
31
 
 
23
 
24
  UTMOS22 is run over every generated clip with 10,000-sample bootstrap intervals. It is a learned quality predictor, not human MOS, and is reported separately from WER and human preference.
25
 
26
+ ## Runtime
27
+
28
+ The retained launch snapshot uses one named host, the same 50-prompt subset,
29
+ warm synthesis, one isolated process per system, runtime-default thread
30
+ behavior, and separate model-load timing. RTF, audio-seconds per wall-second,
31
+ median latency, p95 latency, and per-prompt rows are retained.
32
+
33
+ This snapshot is explicitly **host-specific engineering evidence**, not a
34
+ controlled cross-framework CPU leaderboard. The host exposed 192 logical CPUs,
35
+ thread counts were not pinned, and framework endpoints differed. The model card
36
+ therefore explains Inflect's own RTF but does not use the old competitor runtime
37
+ chart as headline evidence. A publication-grade rerun requires fixed affinity
38
+ and thread counts, active-provider capture, equivalent waveform endpoints,
39
+ multiple randomized trials, and confidence intervals.
40
 
41
  ## Human evidence
42
 
docs/FINETUNING.md CHANGED
@@ -1,4 +1,4 @@
1
- # Fine-tuning and adaptation status
2
 
3
  `Inflect-Micro-v2` is an open-weight, inference-first release. The repository does not ship the private corpus-construction recipe, teacher setup, discriminator checkpoints, optimizer state, or a supported training command.
4
 
@@ -7,14 +7,16 @@
7
  - Local inference from the released generator checkpoint.
8
  - Deterministic regression testing through a fixed text, seed, speed, and variation value.
9
  - Inspection of the complete deployable architecture and frontend.
10
- - Research adaptation in a separate VITS-compatible training environment, at the user's own risk.
 
11
 
12
  ## What is not yet supported
13
 
14
  - A one-command new-voice trainer.
15
  - Zero-shot voice cloning or speaker embeddings.
16
  - Language adaptation without rebuilding the symbol inventory and frontend.
17
- - Resuming the release checkpoint as if it contained discriminators or optimizer state.
 
18
 
19
  ## Data contract for future adapters
20
 
@@ -24,4 +26,9 @@ A defensible voice-adaptation toolkit must require a UTF-8 manifest with one aud
24
 
25
  Any adapted checkpoint should be compared with the frozen release on identical unseen prompts, a fixed seed policy, semantic WER, signal diagnostics, a learned quality predictor, and a blinded human listening test. Improving speaker similarity while reducing intelligibility is not a successful adaptation.
26
 
27
- This file intentionally does not pretend that an unvalidated training recipe is a supported feature. A public adapter will be documented separately if it passes the same package and evaluation gates as the release models.
 
 
 
 
 
 
1
+ # Adaptation status
2
 
3
  `Inflect-Micro-v2` is an open-weight, inference-first release. The repository does not ship the private corpus-construction recipe, teacher setup, discriminator checkpoints, optimizer state, or a supported training command.
4
 
 
7
  - Local inference from the released generator checkpoint.
8
  - Deterministic regression testing through a fixed text, seed, speed, and variation value.
9
  - Inspection of the complete deployable architecture and frontend.
10
+ - Inspection of the released generator as a starting point for independent
11
+ research in a separately reconstructed VITS-compatible training stack.
12
 
13
  ## What is not yet supported
14
 
15
  - A one-command new-voice trainer.
16
  - Zero-shot voice cloning or speaker embeddings.
17
  - Language adaptation without rebuilding the symbol inventory and frontend.
18
+ - Resuming the release checkpoint as if it contained discriminators or optimizer state.
19
+ - Adding a selectable second speaker to this single-speaker architecture.
20
 
21
  ## Data contract for future adapters
22
 
 
26
 
27
  Any adapted checkpoint should be compared with the frozen release on identical unseen prompts, a fixed seed policy, semantic WER, signal diagnostics, a learned quality predictor, and a blinded human listening test. Improving speaker similarity while reducing intelligibility is not a successful adaptation.
28
 
29
+ The released checkpoint may be technically reusable inside a reconstructed
30
+ training system, but new-voice and new-language adaptation have not been
31
+ validated. This file intentionally does not turn theoretical compatibility into
32
+ a supported feature. A public adapter will be documented separately only if it
33
+ can reproduce a usable checkpoint from a clean environment and pass the same
34
+ package and evaluation gates as the release models.
evaluation/final/{runtime → runtime_snapshot}/inflect-micro-v2_cpu.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/inflect-micro-v2_cuda.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/inflect-nano-v2_cpu.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/inflect-nano-v2_cuda.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/kitten-nano-bruno_cpu.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/kitten-nano-hugo_cpu.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/piper-danny-low_cpu.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/piper-ryan-low_cpu.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/supertonic3-james-3step_cpu.json RENAMED
File without changes
evaluation/final/{runtime → runtime_snapshot}/supertonic3-james-8step_cpu.json RENAMED
File without changes
evaluation/final/{raw/utmos22 → utmos22}/report.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/asr_combined/report.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/combined_manifest_validation.json RENAMED
File without changes
evaluation/{final → legacy/release500}/evidence-summary.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/prompt_report.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/prompts.jsonl RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/signal_diagnostics/per_clip.csv RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/signal_diagnostics/report.json RENAMED
File without changes
evaluation/legacy/release500/utmos22/report.json ADDED
The diff for this file is too large to render. See raw diff
 
evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/hypotheses_wav2vec2-large-lv60k-960h.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/report.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/rows.csv RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/whisper_large_v3/hypotheses_whisper-large-v3.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/whisper_large_v3/report.json RENAMED
File without changes
evaluation/{final/raw → legacy/release500}/whisper_large_v3/rows.csv RENAMED
File without changes
release_manifest.json CHANGED
@@ -7,21 +7,6 @@
7
  "smoke_audio_seconds": 3.968,
8
  "standalone_cpu_smoke_audio_seconds": 3.616,
9
  "files": [
10
- {
11
- "path": "assets/evidence/asr-robustness.svg",
12
- "bytes": 4638,
13
- "sha256": "3b2bdb670e95fd0f1899600f5456676ba3a1ed826066d12cb83474a24119fe88"
14
- },
15
- {
16
- "path": "assets/evidence/category-semantic-wer.svg",
17
- "bytes": 6123,
18
- "sha256": "1a2218e0bbe726167a5b0201736a82947edbd7c6803df3f5689e7a711026758e"
19
- },
20
- {
21
- "path": "assets/evidence/cpu-throughput.svg",
22
- "bytes": 3612,
23
- "sha256": "9628985af7ec40d05db1e32e4c00a209ae8e44abab7e5f76fbd4ddc5bec7a6a9"
24
- },
25
  {
26
  "path": "assets/evidence/evidence-summary.json",
27
  "bytes": 52605,
@@ -34,28 +19,18 @@
34
  },
35
  {
36
  "path": "assets/evidence/model-footprint.svg",
37
- "bytes": 3051,
38
- "sha256": "83624b63bc7af81aa5b166a3a79a65c288314aaf9127be9010571116bc40bcf7"
39
  },
40
  {
41
  "path": "assets/evidence/modern400-three-asr.svg",
42
  "bytes": 13700,
43
  "sha256": "1f519806caedda4490b85a3bdac1e943766196622603220193a18b0572518b22"
44
  },
45
- {
46
- "path": "assets/evidence/quality-vs-cpu-speed.svg",
47
- "bytes": 4390,
48
- "sha256": "0482dddf453c849ff3587f3a1d70f247a26011cfe570ecd179397067674b9837"
49
- },
50
  {
51
  "path": "assets/evidence/quality-vs-footprint.svg",
52
- "bytes": 5054,
53
- "sha256": "84ea1c4ff315854bfcb11790cd0204901a2991e6a7277e8a4faafb859b022a12"
54
- },
55
- {
56
- "path": "assets/evidence/semantic-wer.svg",
57
- "bytes": 4693,
58
- "sha256": "0188c4ec4d244a9b90448da90d90c20f82ae09d0739cc593b8bb5bca04609bc9"
59
  },
60
  {
61
  "path": "assets/inflect-v2-repository-hero.png",
@@ -79,28 +54,28 @@
79
  },
80
  {
81
  "path": "docs/API.md",
82
- "bytes": 1031,
83
- "sha256": "e1047734797798eac06f94c7f6c87dec424cf675fd0dc1dc2e396547c2405c93"
 
 
 
 
 
84
  },
85
  {
86
  "path": "docs/DEPLOYMENT.md",
87
- "bytes": 1883,
88
- "sha256": "028d23cfcd6b474c3fee7318ccaf990bf153ba2060f6048918de2b6f870b98c1"
89
  },
90
  {
91
  "path": "docs/EVALUATION.md",
92
- "bytes": 2826,
93
- "sha256": "32678834f86d540000ec9509f5c252beac30f313a19ffa0bfd5e3aaefa476a6d"
94
  },
95
  {
96
  "path": "docs/FINETUNING.md",
97
- "bytes": 1923,
98
- "sha256": "c9bc195dae24d4326d9f7738acc8727bb73d0efee7880a4b200ac1ba82689f65"
99
- },
100
- {
101
- "path": "evaluation/final/evidence-summary.json",
102
- "bytes": 52605,
103
- "sha256": "51797abe973df6a68962dac3dbff729706acd333e08c90e382910b6b6a85018e"
104
  },
105
  {
106
  "path": "evaluation/final/modern400/combined_manifest_validation.json",
@@ -128,120 +103,130 @@
128
  "sha256": "0dd338b3b3bf66908681777a43e8e755087135eb1c006ddc99b8aecbcf004f8b"
129
  },
130
  {
131
- "path": "evaluation/final/raw/asr_combined/report.json",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  "bytes": 8810759,
133
  "sha256": "5ebacbe622cb0dccf278fe401f8e739b75e2ebf3025eb159b1224c315c1a1571"
134
  },
135
  {
136
- "path": "evaluation/final/raw/combined_manifest_validation.json",
137
  "bytes": 762,
138
  "sha256": "6e01c0a4973c979dc0ac92caa01b4d3928f16f7be1dd4cd5c1c652a6613a3872"
139
  },
140
  {
141
- "path": "evaluation/final/raw/prompt_report.json",
 
 
 
 
 
142
  "bytes": 867,
143
  "sha256": "bec272d41da5c2d27ba1249f9321dbc9af588ea053efa2a94ca79f91ac265263"
144
  },
145
  {
146
- "path": "evaluation/final/raw/prompts.jsonl",
147
  "bytes": 75177,
148
  "sha256": "467245f6c03221e63ca0c4ed6d7c938a69efa38d9a03dd4f7dc62644523cd342"
149
  },
150
  {
151
- "path": "evaluation/final/raw/signal_diagnostics/per_clip.csv",
152
  "bytes": 1949804,
153
  "sha256": "b82b853b63af8e80a0d237c967075977c74f47ead2dfa3f8bb222a7f22403e83"
154
  },
155
  {
156
- "path": "evaluation/final/raw/signal_diagnostics/report.json",
157
  "bytes": 456895,
158
  "sha256": "d29f875fdf413b259e7e504dd2f4c35ecf85176b2cf186f3f49f1e49ebb0f0c9"
159
  },
160
  {
161
- "path": "evaluation/final/raw/utmos22/report.json",
162
  "bytes": 761778,
163
  "sha256": "ecac4dc3847da14ec56d6822480036f45cea49399875a4efdaf968fd2a258fac"
164
  },
165
  {
166
- "path": "evaluation/final/raw/wav2vec2_large_lv60k_960h/hypotheses_wav2vec2-large-lv60k-960h.json",
167
  "bytes": 234660,
168
  "sha256": "1610687af59ec452dbcb59031f874f50cb3cbf5f69d06cff44ad030e2ff42969"
169
  },
170
  {
171
- "path": "evaluation/final/raw/wav2vec2_large_lv60k_960h/report.json",
172
  "bytes": 4036222,
173
  "sha256": "11d0e28482a1293c33e7f2cff5a70d4587b8214ae14709e85b6e064c9a0c312f"
174
  },
175
  {
176
- "path": "evaluation/final/raw/wav2vec2_large_lv60k_960h/rows.csv",
177
  "bytes": 1032392,
178
  "sha256": "719d1477b78ecc67ec5b98a6d7b5bc60be68d16f1952ea144fc4821018802fac"
179
  },
180
  {
181
- "path": "evaluation/final/raw/whisper_large_v3/hypotheses_whisper-large-v3.json",
182
  "bytes": 500178,
183
  "sha256": "dc90651ab76f771a030f4fa28e105d42692b05fe35e2f14c68aa14aa4735c08a"
184
  },
185
  {
186
- "path": "evaluation/final/raw/whisper_large_v3/report.json",
187
  "bytes": 4776290,
188
  "sha256": "14fb31cafef64a9f28222cfb2c53d708112312142de96fe09d2423cfd7362a0c"
189
  },
190
  {
191
- "path": "evaluation/final/raw/whisper_large_v3/rows.csv",
192
  "bytes": 1261719,
193
  "sha256": "76d586a85f7f4c6651a70eb83d49ef90c31e7a1f6b4ba200d55296fc898c3de9"
194
  },
195
- {
196
- "path": "evaluation/final/runtime/inflect-micro-v2_cpu.json",
197
- "bytes": 11741,
198
- "sha256": "9c5bf61b71ffefba9e35cf2d3b6ed445d15be8a95e6dc5629d0555bff20e3d8e"
199
- },
200
- {
201
- "path": "evaluation/final/runtime/inflect-micro-v2_cuda.json",
202
- "bytes": 11876,
203
- "sha256": "bd42a1fbed748b99036eb500e4c11766cfe14db91269816fa91547b9eb1b4b19"
204
- },
205
- {
206
- "path": "evaluation/final/runtime/inflect-nano-v2_cpu.json",
207
- "bytes": 11676,
208
- "sha256": "ad45de5b45a478da98cbbaafebedfc8568ccafbc7ff6fcdd35e4f65a6191778f"
209
- },
210
- {
211
- "path": "evaluation/final/runtime/inflect-nano-v2_cuda.json",
212
- "bytes": 11835,
213
- "sha256": "fc3666aff4b29e2dcda75e58792a8de3887f312909dfe2a8b856191fbfb280cb"
214
- },
215
- {
216
- "path": "evaluation/final/runtime/kitten-nano-bruno_cpu.json",
217
- "bytes": 11915,
218
- "sha256": "c8932d2f11b63c7f4e002fed2775ac70d3b0b2f323f811330a181cb854dc25ff"
219
- },
220
- {
221
- "path": "evaluation/final/runtime/kitten-nano-hugo_cpu.json",
222
- "bytes": 11914,
223
- "sha256": "a65be2e9b3620ec436eff45a548008a0e8a22fab28f208316c295ff471c421a5"
224
- },
225
- {
226
- "path": "evaluation/final/runtime/piper-danny-low_cpu.json",
227
- "bytes": 11320,
228
- "sha256": "fa21a8f76ee193390a1e0bb25ed409ae2771c19ec4e874e53517c567bc2015a0"
229
- },
230
- {
231
- "path": "evaluation/final/runtime/piper-ryan-low_cpu.json",
232
- "bytes": 11316,
233
- "sha256": "09627a21f90d93b2c46ead64c2ecced59e5dce0727bb6c6d1c13baa653fed13b"
234
- },
235
- {
236
- "path": "evaluation/final/runtime/supertonic3-james-3step_cpu.json",
237
- "bytes": 12005,
238
- "sha256": "60c2928dd5baab704fd8f3d56dabc59a257681fb2ee3718e0d28a9d1266d0163"
239
- },
240
- {
241
- "path": "evaluation/final/runtime/supertonic3-james-8step_cpu.json",
242
- "bytes": 11971,
243
- "sha256": "f62ce39eef361aa5394bcd6083332c4c43189804eae86fe2a91b58de58b07993"
244
- },
245
  {
246
  "path": "examples/basic.py",
247
  "bytes": 352,
@@ -284,13 +269,18 @@
284
  },
285
  {
286
  "path": "README.md",
287
- "bytes": 11325,
288
- "sha256": "74f7b95e9ae230e15286aee2af6a7b64744b8acf9e839b61ecf9a4315cc9b04c"
 
 
 
 
 
289
  },
290
  {
291
  "path": "requirements.txt",
292
- "bytes": 128,
293
- "sha256": "51778f4f55911af92747707c7d1e61191f7af5381efea9b71cf5a1abb2efcb03"
294
  },
295
  {
296
  "path": "runtime/attentions.py",
@@ -377,6 +367,11 @@
377
  "bytes": 192556,
378
  "sha256": "2b59ad3d449c22b851d4a5f882f7a5e9d3413d0bc1e1037aa3374a3470c91114"
379
  },
 
 
 
 
 
380
  {
381
  "path": "third_party/BIGVGAN_LICENSE.txt",
382
  "bytes": 1097,
@@ -389,8 +384,8 @@
389
  },
390
  {
391
  "path": "THIRD_PARTY_NOTICES.md",
392
- "bytes": 892,
393
- "sha256": "ef5343cd39713d313aefcfd09bb55fd6606ae2dacabeee13e0abdaa2e5b62589"
394
  }
395
  ],
396
  "format": "inflect_v2_release_manifest_v1"
 
7
  "smoke_audio_seconds": 3.968,
8
  "standalone_cpu_smoke_audio_seconds": 3.616,
9
  "files": [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  {
11
  "path": "assets/evidence/evidence-summary.json",
12
  "bytes": 52605,
 
19
  },
20
  {
21
  "path": "assets/evidence/model-footprint.svg",
22
+ "bytes": 2667,
23
+ "sha256": "10118b49c79f4054588d6ed79faa4d67f35d4e8f57fba6217ff20a94d0cc83b3"
24
  },
25
  {
26
  "path": "assets/evidence/modern400-three-asr.svg",
27
  "bytes": 13700,
28
  "sha256": "1f519806caedda4490b85a3bdac1e943766196622603220193a18b0572518b22"
29
  },
 
 
 
 
 
30
  {
31
  "path": "assets/evidence/quality-vs-footprint.svg",
32
+ "bytes": 4039,
33
+ "sha256": "fa5905b9709ec8644b5876bbf5ae2c5f9e24548532d65d1bdcaefaa0f22d8b0f"
 
 
 
 
 
34
  },
35
  {
36
  "path": "assets/inflect-v2-repository-hero.png",
 
54
  },
55
  {
56
  "path": "docs/API.md",
57
+ "bytes": 2632,
58
+ "sha256": "1103418ce10351c0f58722d8139e9fdf3837a68a82ce2b4d9adb6b870eb2a9c3"
59
+ },
60
+ {
61
+ "path": "docs/DATA_AND_VOICE.md",
62
+ "bytes": 1739,
63
+ "sha256": "8a504473b8377493256d435124851479ebee7f74432671ed0e0dff4e4509d8ba"
64
  },
65
  {
66
  "path": "docs/DEPLOYMENT.md",
67
+ "bytes": 3208,
68
+ "sha256": "c66a4633757402a6f065435b6ac1f3ce7a41f2c8061771522ba435a947c2e2af"
69
  },
70
  {
71
  "path": "docs/EVALUATION.md",
72
+ "bytes": 3288,
73
+ "sha256": "44ec8605f4981557a97ef41fc1b9105c5a96145ffef2b59b646ac001bdffc1a5"
74
  },
75
  {
76
  "path": "docs/FINETUNING.md",
77
+ "bytes": 2241,
78
+ "sha256": "82c122acde5b6f7bcb675f16ec5ed573809137daf7ab9f8c970132837fdf60ba"
 
 
 
 
 
79
  },
80
  {
81
  "path": "evaluation/final/modern400/combined_manifest_validation.json",
 
103
  "sha256": "0dd338b3b3bf66908681777a43e8e755087135eb1c006ddc99b8aecbcf004f8b"
104
  },
105
  {
106
+ "path": "evaluation/final/runtime_snapshot/inflect-micro-v2_cpu.json",
107
+ "bytes": 11741,
108
+ "sha256": "9c5bf61b71ffefba9e35cf2d3b6ed445d15be8a95e6dc5629d0555bff20e3d8e"
109
+ },
110
+ {
111
+ "path": "evaluation/final/runtime_snapshot/inflect-micro-v2_cuda.json",
112
+ "bytes": 11876,
113
+ "sha256": "bd42a1fbed748b99036eb500e4c11766cfe14db91269816fa91547b9eb1b4b19"
114
+ },
115
+ {
116
+ "path": "evaluation/final/runtime_snapshot/inflect-nano-v2_cpu.json",
117
+ "bytes": 11676,
118
+ "sha256": "ad45de5b45a478da98cbbaafebedfc8568ccafbc7ff6fcdd35e4f65a6191778f"
119
+ },
120
+ {
121
+ "path": "evaluation/final/runtime_snapshot/inflect-nano-v2_cuda.json",
122
+ "bytes": 11835,
123
+ "sha256": "fc3666aff4b29e2dcda75e58792a8de3887f312909dfe2a8b856191fbfb280cb"
124
+ },
125
+ {
126
+ "path": "evaluation/final/runtime_snapshot/kitten-nano-bruno_cpu.json",
127
+ "bytes": 11915,
128
+ "sha256": "c8932d2f11b63c7f4e002fed2775ac70d3b0b2f323f811330a181cb854dc25ff"
129
+ },
130
+ {
131
+ "path": "evaluation/final/runtime_snapshot/kitten-nano-hugo_cpu.json",
132
+ "bytes": 11914,
133
+ "sha256": "a65be2e9b3620ec436eff45a548008a0e8a22fab28f208316c295ff471c421a5"
134
+ },
135
+ {
136
+ "path": "evaluation/final/runtime_snapshot/piper-danny-low_cpu.json",
137
+ "bytes": 11320,
138
+ "sha256": "fa21a8f76ee193390a1e0bb25ed409ae2771c19ec4e874e53517c567bc2015a0"
139
+ },
140
+ {
141
+ "path": "evaluation/final/runtime_snapshot/piper-ryan-low_cpu.json",
142
+ "bytes": 11316,
143
+ "sha256": "09627a21f90d93b2c46ead64c2ecced59e5dce0727bb6c6d1c13baa653fed13b"
144
+ },
145
+ {
146
+ "path": "evaluation/final/runtime_snapshot/supertonic3-james-3step_cpu.json",
147
+ "bytes": 12005,
148
+ "sha256": "60c2928dd5baab704fd8f3d56dabc59a257681fb2ee3718e0d28a9d1266d0163"
149
+ },
150
+ {
151
+ "path": "evaluation/final/runtime_snapshot/supertonic3-james-8step_cpu.json",
152
+ "bytes": 11971,
153
+ "sha256": "f62ce39eef361aa5394bcd6083332c4c43189804eae86fe2a91b58de58b07993"
154
+ },
155
+ {
156
+ "path": "evaluation/final/utmos22/report.json",
157
+ "bytes": 761778,
158
+ "sha256": "ecac4dc3847da14ec56d6822480036f45cea49399875a4efdaf968fd2a258fac"
159
+ },
160
+ {
161
+ "path": "evaluation/legacy/release500/asr_combined/report.json",
162
  "bytes": 8810759,
163
  "sha256": "5ebacbe622cb0dccf278fe401f8e739b75e2ebf3025eb159b1224c315c1a1571"
164
  },
165
  {
166
+ "path": "evaluation/legacy/release500/combined_manifest_validation.json",
167
  "bytes": 762,
168
  "sha256": "6e01c0a4973c979dc0ac92caa01b4d3928f16f7be1dd4cd5c1c652a6613a3872"
169
  },
170
  {
171
+ "path": "evaluation/legacy/release500/evidence-summary.json",
172
+ "bytes": 52605,
173
+ "sha256": "51797abe973df6a68962dac3dbff729706acd333e08c90e382910b6b6a85018e"
174
+ },
175
+ {
176
+ "path": "evaluation/legacy/release500/prompt_report.json",
177
  "bytes": 867,
178
  "sha256": "bec272d41da5c2d27ba1249f9321dbc9af588ea053efa2a94ca79f91ac265263"
179
  },
180
  {
181
+ "path": "evaluation/legacy/release500/prompts.jsonl",
182
  "bytes": 75177,
183
  "sha256": "467245f6c03221e63ca0c4ed6d7c938a69efa38d9a03dd4f7dc62644523cd342"
184
  },
185
  {
186
+ "path": "evaluation/legacy/release500/signal_diagnostics/per_clip.csv",
187
  "bytes": 1949804,
188
  "sha256": "b82b853b63af8e80a0d237c967075977c74f47ead2dfa3f8bb222a7f22403e83"
189
  },
190
  {
191
+ "path": "evaluation/legacy/release500/signal_diagnostics/report.json",
192
  "bytes": 456895,
193
  "sha256": "d29f875fdf413b259e7e504dd2f4c35ecf85176b2cf186f3f49f1e49ebb0f0c9"
194
  },
195
  {
196
+ "path": "evaluation/legacy/release500/utmos22/report.json",
197
  "bytes": 761778,
198
  "sha256": "ecac4dc3847da14ec56d6822480036f45cea49399875a4efdaf968fd2a258fac"
199
  },
200
  {
201
+ "path": "evaluation/legacy/release500/wav2vec2_large_lv60k_960h/hypotheses_wav2vec2-large-lv60k-960h.json",
202
  "bytes": 234660,
203
  "sha256": "1610687af59ec452dbcb59031f874f50cb3cbf5f69d06cff44ad030e2ff42969"
204
  },
205
  {
206
+ "path": "evaluation/legacy/release500/wav2vec2_large_lv60k_960h/report.json",
207
  "bytes": 4036222,
208
  "sha256": "11d0e28482a1293c33e7f2cff5a70d4587b8214ae14709e85b6e064c9a0c312f"
209
  },
210
  {
211
+ "path": "evaluation/legacy/release500/wav2vec2_large_lv60k_960h/rows.csv",
212
  "bytes": 1032392,
213
  "sha256": "719d1477b78ecc67ec5b98a6d7b5bc60be68d16f1952ea144fc4821018802fac"
214
  },
215
  {
216
+ "path": "evaluation/legacy/release500/whisper_large_v3/hypotheses_whisper-large-v3.json",
217
  "bytes": 500178,
218
  "sha256": "dc90651ab76f771a030f4fa28e105d42692b05fe35e2f14c68aa14aa4735c08a"
219
  },
220
  {
221
+ "path": "evaluation/legacy/release500/whisper_large_v3/report.json",
222
  "bytes": 4776290,
223
  "sha256": "14fb31cafef64a9f28222cfb2c53d708112312142de96fe09d2423cfd7362a0c"
224
  },
225
  {
226
+ "path": "evaluation/legacy/release500/whisper_large_v3/rows.csv",
227
  "bytes": 1261719,
228
  "sha256": "76d586a85f7f4c6651a70eb83d49ef90c31e7a1f6b4ba200d55296fc898c3de9"
229
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  {
231
  "path": "examples/basic.py",
232
  "bytes": 352,
 
269
  },
270
  {
271
  "path": "README.md",
272
+ "bytes": 15293,
273
+ "sha256": "40a99e317b0efa8c35335f3b6448e8163b985b96647364a43198d6fe928563ef"
274
+ },
275
+ {
276
+ "path": "requirements-tested.txt",
277
+ "bytes": 306,
278
+ "sha256": "0e2580f1bd5ae75d37405addec35bca789c01b19f7ef75a03a061eb35bc23c7d"
279
  },
280
  {
281
  "path": "requirements.txt",
282
+ "bytes": 150,
283
+ "sha256": "03d9af55e5beceee330a9d906c1e3ad2907552bbe0a4d21b7f47e0c7bb95cccd"
284
  },
285
  {
286
  "path": "runtime/attentions.py",
 
367
  "bytes": 192556,
368
  "sha256": "2b59ad3d449c22b851d4a5f882f7a5e9d3413d0bc1e1037aa3374a3470c91114"
369
  },
370
+ {
371
+ "path": "third_party/ALIAS_FREE_TORCH_LICENSE.txt",
372
+ "bytes": 11357,
373
+ "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4"
374
+ },
375
  {
376
  "path": "third_party/BIGVGAN_LICENSE.txt",
377
  "bytes": 1097,
 
384
  },
385
  {
386
  "path": "THIRD_PARTY_NOTICES.md",
387
+ "bytes": 1233,
388
+ "sha256": "2ead63b7d9cddd6c1d12a96d88de0ade6fd3eabd1278825c0a3a2c1d3647ab4b"
389
  }
390
  ],
391
  "format": "inflect_v2_release_manifest_v1"
requirements-tested.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Exact package versions used for the final local release validation.
2
+ # Install the CPU or CUDA PyTorch wheel appropriate for your platform first.
3
+ torch==2.10.0
4
+ numpy==2.3.5
5
+ scipy==1.16.3
6
+ soundfile==0.13.1
7
+ phonemizer==3.3.0
8
+ espeakng-loader==0.2.4
9
+ num2words==0.5.14
10
+ Unidecode==1.4.0
11
+ huggingface-hub==0.36.2
requirements.txt CHANGED
@@ -1,4 +1,5 @@
1
  torch>=2.6
 
2
  numpy>=1.26,<3
3
  scipy>=1.13
4
  soundfile>=0.13
 
1
  torch>=2.6
2
+ huggingface-hub>=0.36
3
  numpy>=1.26,<3
4
  scipy>=1.13
5
  soundfile>=0.13
third_party/ALIAS_FREE_TORCH_LICENSE.txt ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.