Stage verified Inflect v2 release candidate and evaluation evidence
Browse files- README.md +186 -133
- THIRD_PARTY_NOTICES.md +10 -0
- assets/evidence/asr-robustness.svg +0 -65
- assets/evidence/category-semantic-wer.svg +0 -94
- assets/evidence/cpu-throughput.svg +0 -51
- assets/evidence/model-footprint.svg +19 -25
- assets/evidence/quality-vs-cpu-speed.svg +0 -55
- assets/evidence/quality-vs-footprint.svg +23 -37
- assets/evidence/semantic-wer.svg +0 -63
- docs/API.md +98 -23
- docs/DATA_AND_VOICE.md +42 -0
- docs/DEPLOYMENT.md +53 -8
- docs/EVALUATION.md +14 -3
- docs/FINETUNING.md +11 -4
- evaluation/final/{runtime → runtime_snapshot}/inflect-micro-v2_cpu.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/inflect-micro-v2_cuda.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/inflect-nano-v2_cpu.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/inflect-nano-v2_cuda.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/kitten-nano-bruno_cpu.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/kitten-nano-hugo_cpu.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/piper-danny-low_cpu.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/piper-ryan-low_cpu.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/supertonic3-james-3step_cpu.json +0 -0
- evaluation/final/{runtime → runtime_snapshot}/supertonic3-james-8step_cpu.json +0 -0
- evaluation/final/{raw/utmos22 → utmos22}/report.json +0 -0
- evaluation/{final/raw → legacy/release500}/asr_combined/report.json +0 -0
- evaluation/{final/raw → legacy/release500}/combined_manifest_validation.json +0 -0
- evaluation/{final → legacy/release500}/evidence-summary.json +0 -0
- evaluation/{final/raw → legacy/release500}/prompt_report.json +0 -0
- evaluation/{final/raw → legacy/release500}/prompts.jsonl +0 -0
- evaluation/{final/raw → legacy/release500}/signal_diagnostics/per_clip.csv +0 -0
- evaluation/{final/raw → legacy/release500}/signal_diagnostics/report.json +0 -0
- evaluation/legacy/release500/utmos22/report.json +0 -0
- evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/hypotheses_wav2vec2-large-lv60k-960h.json +0 -0
- evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/report.json +0 -0
- evaluation/{final/raw → legacy/release500}/wav2vec2_large_lv60k_960h/rows.csv +0 -0
- evaluation/{final/raw → legacy/release500}/whisper_large_v3/hypotheses_whisper-large-v3.json +0 -0
- evaluation/{final/raw → legacy/release500}/whisper_large_v3/report.json +0 -0
- evaluation/{final/raw → legacy/release500}/whisper_large_v3/rows.csv +0 -0
- release_manifest.json +106 -111
- requirements-tested.txt +11 -0
- requirements.txt +1 -0
- 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 |
-
|
|
|
|
| 15 |
---
|
| 16 |
|
| 17 |

