q-pocket-tts / README.md
Humuhumu33's picture
pocket-tts v1 kappa-object: 8 verified blocks (sha256+blake3 axes), voice=alba, manifest pin fb8d982d
f006339 verified
|
Raw
History Blame Contribute Delete
3.54 kB
---
license: cc-by-4.0
base_model: kyutai/pocket-tts
tags:
- text-to-speech
- tts
- onnx
- onnxruntime-web
- wasm
- serverless
- content-addressed
- hologram
- kappa
---
# q-pocket-tts — Pocket TTS as a κ-object (real-time voice, in your browser, no server)
**TTS by [Kyutai](https://huggingface.co/kyutai/pocket-tts).** A 100M-parameter CPU text-to-speech
model, re-hosted as a **content-addressed κ-object** for the
[Hologram](https://github.com/Hologram-Technologies) 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](https://huggingface.co/KevinAHM/pocket-tts-onnx)) 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` · language `english_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 from
`kyutai/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-web` demo space.
- κ-mint: `holo-bonsai/mint-pocket-tts.mjs` (gzip each opaque blob → `sha256(gz)` = block address;
root = sha256 over the sorted `name:kappa` set) + `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`.