A 100M-parameter voice engine aimed at ordinary CPUs
Pocket TTS turns text into streamed speech without sending that text to a hosted service. The 100M-parameter model has a Python API, command-line interface, and local HTTP server. It accepts supplied voices or a permitted audio sample for cloning. The README lists English, French, German, Portuguese, Italian, Spanish, and Czech models, with larger 24-layer choices for some non-English languages. That scope suits private assistants, screen readers, games, and internal tools where a cloud voice API is undesirable.
The project is deliberately small by speech-model standards, although the installed environment is not tiny. Our clean Debian container ended with 69 packages and 996 MB on disk. Kyutai recommends keeping the model and voice state resident because loading both the model and a raw voice prompt takes time. The serve command follows that advice by preserving the loaded model between HTTP requests. For repeated speech, it is a better starting point than launching the CLI for every sentence.
Seven languages are available, while pause control is absent
The current README lists 7 languages and describes streaming output, voice cloning, safetensors exports, and text with no fixed length limit. A supplied voice can be tried directly, while a custom WAV or MP3 becomes a reusable voice state after export. Kyutai also released training code in August 2026, which gives researchers a path to train a model rather than only running published weights. Individual sample licenses still matter, and custom cloning requires consent from the person represented by the recording.
Control is much thinner than the feature list may suggest. The unsupported-features section says users cannot add silence through the input text to create pauses. Emotion tags are still requested in issue 52 rather than documented as a supported interface. A narration pipeline can split clips and insert silence after generation, but that puts pacing and stitching in application code. Developers seeking a directed performance, with controlled emotion and timing, should treat Pocket TTS as a speech engine rather than a finished narration system.
What happened when we ran it
Our sandbox installed Pocket TTS in 39 seconds, adding 69 packages and using 996 MB. The build completed in 6 seconds. That is a workable setup for a local ML tool, though the disk result is worth budgeting on small containers and developer machines. The README now tells Linux users how to select PyTorch's CPU index so the default install does not pull CUDA runtime wheels that a CPU deployment will never use.
The test run ended with exit code 1 after 75 seconds. Pytest reported 41 passed, 1 failed, and 1 skipped out of 42. The failing case, test_audio_read_uses_soundfile_for_8_bit_wav, raised an ImportError saying soundfile is required to read non-WAV or non-16-bit WAV files. The log does not establish why that dependency was unavailable, so the useful finding is narrower: the checked-out commit did not pass its complete suite in our stated fresh environment.
The same log recorded 109 warnings, including a PyTorch notice that torch.ao.quantization is deprecated and scheduled for removal in 2.10. Current synthesis did not fail on that warning. It identifies maintenance work around the quantization path. Pip-audit found 0 known vulnerabilities in the installed Python packages. Those results describe commit 891886a in our 3-CPU, 8 GB sandbox, not every published version or host.
Audio output still needs automated and human checks
Open issue 229 reports that WAV files downloaded from the server can retain placeholder RIFF and data sizes. The reporter found playable audio in tolerant software, while strict readers could interpret the duration incorrectly. Issue 221 describes inserted and repeated words in one long-form v2 narration configuration using exported voice profiles on Apple Silicon. Its author also names several changed variables, so it does not isolate one cause. Together, these reports justify checking file headers, duration, and spoken content before delivery.
Numbers deserve their own regression set. Issue 162 shows examples such as 98.6 and 3.14 being split at the decimal point, and pull request 217 proposes a fix. Until the behavior is confirmed in the version you deploy, test prices, dates, phone numbers, abbreviations, and specialist terms. Speech generation can return a valid audio tensor while saying something different from the source, a failure that an HTTP status or WAV parser will miss.
CPU deployment is supported more clearly than GPU service
Pocket TTS requires Python 3.10 to 3.14 and PyTorch 2.5 or newer. Its default local path does not need an API key. Model files still have to be obtained, and custom configurations may point to a local YAML file, HTTPS URL, or Hugging Face path. A production image should pin those inputs so a restart does not silently pick up different weights or configuration.
GPU use has caveats. The README reports hardware-dependent gains on one cloud setup, but calls the path unofficial. The CLI exposes a device option, while the serve command and Docker image always use CPU. Dynamic int8 quantization is CPU-only, and the optional torchao extra must match the installed PyTorch version. Teams buying GPU capacity for bulk generation should test another server alongside Pocket TTS rather than assuming that moving this small model to CUDA solves throughput.
Active releases do not erase the production caveats
GitHub recorded the last push on August 25, 2026, the same date as v3.0.2. The repository had 9,043 stars and 65 open issues and pull requests when fetched. That combination shows current maintainer and user activity; the combined open count is not a bug count. The latest release added a Czech model to the README, adjusted training details, and changed the default voice behavior for custom configurations.
Pocket TTS is an easy project to justify for a local prototype and a plausible component for a carefully tested application. The 39-second install and mostly passing suite reduce the cost of trying it, while the failed 8-bit WAV test and open correctness reports argue against blind trust. Keep the model warm, use the CPU package path intentionally, pin the assets, and compare generated speech with source text before users depend on it.

