q-pocket-tts — Pocket TTS as a κ-object (real-time voice, in your browser, no server)
TTS by Kyutai. A 100M-parameter CPU text-to-speech model, re-hosted as a content-addressed κ-object for the Hologram serverless substrate so the Bonsai demo can speak its answers as it writes them — 100% in the browser, on the CPU, leaving the GPU to the mind.
This is the int8 ONNX decode graph (community export by
KevinAHM) plus one voice (alba, Kyutai's
default), run with onnxruntime-web 1.20.0 (WASM/SIMD). No account, no data leaves the device;
warm after one visit.
What's here
Each file is gzipped and stored as a content-addressed block b/sha256_<hex>.gz; the manifest lists
them. Every block is verified against its content address before it is decompressed (Law L5).
| role | file | what it is |
|---|---|---|
flow_lm_main |
flow_lm_main_int8.onnx | the streaming flow-LM backbone (autoregressive latents) |
flow_lm_flow |
flow_lm_flow_int8.onnx | the stateless flow-matching step |
text_conditioner |
text_conditioner_int8.onnx | text → conditioning embeddings |
mimi_decoder |
mimi_decoder_int8.onnx | Mimi codec decoder → 24 kHz PCM |
tokenizer |
tokenizer.model | SentencePiece tokenizer |
bos_before_voice |
bos_before_voice.npy | BOS conditioning prefix |
bundle |
bundle.json | runtime metadata (state manifests, sample rate) |
voice |
voice.alba.bin | ONE voice state (PTVB1, single voice) — extracted from the 8-voice voices.bin |
manifest.json (sha256 transport axis) + manifest.blake3.json + sha256-to-blake3.map.json
(canonical BLAKE3 κ axis). Any static host can serve this — the bytes carry identity, not the host.
Pins
- manifest κ (pin):
did:holo:sha256:fb8d982d3a37f845915358928f985b83339dd198b45b6f6a705bdc8145b1afd7 - root κ (over the sorted block set):
sha256:a4c11cfbef09c5b30dc97733c11ec21e2573c3adc467fcf4409c06b44d6f41d4 - voice:
alba· languageenglish_2026-04· 24 kHz · latent dim 32
Payload
131.7 MB raw → 75.7 MB stored (gzip), 8 blocks. Decode graph only — the voice-cloning encoder is omitted (a non-goal). One voice ships; swapping the voice is a one-file re-mint.
Measured (browser, 2026-07-16)
Chrome / WASM-SIMD, 24-core desktop: first sound 332 ms on a short clause single-threaded (1.07× realtime); 313 ms and 1.39× with threads (cross-origin isolation). Real speech, 24 kHz. Running concurrently with Bonsai-8B on WebGPU costs ~20% of decode throughput (CPU-orchestration, not GPU contention) — still real-time.
Provenance
- Model + voices: Kyutai Pocket TTS —
kyutai/pocket-tts(weights CC-BY-4.0), voices fromkyutai/tts-voices. - ONNX export:
KevinAHM/pocket-tts-onnx(export scripts Apache-2.0); upstream Pocket TTS code is MIT. - Runtime worker: adapted from the
KevinAHM/pocket-tts-webdemo space. - κ-mint:
holo-bonsai/mint-pocket-tts.mjs(gzip each opaque blob →sha256(gz)= block address; root = sha256 over the sortedname:kappaset) +forge/gen-blake3-manifest.mjs(BLAKE3 axis). No tensor re-layout — the ONNX graphs pass through byte-exact.
See LICENSE (CC-BY-4.0) and NOTICE.txt.
Model tree for HOLOGRAMTECH/q-pocket-tts
Base model
kyutai/pocket-tts