Few days back I shared SteerTTS v1, a small English TTS you steer with numbers (https://huggingface.co/WhissleAI/steer-tts). Today I am sharing the edge variant
Size: everything an app has to ship (weights, voices, text front end and Python runtime) totals 11.84 MB.
How:
- Acoustic model (9.25M params, attention + bidirectional Mamba-3) is quantization-aware trained to int4
- 6.2M-param Vocos-style vocoder is distilled from
charactr/vocos-mel-24khz, also int4 QAT
- Text front end is pure numpy, with no NLTK, g2p_en, torchaudio or num2words at runtime
Quality (Open TTS Leaderboard protocol, run locally, not an official submission):
| Seed-TTS WER / UTMOS |
CV3-Eval WER / UTMOS |
| v1 fp32 (no refiner) |
0.96% / 4.20 |
| edge |
0.96% / 4.11 |
Intelligibility is essentially unchanged. UTMOS drops about 0.1, almost all of it from the small int4 vocoder.
Steering survives quantization. Every one of the 12 controls (rate, loudness, pitch, pitch range, final rise, pauses, tilt, breathiness, and more) keeps at least 95% of its fp32 effect. You also get 50 style tags and inline markup:
Well, *that* was fast. [pause 400ms] <slow>Let me think.</slow> <whisper>Don't tell anyone.</whisper>
Speed (CPU only, a 2018 Threadripper under load): RTF 0.053 with 4 threads (~19x realtime), ~120 ms to first audio, with sentence-level streaming.
Bash
pip install .
steertts-edge "Hello there, nice to meet you." -o hello.wav
Limitations:
- English only, and 200 voices (a subset of the full model’s 2,825)
- No voice cloning, free-text prompts or flow refiner on device. Those stay in the full model.
- Weights are dequantized to fp32 at load, so the win is size, not speed. Unless we write new kernels for edge devices.
- Emotion tags are mostly style switches, and
fast/anger are weak
I need feedback, especially on the vocoder quality gap and any edge targets you’d like to see (ONNX, mobile, WASM).
Model card:
https://huggingface.co/WhissleAI/steer-tts-edge
Some examples here:
https://whissleai.github.io/steer-tts/