{"slug": "pocket-tts-guide-voice-cloning-in-your-browser", "title": "Pocket TTS Guide: Voice Cloning in Your Browser", "summary": "Kyutai's 100M-parameter Pocket TTS text-to-speech model now runs entirely in the browser via OfflineTTS, enabling voice cloning through microphone recording or audio upload of up to 10 seconds, with 8 built-in voices, streaming playback, and WAV/MP3 export. The model operates on-device using ONNX Runtime Web on WebAssembly, with text and reference audio staying local after assets load, and supports English, German, Italian, Portuguese, and Spanish. The architecture combines a SentencePiece tokenizer, latent autoregression, flow-matching refinement, and the Mimi audio codec to achieve roughly 6x real-time on an Apple M4.", "body_md": "[← Back to Blog](/blog/)\n\n# Pocket TTS Guide: Voice Cloning in Your Browser\n\n- pocket-tts\n- voice-cloning\n- tts\n- browser\n- offline\n- guide\n- kyutai\n\nSponsored\n\nAds help keep OfflineTTS free to use.\n\nPocket TTS is Kyutai’s **100M-parameter text-to-speech model built for CPUs**. Unlike cloud TTS APIs, the whole pipeline — tokenizer, text conditioning, latent autoregression, flow-matching refinement, and the Mimi audio codec — runs on your own hardware. OfflineTTS integrates it in the browser with **voice cloning by microphone recording or audio upload**, 8 built-in voices, streaming playback, and WAV/MP3 export.\n\n[Try Pocket TTS with voice cloning in OfflineTTS](/app/pocket/) — no account, no API key, no uploads to a synthesis server.\n\n## Quick Facts\n\n| Feature | Current status |\n|---|---|\n| Parameters | 100M |\n| Built-in voices | 8 presets (alba, azelma, cosette, eponine, fantine, javert, jean, marius) |\n| Voice cloning | Record with microphone, or upload up to 10s of audio |\n| Languages | 5 bundles: English, German, Italian, Portuguese, Spanish |\n| Browser runtime | ONNX Runtime Web on WebAssembly (WASM); WebGPU experimental via jax-js |\n| Output | 24kHz WAV and MP3 export, waveform playback |\n| Model download | ~146MB non-English, ~198MB English (incl. voices) |\n| Text privacy | Reference audio and text stay on-device after assets load |\n\n## What Makes Pocket TTS Different\n\nMost browser TTS models either run a single neural network end to end (Kokoro, Piper) or chain several ONNX graphs with a straightforward encoder-decoder structure (Supertonic). Pocket TTS is different under the hood:\n\n**Text conditioning.** A SentencePiece tokenizer feeds a conditioner that produces a 1024-dimension embedding sequence.**Latent autoregression.** A streaming transformer predicts one 32-dimension latent frame at a time, maintaining a KV cache across steps — the same streaming pattern used by large language models, but on audio latents.**Flow-matching refinement.** Each predicted latent is refined with a short LSD (Latent Score Distillation-style) flow-matching loop instead of a fixed decoder step, which is why the model stays small (100M parameters) while producing natural prosody.**Mimi audio codec.** The refined latents are decoded by Mimi into 24kHz waveforms in 1920-sample frames (80ms each), which is exactly why**streaming playback works**: the browser can play each 80ms frame as soon as it is generated instead of waiting for the whole file.\n\nThis architecture is why Pocket TTS stays usable on plain CPUs: the official tech report measures roughly 6x real-time on an Apple M4. In practice WASM speed still depends on the processor, browser, memory, and text length — measure on your intended device before planning long or batch work.\n\n## Voice Cloning: Record or Upload\n\nCloning is the headline feature, and the OfflineTTS integration supports **two input methods**:\n\n**Record your voice.** Click the microphone button, speak up to 10 seconds of clean audio, and stop. The clip is captured locally and processed immediately.**Upload an audio clip.** Use a WAV, MP3, or other browser-decodable file up to 10 seconds.\n\nEither way the flow is identical: the clip is downmixed to mono, resampled to 24kHz, and passed through the **mimi voice encoder**, which produces a speaker embedding. That embedding conditions the text-to-speech model so your next generation speaks in the cloned voice.\n\nAfter cloning, the reference clip appears in a **listen-and-compare panel** — play the reference, generate text, and A/B the result against the original to judge similarity before you export.\n\n### Getting a Good Clone\n\nCloning quality depends far more on the reference than on the settings:\n\n**Keep it short and clean.** 3–10 seconds of single-speaker audio with minimal background noise, reverb, or music gives the best results.**Use natural, expressive speech.** Flat or whispered references transfer flat or whispered delivery.**Avoid overlapping audio.** The encoder averages speaker characteristics; a reference with two speakers produces a blend, not either voice.**Test with your real script.** Names, numbers, and unusual words in the final text are the real test — a pleasant sample sentence proves nothing by itself.\n\n**Consent matters.** Only clone voices you have permission to use, disclose synthetic audio where platforms or law require it, and review the upstream model terms before commercial deployment. The 8 built-in voice names (alba, javert, etc.) are catalog labels from the model’s conditioning states — not verified identities of named people.\n\n## The 8 Built-in Voices\n\n| Voice | Suggested character | Notes |\n|---|---|---|\n| Alba | Warm, clear female | Default voice |\n| Azelma | Soft, calm female | Gentle narration |\n| Cosette | Bright, friendly female | Energetic reads |\n| Eponine | Expressive, young female | Character work |\n| Fantine | Gentle, emotional female | Softer delivery |\n| Javert | Deep, authoritative male | Formal narration |\n| Jean | Calm, warm male | Measured storytelling |\n| Marius | Youthful, energetic male | Upbeat content |\n\nTreat these as discovery labels, not a quality ranking. Compare the same passage in several voices before committing to one.\n\n## How Browser Inference Works on OfflineTTS\n\nThe OfflineTTS integration uses **ONNX Runtime Web on WebAssembly** for the default path:\n\n```\ntext → SentencePiece tokenizer → text conditioner\n     → streaming FlowLM (autoregressive latent frames + KV cache)\n     → flow-matching refinement (LSD step)\n     → Mimi decoder → 24kHz audio frames\nclone: reference audio → mimi encoder → speaker embedding → conditioning\n```\n\nGeneration is **streamed internally**: each 80ms audio frame is decoded as soon as the autoregressive loop produces it. The default playback mode buffers frames and plays the complete result through the shared waveform player; an experimental WebGPU path (jax-js) plays frames as they arrive for true real-time output on capable devices.\n\n### Backend choice\n\n**WASM (default)**— the proven ONNX path. Supports cloning (record + upload), all 5 languages, and works on any browser with WebAssembly.** WebGPU**— an experimental jax-js path with faster real-time streaming on Chrome/Edge with a GPU. Currently English-only with the 8 built-in voices; cloning on this path is not available yet.\n\nSwitch backends with the selector in the model status bar. Changing backends reloads the model on the next run.\n\n## Privacy and Caching\n\n**Text and reference audio stay on-device.** Neither your script nor your recorded/uploaded clip is sent to a synthesis API.**Model files come from Hugging Face.** The ONNX bundles, tokenizer, and built-in voice states are downloaded at runtime and cached in the browser’s IndexedDB. After the first load, later visits reuse the cache.**Site analytics remain separate network activity.** OfflineTTS uses standard analytics on all pages; the TTS page’s network boundary is documented in the[Privacy Policy](/privacy/).**Cloning is local.** The mimi encoder runs entirely in the browser — your reference audio never leaves the device.\n\n## Pocket TTS vs Kokoro, Piper, and Supertonic\n\n| Pocket TTS | Kokoro | Piper | Supertonic | |\n|---|---|---|---|---|\n| Parameters | 100M | 82M | ~22M | ~99M |\n| Voices | 8 + cloning | 54 | 25 | 10 |\n| Languages | 5 | 9 | 1 | 31 |\n| Voice cloning | Record or upload | Custom blend (experimental) | No | No |\n| Streaming playback | Yes (internal; WebGPU real-time) | No | No | No |\n| Download | ~146–198MB | ~305MB | ~75MB | ~150MB+ |\n| Runtime | WASM (+WebGPU exp.) | WebGPU/WASM | WASM | WebGPU/WASM |\n\n**Choose Pocket TTS when** you want to clone a voice (yours, or with consent, someone else’s) entirely in the browser, or when a compact CPU model with streaming output matters. Choose Supertonic for broader language coverage, Kokoro for the largest voice catalog, or Piper for the smallest CPU footprint.\n\n## Troubleshooting\n\n**“Custom voice is not available on the WebGPU path”**— switch the backend to WASM; cloning currently runs on the ONNX engine.** Cloned voice sounds off**— re-record with a cleaner, shorter, single-speaker reference; avoid music and background noise.** Model download is slow**— the first load fetches up to ~198MB. Later visits use the browser cache.** Generation is slow on an old laptop**— WebAssembly inference speed depends on the CPU. Try short sentences and measure before planning long or batch work.** Audio is truncated**— very long text is chunked; keep paragraphs short and well-punctuated so chunk boundaries land cleanly.\n\n## Reproducible Cloning Test\n\n- Record or upload a 5–10 second clean reference of the target voice.\n- Listen to the reference in the compare panel; note its pitch and pacing.\n- Generate a test sentence with names and numbers, e.g.\n*“Hi, I’m Alex. My number is 555-0142.”* - Compare the output with the reference; adjust the reference if similarity is poor.\n- Export WAV for further editing or MP3 for sharing, and keep the reference clip with the production file.\n\n## Start with a Real Workflow\n\nPocket TTS is a practical option whenever a consistent voice matters more than a huge catalog: personal narration, demo reels, game characters, accessibility prototypes, or voice-consistent series drafts. Because cloning and synthesis both run locally, iteration is free and private.\n\n## Sources\n\n- 1.\n[Pocket TTS — Kyutai](https://github.com/kyutai-labs/pocket-tts)— GitHub - 2.\n[Pocket TTS Tech Report — Kyutai](https://kyutai.org/blog/2026-01-13-pocket-tts)— Kyutai - 3.\n[Pocket TTS Model Card — Hugging Face](https://huggingface.co/kyutai/pocket-tts)— Hugging Face - 4.\n[ONNX Runtime Web — Microsoft](https://github.com/microsoft/onnxruntime)— Microsoft\n\n## Frequently Asked Questions\n\n## Can Pocket TTS clone my voice in the browser?\n\n## Does Pocket TTS run offline?\n\n## How many voices does Pocket TTS have?\n\n## What languages does Pocket TTS support?\n\n## How big is the Pocket TTS model?\n\n## Is Pocket TTS voice cloning safe for commercial use?\n\n## Related articles\n\n## Try OfflineTTS\n\nFour local TTS engines, Whisper transcription, and private browser audio tools.\n\n[Open TTS Tool](/app/)", "url": "https://wpnews.pro/news/pocket-tts-guide-voice-cloning-in-your-browser", "canonical_source": "https://offlinetts.com/blog/pocket-tts-browser-voice-cloning-guide/", "published_at": "2026-08-15 00:00:00+00:00", "updated_at": "2026-08-15 17:41:17.475414+00:00", "lang": "en", "topics": ["artificial-intelligence", "generative-ai", "ai-products", "ai-tools"], "entities": ["Kyutai", "Pocket TTS", "OfflineTTS", "Mimi", "ONNX Runtime Web", "Apple M4"], "alternates": {"html": "https://wpnews.pro/news/pocket-tts-guide-voice-cloning-in-your-browser", "markdown": "https://wpnews.pro/news/pocket-tts-guide-voice-cloning-in-your-browser.md", "text": "https://wpnews.pro/news/pocket-tts-guide-voice-cloning-in-your-browser.txt", "jsonld": "https://wpnews.pro/news/pocket-tts-guide-voice-cloning-in-your-browser.jsonld"}}