|
| 18 |
|
| 19 |
<h1 align="center">Inflect-Micro-v2</h1>
|
| 20 |
-
<p align="center"><strong>Complete local
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
|
| 23 |
-
|
| 24 |
|
| 25 |
-
## Listen
|
| 26 |
|
| 27 |
-
|
| 28 |
|
| 29 |
-
|
|
| 30 |
-
| --- | --- |
|
| 31 |
-
| Conversational | <audio controls preload="
|
| 32 |
-
| Punctuation | <audio controls preload="
|
| 33 |
-
| Numbers | <audio controls preload="
|
| 34 |
-
| Names and places | <audio controls preload="
|
| 35 |
-
| Technical | <audio controls preload="
|
| 36 |
|
| 37 |
-
##
|
| 38 |
|
| 39 |
-
| | Inflect-Micro-v2 |
|
| 40 |
-
| --- | ---: |
|
| 41 |
-
| Complete
|
| 42 |
-
| FP32
|
| 43 |
-
|
|
| 44 |
-
|
|
| 45 |
-
|
|
| 46 |
-
|
|
| 47 |
-
| Long text | **Punctuation-aware chunking** |
|
| 48 |
|
| 49 |
-
|
| 50 |
|
| 51 |
-
#
|
| 52 |
|
| 53 |
-
|
| 54 |
|
| 55 |
-
|
| 56 |
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
-
###
|
| 60 |
|
| 61 |
-
|
|
|
|
| 62 |
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
|
| 67 |
-
###
|
| 68 |
|
| 69 |
-
|
|
|
|
|
|
|
| 70 |
|
| 71 |
-
|
|
|
|
| 72 |
|
| 73 |
-
|
| 74 |
|
| 75 |
-
|
|
|
|
|
|
|
| 76 |
|
| 77 |
-
|
| 78 |
|
| 79 |
-
|
| 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 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
-
|
| 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 |
-
|
| 109 |
|
| 110 |
-
|
| 111 |
|
| 112 |
-
|
| 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 |
-
|
| 122 |
-
import sys
|
| 123 |
-
from huggingface_hub import snapshot_download
|
| 124 |
|
| 125 |
-
|
| 126 |
-
sys.path.insert(0, model_dir)
|
| 127 |
-
from inference import InflectTTS
|
| 128 |
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
|
| 139 |
-
|
| 140 |
|
| 141 |
-
###
|
| 142 |
|
| 143 |
-
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
|
| 151 |
-
|
| 152 |
|
| 153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 154 |
|
| 155 |
-
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 162 |
| --- | ---: |
|
| 163 |
| Latent channels | 192 |
|
| 164 |
| Text hidden channels | 96 |
|
| 165 |
-
|
|
| 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
|
| 173 |
|
| 174 |
-
|
| 175 |
|
| 176 |
-
|
|
|
|
| 177 |
|
| 178 |
-
|
|
| 179 |
-
| ---
|
| 180 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 181 |
|
| 182 |
-
|
|
|
|
|
|
|
|
|
|
| 183 |
|
| 184 |
-
|
| 185 |
|
| 186 |
-
|
| 187 |
|
| 188 |
-
##
|
| 189 |
|
| 190 |
| Path | Purpose |
|
| 191 |
| --- | --- |
|
| 192 |
| `model.pth` | Inference-only generator checkpoint |
|
| 193 |
-
| `config.json` |
|
| 194 |
| `inference.py` | Public Python API and CLI |
|
| 195 |
-
| `inflect_vits_frontend.py` |
|
| 196 |
-
| `runtime/` | Self-contained model implementation
|
| 197 |
| `samples/` | Held-out example generations |
|
| 198 |
-
| `evaluation/final/` |
|
| 199 |
-
| `
|
|
|
|
| 200 |
|
| 201 |
## Limitations
|
| 202 |
|
| 203 |
-
- English only
|
| 204 |
-
- Unfamiliar phrasing can become flatter or less
|
| 205 |
-
- Numbers, abbreviations, homographs, and uncommon names
|
| 206 |
-
- Long passages
|
| 207 |
-
- Stochastic variation can
|
| 208 |
-
-
|
| 209 |
- Not validated for medical, legal, emergency, or accessibility-critical communication.
|
| 210 |
|
| 211 |
-
## Responsible
|
| 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 |
-
##
|
| 216 |
|
| 217 |
-
|
| 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 |

|
| 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 |
+

|
|
|
|
|
|
|
| 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 |
+

|
| 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 |
+

|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
##
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|
| 2 |
-
|
| 3 |
-
##
|
| 4 |
-
|
| 5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
#
|
| 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 |
-
-
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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":
|
| 38 |
-
"sha256": "
|
| 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":
|
| 53 |
-
"sha256": "
|
| 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":
|
| 83 |
-
"sha256": "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
},
|
| 85 |
{
|
| 86 |
"path": "docs/DEPLOYMENT.md",
|
| 87 |
-
"bytes":
|
| 88 |
-
"sha256": "
|
| 89 |
},
|
| 90 |
{
|
| 91 |
"path": "docs/EVALUATION.md",
|
| 92 |
-
"bytes":
|
| 93 |
-
"sha256": "
|
| 94 |
},
|
| 95 |
{
|
| 96 |
"path": "docs/FINETUNING.md",
|
| 97 |
-
"bytes":
|
| 98 |
-
"sha256": "
|
| 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/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
"bytes": 8810759,
|
| 133 |
"sha256": "5ebacbe622cb0dccf278fe401f8e739b75e2ebf3025eb159b1224c315c1a1571"
|
| 134 |
},
|
| 135 |
{
|
| 136 |
-
"path": "evaluation/
|
| 137 |
"bytes": 762,
|
| 138 |
"sha256": "6e01c0a4973c979dc0ac92caa01b4d3928f16f7be1dd4cd5c1c652a6613a3872"
|
| 139 |
},
|
| 140 |
{
|
| 141 |
-
"path": "evaluation/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
"bytes": 867,
|
| 143 |
"sha256": "bec272d41da5c2d27ba1249f9321dbc9af588ea053efa2a94ca79f91ac265263"
|
| 144 |
},
|
| 145 |
{
|
| 146 |
-
"path": "evaluation/
|
| 147 |
"bytes": 75177,
|
| 148 |
"sha256": "467245f6c03221e63ca0c4ed6d7c938a69efa38d9a03dd4f7dc62644523cd342"
|
| 149 |
},
|
| 150 |
{
|
| 151 |
-
"path": "evaluation/
|
| 152 |
"bytes": 1949804,
|
| 153 |
"sha256": "b82b853b63af8e80a0d237c967075977c74f47ead2dfa3f8bb222a7f22403e83"
|
| 154 |
},
|
| 155 |
{
|
| 156 |
-
"path": "evaluation/
|
| 157 |
"bytes": 456895,
|
| 158 |
"sha256": "d29f875fdf413b259e7e504dd2f4c35ecf85176b2cf186f3f49f1e49ebb0f0c9"
|
| 159 |
},
|
| 160 |
{
|
| 161 |
-
"path": "evaluation/
|
| 162 |
"bytes": 761778,
|
| 163 |
"sha256": "ecac4dc3847da14ec56d6822480036f45cea49399875a4efdaf968fd2a258fac"
|
| 164 |
},
|
| 165 |
{
|
| 166 |
-
"path": "evaluation/
|
| 167 |
"bytes": 234660,
|
| 168 |
"sha256": "1610687af59ec452dbcb59031f874f50cb3cbf5f69d06cff44ad030e2ff42969"
|
| 169 |
},
|
| 170 |
{
|
| 171 |
-
"path": "evaluation/
|
| 172 |
"bytes": 4036222,
|
| 173 |
"sha256": "11d0e28482a1293c33e7f2cff5a70d4587b8214ae14709e85b6e064c9a0c312f"
|
| 174 |
},
|
| 175 |
{
|
| 176 |
-
"path": "evaluation/
|
| 177 |
"bytes": 1032392,
|
| 178 |
"sha256": "719d1477b78ecc67ec5b98a6d7b5bc60be68d16f1952ea144fc4821018802fac"
|
| 179 |
},
|
| 180 |
{
|
| 181 |
-
"path": "evaluation/
|
| 182 |
"bytes": 500178,
|
| 183 |
"sha256": "dc90651ab76f771a030f4fa28e105d42692b05fe35e2f14c68aa14aa4735c08a"
|
| 184 |
},
|
| 185 |
{
|
| 186 |
-
"path": "evaluation/
|
| 187 |
"bytes": 4776290,
|
| 188 |
"sha256": "14fb31cafef64a9f28222cfb2c53d708112312142de96fe09d2423cfd7362a0c"
|
| 189 |
},
|
| 190 |
{
|
| 191 |
-
"path": "evaluation/
|
| 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":
|
| 288 |
-
"sha256": "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 289 |
},
|
| 290 |
{
|
| 291 |
"path": "requirements.txt",
|
| 292 |
-
"bytes":
|
| 293 |
-
"sha256": "
|
| 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":
|
| 393 |
-
"sha256": "
|
| 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.
|