Local TTS
Five engines generate speech locally. Choose by the language of the call first, then by what you can install next to your app.
| Engine | Runs | Languages | Voice comes from | First audio |
|---|---|---|---|---|
| Phonon | In the Node process | Five | A catalog of 102 voices | 30 to 100 ms |
| Piper | In a subprocess | Around forty | A voice file downloaded next to the app | ~390 ms |
| Pocket TTS | In the Node process | English | A bundled voice, or a sample to clone | 250 to 430 ms |
| Kokoro | In the Node process | English | A bundled voice | 900 to 1300 ms |
| Qwen3-TTS | On an mlx-audio server | Ten | Nine speakers, a description, a sample | ~400 ms |
In English
Phonon 31M installs with npm alone, downloads 65 MB on first use, and starts speaking within 100 ms of receiving a sentence, the shortest delay of the five. It is free for commercial use and offers 37 English voices. Kokoro also installs with npm alone, but it starts speaking about a second later, which the user notices. Pocket TTS also needs a 98 MB archive, downloaded and extracted once. It can clone a voice from a few seconds of audio but uses 600 MB while it generates. Qwen3-TTS sounds better than both, but it needs a server and a GPU.
In the other languages
Phonon covers French, German, Spanish and Portuguese with its 40M models, one per language plus a multilingual one, inside the Node process and on the CPU. Whisper transcribes its French back word for word, dates and times included. These models are gated on Hugging Face and free for non-commercial use only, so a commercial product in those languages turns to Piper or Qwen3-TTS.
Piper covers around forty languages, with voice files of a few dozen megabytes, and generates much faster than real time on any CPU. Its voices are small VITS models and sound less natural than the other engines.
Qwen3-TTS covers ten languages, including French, German, Spanish, Italian and
Portuguese. It sounds close to a hosted voice. It accepts an instruction such
as "speak slowly and warmly" that changes how a sentence is read, and it can
design or clone a voice. It needs an mlx-audio server next to your app, a GPU,
and 2.5 GB of memory once the checkpoint is loaded.
On a MacBook Pro M2 with the default checkpoint, the first audio of a sentence arrives after about 400 ms. The rest takes about 0.75 seconds of computation per second of speech, so playback never waits for generation. Whisper transcribes its English and French test sentences back word for word, apart from an occasional mispronounced word.
The voice and the agent must use the same language. An English voice reading French text uses English pronunciation and is hard to understand. Name the language of the voice in the system prompt.
Why Kokoro and Pocket TTS only speak English
Kokoro and Pocket TTS are limited to English by their tooling, not by their
models. Kokoro includes Spanish, French, Italian, Japanese, Portuguese and
Chinese voices, but kokoro-js accepts only its 28 American and British voice
ids and throws an error on any other, such as ff_siwis. It also converts all
text to phonemes with English rules. Pocket TTS
has French, German, Spanish, Italian and Portuguese checkpoints, but they have
no ONNX export yet, so the addon uses the English one. Phonon, which Gradium
built on Pocket TTS, brings French, German, Spanish and Portuguese to Node
through its own runtime.
Choosing the voice
Each engine names its voices its own way:
- Phonon takes a name from its catalog of
102 voices, such as
EastonorNoémie, each with a sample to listen to on Hugging Face, and every voice works with every model. - Kokoro takes shorthands such as
americanFemaleorbritishFemale, and any of its 28 English voice ids. - Piper names its voices after their language,
their speaker and their quality, such as
fr_FR-siwis-medium, and publishes samples to listen to before downloading one. - Pocket TTS uses a bundled voice or any wav recording of someone speaking. Its license requires the consent of that person.
- Qwen3-TTS has nine named speakers,
RyanandAidenin English, and reads the ten languages with any of them. A VoiceDesign checkpoint generates a voice from a description instead, and a Base checkpoint clones one from three seconds of audio.
What was measured and set aside
Two other voices were tested and left out, each with its own page. Voxtral TTS 4B generates slower than real time on this machine, so playback stops in the middle of sentences. AuK and AuK-Flash are nine times slower than real time, even after fixing a memory issue in their inference code.
XTTS and Tortoise
Two open source engines often compared with these five have no Micdrop integration. XTTS v2, from Coqui, clones a voice in seventeen languages, but its weights are under the Coqui Public Model License, which allows only non-commercial use. Coqui closed in early 2024, so no commercial license can be bought. Tortoise TTS is under Apache 2.0 and chains an autoregressive model with a diffusion decoder, which its author calls “insanely slow”. On an RTX 3060 Ti, its fastest preset needs about 1.5 seconds of computation per second of speech, so playback would wait for generation. Both run in Python with PyTorch, in a separate process next to your app.