🎤Micdrop

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.

EngineRunsLanguagesVoice comes fromFirst audio
PhononIn the Node processFiveA catalog of 102 voices30 to 100 ms
PiperIn a subprocessAround fortyA voice file downloaded next to the app~390 ms
Pocket TTSIn the Node processEnglishA bundled voice, or a sample to clone250 to 430 ms
KokoroIn the Node processEnglishA bundled voice900 to 1300 ms
Qwen3-TTSOn an mlx-audio serverTenNine 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 Easton or Noémie, each with a sample to listen to on Hugging Face, and every voice works with every model.
  • Kokoro takes shorthands such as americanFemale or britishFemale, 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, Ryan and Aiden in 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.