ribt saying โ€œHi, I'm right here. What do you need?โ€: its spectrogram after one step of flow, its pitch, and each word where the model says it

ribt

Real-time, In-Body Talk. A 54M-parameter English voice for robots that have to answer while you're still in the room. First audio 17.6 ms after the text arrives, 37ร— faster than real time, and the same compiled programs run on Metal, CUDA, OpenCL, C and WebGPU.

Try it in your browser โ†’  ยท  Code  ยท  Paper

Listen

Shipped defaults, seed 0, first take.

Hi, I'm right here. What do you need?
Ope, let me just grab that bag for you.
Your package ships on March 3rd, and it's $42.50.
Did you want the lights off, or just dimmed?
I'm a little warm after that walk, but give me a minute and I'll be ready to help with the dishes.

What it is

A conversation leaves a robot about 200 ms between your last word and its first sound, and speech recognition and the reply have to fit in that too. So ribt is built to make the first sample cheap, not just to be fast on average.

stage what it does params
lilt letters to phonemes: a Rust port of misaki (99.86% word parity, 274k words/s, streams word by word) tables
acoustic how long to hold each sound, where the pitch goes, and a rough 100-band spectrogram 18.65M
flow one step of flow matching that adds the detail a 16-step teacher would 21.88M
vocoder spectrogram to 24 kHz waveform (Vocos, imported into ribt's graph) 13.5M

Every network is a program in tang's tensor IR, trained in that IR with no PyTorch in the loop.

Files

file what sha256
acoustic.safetensors acoustic model, f32 23b98126a0b5a39180f7660ab95fa2fec6acbbbd8845ae6d3a9526d23cd508d6
norm.txt pitch and energy normalisation for the acoustic model 2caa07fe6ecbbfd256b56deba9959ff8cbddb3ee75ad0ffba71b89ceb840006d
flow.safetensors one-step flow student, f32 bf0fb3cd5ca4111ac5c197c6c4f402e5ae23a2a50eb4315d2332a7ca3ff47927
flow_norm.txt flow normalisation 5b50240542f6d61fd580a1ebde2011b2ed29551d5608f9d5310c23a2b165ea88
vocoder.safetensors Vocos 24 kHz, f32 a91e8da6dc6a93b40171657c857007d42f288f403b6039e400c3fb5f60206ad0
ref.wav speaker reference, 8.1 s 589471b3415cdfda6b82d7b780e5e39564a7ad90155cdee15674680bd039d867
web/ the browser build: WGSL plans per shape bucket and fp16 weights, checksums in web/manifest.json
release.toml every component, checksum, synthesis default and eval number

Use

git clone https://github.com/muni-works/ribt && cd ribt
cargo build --release        # Metal; CUDA, wgpu, OpenCL and CPU builds are 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. In the browser, web/build.sh in the repo turns these weights into the build that runs on ribt.dev.

Evaluation

M4 Max, batch 1, warm, seed 0. Word error rate from Whisper small.en, naturalness from UTMOS (utmos22_strong), speaker similarity as WavLM-base-plus-SV cosine to 121 held-out af_heart clips.

ribt Kokoro af_heart
Time to first audio 17.6 ms (streaming) 349 ms (whole sentence, CPU)
Real-time factor 0.027 0.093
Naturalness, UTMOS 4.39 4.52
Word error rate, WER-50 2.71% 2.61%
Word error rate, held-out 50 1.73% 1.73%
Speaker similarity 0.987 0.990

Kokoro still sounds a little better, by about 0.13 UTMOS. The WebGPU build matches the native build on the same weights to within 6e-5 relative RMS.

Limitations

  • English (US) only, and one voice.
  • Naturalness trails its teacher. The paper reports the attempts to close the gap and where they stopped.
  • The browser build needs WebGPU and downloads about 140 MB the first time.

Where the voice comes from

ribt's voice is distilled from Kokoro-82M's af_heart voice (Apache-2.0). We rendered 135 hours of af_heart, from LibriTTS-R transcripts and templated conversational lines, and trained our own acoustic and flow models on them. No Kokoro weights are in ribt. Kokoro's own training data included synthetic audio from closed commercial TTS providers, so the voice inherits that lineage. The vocoder is Vocos by Hubert Siuzdak (MIT), trained on LibriTTS.

Cite

@misc{pedersen2026ribt,
  title  = {Real-time, In-Body Talk: a small streaming voice, trained in one tensor IR},
  author = {Pedersen, Cam},
  year   = {2026},
  howpublished = {Municipal Robotics},
  url    = {https://muni.works/research/ribt}
}

License

MIT. Vocos weights: MIT (Siuzdak 2023). Built by Municipal Robotics.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support