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

W=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 ♡