Skip to content

Frequently Asked Questions

How TTSLab runs TTS and STT models entirely in your browser, what it stores on your device, and where the limits are.

Does TTSLab send my text or audio to a server?

No. Every demo on this site runs the model inside your browser, in a Web Worker, through ONNX Runtime Web. Text you type is synthesized locally, microphone audio is recorded and transcribed locally, and nothing is uploaded — there is no inference API to send anything to. The site loads Vercel Analytics for anonymous page-view counting, but your text and audio never leave your device.

How does the inference actually run — WebGPU or WASM?

Both, selected automatically. When you load a model, the app asks the browser for a GPU adapter (navigator.gpu). If one is available, ONNX Runtime Web runs the model on the WebGPU execution provider; if not, it falls back to the WebAssembly (CPU) backend. There is currently no manual toggle — the demo always uses the fastest backend your browser supports.

Which browsers can run the WebGPU versions of the models?

Chrome and Edge 113+ (including Android 12+), Safari 26.0 and later on all Apple platforms (shipped September 15, 2025), and Firefox 141+ on Windows, 145+ on macOS, and 147+ on Apple-Silicon Macs. That is roughly 88.6% of browsers globally as of November 2026. The remaining gaps are Firefox on Linux and Android, Safari on Intel Macs, and Chrome on Windows ARM64.

See the full WebGPU and WebAssembly limits report

Why do models take so long to download the first time?

Model weights are real neural network files, downloaded from the Hugging Face CDN directly into your browser. They range from roughly 24 MB (KittenTTS Nano) to around 2 GB (Cohere Transcribe), so first load depends on your connection. This is the price of running the model on your device instead of on a server — and you only pay it once.

Where are downloaded models stored, and how much space do they use?

Model files are stored in your browser's Cache API — the same storage a browser uses for static assets — so they do not appear in your Downloads folder. Quotas differ by browser: Chrome and Edge allow up to about 60% of free disk, Firefox about 10% of disk capped at 10 GiB, and Safari up to 60% but may evict unused site data after 7 days of no interaction unless the site has requested persistent storage. Clearing site data in your browser removes cached models.

Read about storage quotas and eviction

Why are some models marked 'unsupported'?

Because the model needs operations the browser runtime cannot execute. The clearest example is Chatterbox Multilingual: the ONNX spec requires INT64 tensors for its Shape and Unsqueeze ops, but the browser WebGPU backend currently has no INT64 cast kernel, so the model cannot run on the GPU — and it is impractically slow on CPU. Unsupported model pages stay live with an upvote button and an email notification so you can hear when support lands.

Can I clone a voice?

Partially, and we are honest about it. SpeechT5 can take a speaker embedding extracted from about 10 seconds of your reference audio (via a ~100 MB WavLM model) and speak new text with it. In our testing with an independent speaker-verification model as judge, cloned output shifted the voice away from the default but did not actually resemble the reference speaker — it stayed inside the different-speaker band. So today cloning changes the voice; it does not clone the speaker.

What is the Voice Agent?

The Voice Agent is a complete speech-to-speech assistant running on one page: Whisper transcribes your microphone input, a Qwen3.5 language model generates the reply, and Kokoro speaks it aloud. The LLM stage comes in three engine tiers of the same model family, so you pick the trade-off that fits your hardware: Qwen3.5-0.8B (~490 MB) runs through transformers.js on any backend — WebGPU when available, WASM otherwise; Qwen3.5-2B (~1.1 GB) and Qwen3.5-4B (~2.4 GB) run through WebLLM and need a WebGPU-capable GPU; and a CPU-only tier runs the 0.8B model as GGUF through wllama (~533 MB) with no GPU at all. All stages run locally in your browser — the microphone audio never leaves your device.

Try the Voice Agent

Are upvotes anonymous?

Yes. Clicking an upvote button stores a small flag in your browser's localStorage and sends an anonymous POST request that increments a per-model counter. There is no account, no email, and no identifier attached — the server only ever sees that one more person voted. Toggling the vote again removes your flag and decrements the count.

Does TTSLab work on iPhone or iPad?

Yes on recent systems: iOS and iPadOS 26 ship WebGPU, so the demos load in Safari. Be conservative with model size, though. Apple's mobile memory limits are strict — research into iOS Safari tab kills found the browser hard-terminates a tab at roughly 1.5 to 2 GB of committed memory (measured on an iPhone 15 Pro), with no JavaScript error or device.lost event beforehand. Prefer the smaller models (Moonshine Tiny, Kokoro 82M) on mobile.

Read the limits report

Is TTSLab free and open source?

Yes. TTSLab is MIT-licensed and the entire codebase — model integration, UI, database schema — is on GitHub. No accounts, no API keys, no paywall.

View the repository on GitHub

Can I trust the benchmark numbers on this site?

You should trust their provenance, not their portability. The benchmark page only lists measurements published by external sources, each with its citation, because in-browser performance depends heavily on your specific GPU, CPU, and browser. Every model page shows live metrics — real-time factor, generation speed — measured on your own hardware while you run the demo.

See the attributed benchmark table