RIBT Opens 17.6 ms Streaming English TTS

Introduction
ribt (Real-time, In-Body Talk) shipped today from Municipal Robotics: open weights on municipal-robotics/ribt (created 2026-11-05 ~15:21 UTC), code on github.com/muni-works/ribt (repo created the same hour), and a no-server browser build at ribt.dev.
It is generative English text-to-speech aimed at robots that must answer inside a ~200 ms conversation gap — not another Whisper fine-tune.
What Shipped
- Vendor / product: Municipal Robotics — ribt
- Modality: open-weight streaming text-to-speech (US English, one voice)
- Open vs closed: MIT weights + Rust/tang graph; Vocos vocoder also MIT
- Runnable today:
cargo build+ HF download, or open ribt.dev (WebGPU, ~140 MB first download) - Concrete fact: 54M parameters total; 17.6 ms time to first audio (streaming); real-time factor 0.027 (~37× faster than realtime) on M4 Max batch-1; one-step flow student vs a 16-step teacher
Pipeline stages (all programs in tang’s tensor IR — no PyTorch in the training loop):
- lilt — Rust misaki-parity G2P (99.86% word parity, ~274k words/s)
- acoustic — 18.65M: durations, pitch, rough 100-band spectrogram
- flow — 21.88M: one-step flow-matching detail
- vocoder — 13.5M Vocos → 24 kHz waveform
Same compiled programs lower to Metal, CUDA, wgpu, OpenCL, C, and WebGPU. The browser build matches native RMS within 6e-5 on the same weights.
Run It
Browser path (fastest smoke test): open ribt.dev on a WebGPU browser.
Native path:
git clone https://github.com/muni-works/ribt && cd ribt
cargo build --release # Metal default; CUDA/wgpu/OpenCL/CPU flags in the repo README
hf download municipal-robotics/ribt --local-dir ribt-weightsW=ribt-weights
target/release/ribt-tts synth --run $W --ckpt acoustic.safetensors \
--flow $W/flow.safetensors --nfe 1 --shortcut --temp 0.3 \
--voc $W/vocoder.safetensors --ref $W/ref.wav \
--seed 0 --pitch 1 --accent minnesota \
--text "Hi, I'm right here. What do you need?" --out-dir out/Use stream instead of synth for chunked playback. Knobs include --pitch, --rate, and --accent neutral|midwest|minnesota. Local browser build: web/build.sh ribt-weights then serve web/.
HF files to pull: acoustic.safetensors, flow.safetensors, vocoder.safetensors, norms, ref.wav, plus the web/ WGSL/fp16 pack.
Notes for makers
- Voice is distilled from Kokoro-82M’s
af_heart(Apache-2.0 teacher lineage) over ~135 hours of rendered speech — no Kokoro weights ship inside ribt - Eval vs Kokoro
af_heart(M4 Max, Whisper small.en WER, UTMOS): TTFA 17.6 ms vs 349 ms; UTMOS 4.39 vs 4.52; held-out WER 1.73% tied; speaker similarity 0.987 vs 0.990 - English (US) only, single voice — naturalness still trails the teacher by ~0.13 UTMOS
- Paper write-up: muni.works/research/ribt
- No Gen CTA: streaming edge TTS does not map to the Flux / Grok / MiniMax-H3 / Seedream / Seedance Gen loop
Conclusion
If you need a conversation-budget English voice that starts speaking before the gap feels awkward — and you want MIT weights that run from Metal robots to a WebGPU tab — ribt is today’s zero-day: 54M, 17.6 ms first audio, paste-ready cargo + HF path.
—Anabel ♡
