steer-tts / TEST_LOG.md
ksingla025's picture
SteerTTS v1 (9.6M acoustic model + Vocos; flow refiner, prompted-flow cloning, prompt adapter); CC BY-NC 4.0 weights, MIT code
e7f5286 verified
|
Raw History Blame Contribute Delete
3.81 kB
# Release verification log: steertts-v1
Date: 2026-10-11. Everything ran on the CPU (4 threads, `nice -n 19`) of a shared 48-core workstation, with a 1-min
load average of 20 to 40 from other jobs. The timings are lower bounds.
## Weights
| File | Source checkpoint | sha256 (first 16) |
|---|---|---|
| `model.safetensors` | acoustic model, step 312,500 | `adc11912871113e3` |
| `flow.safetensors` | flow refiner (EMA), step 100,000 | `585ff2c931811c30` |
| `pflow.safetensors` | prompted flow with prompt attention (EMA), step 40,000 | `877f81523dfaba50` |
| `prompt_adapter.safetensors` | free-text β†’ request adapter | `aca34bf753456e46` |
| `speaker_vectors.safetensors` | 2,825 built-in voices (public names only) | `edcabfd02dd4a520` |
These are the checkpoints behind the model card's numbers. The prompted flow is the one in the leaderboard cloning row
(1.01 % / 37.4 and 2.73 % / 28.7).
## 1. Fresh-environment install
- A new Python 3.11 venv (uv) with the CPU torch wheel. Then `pip install ".[test]"` from a copy of the package
code, holding no weights.
- Resolved versions: torch 2.11.0+cpu, torchaudio 2.11.0+cpu, numpy 2.4.6, safetensors 0.8.0, vocos 0.1.0,
g2p_en 2.1.0, nltk 3.10.3, num2words 0.5.14, soundfile 0.14.0, soxr 1.1.0, transformers 5.19.0,
praat-parselmouth 0.4.7, pytest 9.1.1, jsonschema 4.26.0.
- Not fresh: the Hugging Face hub cache and `~/nltk_data` came from the host. A first run on a new machine
downloads `charactr/vocos-mel-24khz`, plus `microsoft/wavlm-base-plus-sv` for cloning and
`sentence-transformers/all-MiniLM-L6-v2` for free-text prompts, and the NLTK tagger and CMUdict.
## 2. Test suite
`STEERTTS_MODEL=<this dir> pytest` from the fresh env gave **16 passed** in 6 min 11 s. The suite covers:
- the Mamba-3 invariant suite;
- text normalisation and phonemes;
- the request schema and its examples;
- request validation errors;
- deterministic renders, both acoustic-only and through the flow refiner;
- pace and rate;
- Praat readback direction for `loud`, `f0_med` and `h1h2`;
- markup and streaming;
- cloning;
- prompt β†’ request mapping.
## 3. Parity with the training code
The same inputs were rendered on the same device (CPU) by this package and by the training repository's
`steer.synth.Synth`, given the source checkpoints above. Every case was **bit-identical** (max |Ξ”| = 0):
| Case | Samples | Identical |
|---|---|---|
| default voice, acoustic only | 73,472 | yes |
| `ctrl` rate/f0_med/f0_end, acoustic only | 68,096 | yes |
| tag `sadness` + `loud` βˆ’1, guidance 1.5 | 85,760 | yes |
| `word_shift` (pitch/energy/dur on one word) | 37,376 | yes |
| another built-in voice, flow refiner | 73,216 | yes |
| `ctrl` loud/f0_iqr, flow refiner | 75,008 | yes |
| cloning from a reference clip, prompted flow | 51,456 | yes |
Cross-environment check: two renders (acoustic only, and flow + ctrl) were bit-identical between the fresh venv
(torch 2.11.0+cpu) and the training environment (torch 2.11.0+cu128, run on the CPU). GPU renders are deterministic
per device but are not bit-identical to CPU renders.
## 4. Speed on this package (CPU, 4 threads, load average about 22)
| Path | RTFx (3 texts, 1.7–5 s) |
|---|---|
| Acoustic model + Vocos (`flow=False`) | 4.35–5.59 (median 4.89) |
| + flow refiner (default) | 0.62–0.79 (median 0.71) |
| Streaming, first chunk (`flow=False`) | 0.49 s |
## 5. Hygiene
- No source-corpus speaker or clip identifiers appear in any file. The build fails on the pattern check in
`steer.release`, and the check was re-run here with grep.
- VoxCeleb-derived speakers are excluded from the voice list.
- The schema `$id` is a URN (`urn:steertts:request-schema:v1`), not a URL.
- `leaderboard/` names a placeholder Hugging Face repo id. It is not referenced by the package code.