Build log · 28 July 2026
This morning a 37-megabyte text-to-speech model crossed our radar: Inflect-Micro-v2, nine million parameters, faster than real-time on a plain CPU. It ships with one fixed voice, no trainer, and a note that says custom voices are "research use." By tonight it speaks with ours. Meet Scrappy.
Measured on our own hardware, because model cards that only brag are ads.
You can't clone a voice into this model — there's no cloning interface. But you can distill one: have a big TTS voice you like read a few thousand sentences, then teach the tiny model to imitate it. The beautiful part: because you wrote the sentences, every transcript is perfect by construction. No transcription step, no labeling budget. We rendered ~4,400 clips — about five and a half hours of 24kHz audio — from a commercial cloud narrator voice.
The three voices that came after didn't need a vendor at all. They were described, not recorded. One sentence — “a deep, authoritative older male narrator, gravelly texture, slow and weighty, movie-trailer gravitas” — went into a voice-design model on our own hardware, and what came back was Silas. Clara and Pip arrived the same way, each from a single sentence. That description is the entire origin of the voice; everything after it is the same distill.
Before training, every clip went through a gate: speech recognition transcribes it back, and if the audio doesn't say what the script says, it dies. Boring, right?
Several clips came back from the cloud API containing a spoken watermark — audio announcing the vendor's product name instead of our sentence. Clean waveform, right duration, perfectly wrong words. A dozen of those baked into a nine-million-parameter model would have been a permanent speech impediment.
If you take one thing from this page: gate synthetic training data with ASR round-trips. It's the only check that catches audio that says the wrong thing perfectly.
Same corpus, same config, same 50,000 steps — two different machines, timed.
The rental started four hours behind and finished two hours ahead, for roughly the cost of a sandwich. The laptop spent the afternoon at 98% GPU with the fans screaming. Verdict: laptops are for pilots; rent the training runs. Your hardware — and your lap — will thank you.
The voice's identity — timbre, warmth, the basic read — transferred remarkably well. What a 9M model can't fully hold is the teacher's timing: the dramatic pause, the phrase-level planning. The organ responsible for timing in this architecture is the size of a walnut. Scrappy reads a little flatter than his teacher, and we're telling you that up front.
Everything is Apache-2.0 — weights, samples, and the fine-tuning stack the original release doesn't ship. CPU is all you need.
# get it (weights included — ~40MB)
git clone https://github.com/scrappylabsai/scrappy-voice-1
cd scrappy-voice-1
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# say something
python inference.py --model-dir . --device cpu \
--text "Hello World. I'm Scrappy." --output hello.wav
Or from Python:
from inference import InflectTTS
tts = InflectTTS(model_dir=".", device="cpu")
tts.save("Write numbers as words for best results.", "out.wav", seed=7)
Knobs: --speed 0.5–2.0, --variation 0.0–1.0 (lower =
steadier, higher = livelier), --seed for reproducible takes. English only, one
voice — his. Want a different voice in there? The trainer/ directory in the
repo is the fine-tuning stack we had to build: corpus prep with phoneme validation, the full
warm-start training loop, and candidate export. Bring ~1–5 hours of clean single-speaker
audio with verified transcripts, and gate it like we told you.
One voice proved the pipeline. So we ran it three more times — and then did the thing the architecture was quietly built for: trained all four into a single checkpoint. Each voice is one embedding row, which means four voices cost one model, and the space between any two of them is a real place you can stand.
All four clips above came out of the same 41MB file, on a CPU. The pleasant surprise: pooling four voices' data made the shared model better than the single-voice runs, not worse — the four voices landed at roughly the quality of our best solo run instead of paying for the company.
The demo runs on our own hardware. Drag the blend slider and you are interpolating between two speaker embeddings live — near the ends it sounds like a person, and the deep middle gets strange, because only the four anchors were ever trained. Everything between them is the model improvising.
A model landed in the morning. By midnight the licence was read, the missing trainer was rebuilt, the data was gated, the GPUs were raced, and the result was published open — with the failure modes documented. We do this daily to stay honest about what's actually possible.
The live demo was built by the Hugging Face open-source team on free ZeroGPU infrastructure — the ecosystem giving back to the give-back, one day after release.
Base model: owensong/Inflect-Micro-v2 (Apache-2.0) — credit where due: an unusually honest release. Training audio synthesized throughout: Scrappy from a commercial cloud narrator voice, and Clara, Silas and Pip from written descriptions via a voice-design model on our own hardware (synthetic personas; no real person's voice was cloned). Figures measured on our own runs.