Skip to main content

ovos-tts-plugin-pocket-tts

Status: Proof of Concept

OVOS TTS plugin for Pocket TTS by Kyutai — a lightweight, CPU-only text-to-speech engine with a 100M parameter model.

~6x real-time on Apple Silicon, no GPU required. Supports voice cloning from audio samples.

Install

pip install ovos-tts-plugin-pocket-tts

With uv, torch automatically resolves to the CPU-only wheel (configured via tool.uv.sources).

Linux: CPU-only torch (saves ~2GB)

On Linux, pip defaults to the CUDA torch wheel (~2.5GB). If you don't need GPU support (pocket-tts is CPU-only anyway), install torch from the CPU index first:

pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install ovos-tts-plugin-pocket-tts

On macOS, this is not needed — PyPI torch is already CPU-only (~60MB).

Configuration

{
  "tts": {
    "module": "ovos-tts-plugin-pocket-tts",
    "ovos-tts-plugin-pocket-tts": {
      "voice": "alba"
    }
  }
}

Voice options

Built-in voices: alba, marius, javert, jean, fantine, cosette, eponine, azelma

Voice cloning: Set voice to a path to a .wav file, a pre-exported .safetensors file, or a HuggingFace URI (hf://kyutai/tts-voices/...).

Language support

This plugin auto-detects which languages your installed pocket-tts supports.

  • Legacy pocket-tts (≤ 1.1.1, current PyPI release): English only.
  • Multilingual pocket-tts (kyutai-labs/pocket-tts#155, not yet released): English, French, German, Spanish, Italian, Portuguese.

When the multilingual release lands on PyPI, just pip install -U pocket-tts and the plugin lights up the new languages automatically — no plugin upgrade required.

How language selection works

The plugin maps the active OVOS language (BCP-47, e.g. fr-FR) to a kyutai pocket-tts model id. Defaults:

OVOS lang Kyutai model
en english_v2
fr french_24l
de german_24l
es spanish_24l
it italian_24l
pt portuguese_24l

Lookup tries the full BCP-47 tag first (e.g. pt-br), then falls back to the base subtag (pt), then to English. Unknown languages fall back to English with a log line.

Note: The _24l (24-layer) models are larger preview builds, not the final distilled releases. They are slower than the english defaults but support int8 quantization for a meaningful speedup. The plugin enables quantize=True automatically for any *_24l model. You can override per-language via the quantize config knob.

Override the language map

If you want, for example, the older english_v1 model, or to register a future regional model, set language_aliases in your config:

{
  "tts": {
    "module": "ovos-tts-plugin-pocket-tts",
    "ovos-tts-plugin-pocket-tts": {
      "voice": "alba",
      "language_aliases": {
        "en": "english_v1",
        "pt-br": "portuguese_brazil_24l"
      },
      "quantize": {
        "french_24l": false
      },
      "preload_languages": ["en", "fr"]
    }
  }
}
Key Type Default Description
voice str "alba" Built-in voice name, .wav/.safetensors path, or hf:// URI.
sample_rate int 16000 Output sample rate in Hz. The model is resampled if it differs.
language_aliases dict {} Override or extend the BCP-47 → kyutai model map. Full tags take precedence over base subtags.
quantize bool or dict auto (True for *_24l) Force int8 quantization on/off. Pass a dict to control per kyutai model id.
preload_languages list[str] [] BCP-47 codes to load eagerly during plugin init instead of lazy-loading on first use.
enable_streaming bool false Use the streaming TTS path (recommended for low-latency setups).

Memory note: Each loaded language model holds ~100M parameters in RAM (the *_24l previews are ~4× bigger before distillation). The plugin caches one model per used language, so leaving preload_languages empty and letting the cache warm on demand keeps the resident set small.

Roadmap

  • SouraTTS (emotional TTS built on pocket-tts) is being tracked as a separate plugin (ovos-tts-plugin-soura-tts) — its emotion/intensity dimensions don't fit the current OVOS TTS interface and bundling would tie pocket-tts upgrades to SouraTTS releases.

License

Apache-2.0

Release files for ovos-tts-plugin-pocket-tts 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ovos-tts-plugin-pocket-tts 0.2.0
File Size Uploaded
ovos_tts_plugin_pocket_tts-0.2.0.tar.gz 18.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ovos-tts-plugin-pocket-tts 0.2.0
File Interpreter ABI Platform
ovos_tts_plugin_pocket_tts-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.0 kB

Release files / ovos_tts_plugin_pocket_tts-0.2.0.tar.gz

Download URL ovos_tts_plugin_pocket_tts-0.2.0.tar.gz
Size 18.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c368881058ef9626d3c4ad69ddbf38f846ebd2aeabdf7f863f2ac01e90fe302b
BLAKE2b-256 checksum
How to use checksums
3af153c7427b2bf9cc02b7a5e48bfedbdeac4c8757abaf751a6383442521e3c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / ovos_tts_plugin_pocket_tts-0.2.0-py3-none-any.whl

Download URL ovos_tts_plugin_pocket_tts-0.2.0-py3-none-any.whl
Size 13.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c83a5ee81efd28af465c5b13d99e721d8aeafb9f764c4824f7947761bd501ae0
BLAKE2b-256 checksum
How to use checksums
0dcb4ed0a0816581bb55052f3c605759eb24ac8e639454cbfd7949e47ac68cb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page