gaurav-voice

Weights for a text-to-speech demo that runs entirely in a browser tab, with no server: https://gaurav.bar/things/storyteller

Two things live here.

1. A voice

onnx/english_2026-04/voices.bin is my own voice — Gaurav Singh — encoded once, offline, from about twenty seconds of me speaking. I am publishing it knowingly, so that the demo works for anyone who opens the page.

The file is not audio. It is the speech model's key–value cache after it has listened to that recording: 12,288 floats for every 80 ms, across six layers and sixteen attention heads. Encoding offline means the browser never needs the voice encoder (19.8 MB) or the gated cloning weights — it loads a state file, as the upstream built-in voices do.

If you use this voice, please say that it is synthetic. The demo page it was built for discloses that in its first sentence.

2. Redistributed model weights

flow_lm_*, mimi_decoder, text_conditioner, tokenizer.model and bos_before_voice.npy are the int8 ONNX exports of Pocket TTS (Kyutai, MIT), mirrored from KevinAHM/pocket-tts-onnx so one origin serves the whole demo.

mimi_encoder is deliberately not mirrored — it is only needed to encode a new voice, which this demo does not do.

Local change

bundle.json lists predefined_voices: ["gaurav"] rather than the upstream eight. The runtime defaults to alba whenever it sees that name in the list and then fails against a pack that does not contain it.

Layout

onnx/english_2026-04/
  flow_lm_main_int8.onnx        72.8 MB
  mimi_decoder_int8.onnx        21.6 MB
  text_conditioner_int8.onnx    15.6 MB
  flow_lm_flow_int8.onnx         9.5 MB
  voices.bin                    11.8 MB   <- the voice
  bundle.json, tokenizer.model, bos_before_voice.npy

About 133 MB in total, fetched once and then cached by the browser.

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