TTS Plugins Reference¶
In a nutshell
This page holds the full technical entry for each TTS plugin in the roster: repository link, license notes, and a default configuration snippet where one exists. Start at TTS Plugins to pick a plugin, come here for the exact settings.
ovos-tts-server¶
-
GitHub: OpenVoiceOS/ovos-tts-server
-
Description: Turn any OVOS TTS plugin into a micro service!
ovos-tts-plugin-polly¶
-
Description: Amazon Polly cloud text-to-speech.
ovos-tts-plugin-google-tx¶
-
Description: OVOS TTS plugin for gTTS
Note
gTTS works by calling the same unofficial, undocumented endpoint used by the Google Translate web UI's "listen" feature. It is not a published, API-keyed Google Cloud Text-to-Speech API. Google can change or revoke access to this endpoint at any time.
Default Configuration¶
"tts": {
"module": "ovos-tts-plugin-google-tx",
"ovos-tts-plugin-google-tx": {
"tld": "com",
"slow": false,
"lang_check": false
}
}
tld only takes the configured value for languages outside the plugin's internal
regional table. About 15 common locales (en-US, en-GB, fr-FR, pt-PT, es-ES, and
others) always use that table's fixed TLD instead, no matter what tld is set to.
ovos-tts-plugin-edge-tts¶
ovos-tts-plugin-matxa-multispeaker-cat¶
-
Description: Matxa-TTS, the multispeaker, multidialectal neural TTS model. It works together with the vocoder model alVoCat to generate speech in four Catalan dialects. Warning: archived, deprecated.
Example Configuration¶
"tts": {
"module": "ovos-tts-plugin-matxa-multispeaker-cat",
"ovos-tts-plugin-matxa-multispeaker-cat": {
"voice": "valencia/gina"
}
}
ovos-tts-plugin-piper¶
-
GitHub: https://github.com/OpenVoiceOS/ovos-tts-plugin-piper
-
Description: Offline neural TTS using the Piper engine (ONNX voices). This is the default TTS on the raspOVOS
hybridandofflineimages. Warning: archived. phoonnx runs Piper ONNX voices (including thekusalvoice) and is the maintained successor. -
Config: set
"module": "ovos-tts-plugin-piper"in thettsblock. A"voice"key selects a specific Piper voice model, without it the plugin picks a voice for the configured language.
ovos-tts-plugin-marytts¶
-
Description: TTS Plugin for MaryTTS
Recommended Configuration¶
url is required (the plugin refuses to load without it); only voice has a default
(cmu-slt-hsmm). Point url at your own MaryTTS server:
"tts": {
"module": "ovos-tts-plugin-marytts",
"ovos-tts-plugin-marytts": {
"url": "http://0.0.0.0:59125",
"voice": "cmu-slt-hsmm"
}
}
ovos-tts-plugin-espeakNG¶
-
Description: eSpeak NG offline text-to-speech (robotic, supports many languages).
ovos-tts-plugin-beepspeak¶
-
Description: Novelty R2-D2-style beep text-to-speech.
ovos-tts-plugin-cotovia¶
-
Description: OVOS TTS plugin for Cotovia TTS
Example Configuration¶
Leaving voice unset (or "default") does not resolve to a fixed voice: the plugin lists
whatever cotovia-voice-* packages are installed under data_path
(/usr/share/cotovia/data unless overridden) and picks the first entry in directory order,
which is not deterministic across installs. Cotovia's own docs call sabela the recommended
default among its three voices (iago, sabela-large, sabela), so set voice explicitly
if a stable choice matters.
ovos-tts-plugin-mimic¶
-
Description: OVOS TTS plugin for Mimic
Default Configuration¶
Two more keys default unset: binary (path to the mimic executable; unset autodetects via
XDG premium-mimic paths, then mimic on PATH) and duration_stretch (unset applies no
stretch; when set, passed through as mimic's --setf duration_stretch=<value>).
ovos-tts-plugin-SAM¶
-
GitHub: OpenVoiceOS/ovos-tts-plugin-SAM
-
Description: S.A.M., Software Automatic Mouth, the classic retro speech synthesizer.
ovos-tts-plugin-azure¶
-
Description: This TTS service for OpenVoiceOS requires a subscription to Microsoft Azure and the creation of a Speech resource (https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/overview#create-the-azure-resource)
Default Configuration¶
Never commit a real api_key
Treat this like any other credential: keep the real value out of version control and
shared config files. Use a local, untracked config or an environment-backed secret
store instead of hard-coding it in mycroft.conf.
"tts": {
"module": "ovos-tts-plugin-azure",
"ovos-tts-plugin-azure": {
"api_key": "insert_your_key_here",
"voice": "en-US-JennyNeural", // optional, this is already the default
"region": "westus" // optional, if your region is westus
}
}
ovos-tts-plugin-ahotts¶
-
Description: OVOS TTS plugin for AhoTTS
Required Configuration¶
lang has no default here: it must be es or eu, and the plugin raises a ValueError on any other configured language.
ovos-tts-server-plugin¶
-
Description: OpenVoiceOS companion plugin for OpenVoiceOS TTS Server
Talks to a public community server by default
The host below points at a best-effort, publicly-run community server, not a private
or guaranteed-available endpoint. Point it at your own self-hosted server (see
tts-server) if you need privacy or reliability.
Recommended Configuration¶
"tts": {
"module": "ovos-tts-plugin-server",
"ovos-tts-plugin-server": {
"host": "https://tts.smartgic.io/piper",
"v2": true,
"verify_ssl": true,
"tts_timeout": 5
}
}
When host is omitted (the true default), the plugin shuffles the public community
server list (tts.openvoiceos.pt and tts.smartgic.io/piper) and tries them in order.
Either way these are public community-run servers, not addresses on your network. See
tts-server to self-host, or pick a fully offline voice from the
table on the TTS Plugins page.
Community servers are best-effort demos
The public OVOS servers exist for easy onboarding and demos only. They are best-effort, not optimized, carry no uptime guarantees, and may vanish at any time. OVOS will be slow and unreliable if you rely on them. The official recommendation is to self-host — or skip servers entirely: fully offline plugins exist for everything.
ovos-tts-plugin-coqui¶
-
Description: OVOS TTS plugin for Coqui TTS
Example Configuration¶
There is no single hardcoded default model. Leaving model unset resolves one from an
internal LANG2MODEL table keyed by lang, and raises ValueError at load if the configured
language has no entry and no model is set explicitly — pass model directly for a language
the table doesn't cover.
ovos-tts-plugin-pico¶
-
GitHub: OpenVoiceOS/ovos-tts-plugin-pico
-
Description: SVOX Pico lightweight offline text-to-speech.
ovos-tts-plugin-phoonnx¶
-
GitHub: TigreGotico/phoonnx
-
Description: OVOS's own multilingual, ONNX-based neural TTS engine, distributed as part of the
phoonnxpackage. Registering the plugin only requirespip install phoonnx. Model files are fetched and cached automatically the first time a voice is used.
Example Configuration¶
"tts": {
"module": "ovos-tts-plugin-phoonnx",
"ovos-tts-plugin-phoonnx": {
"voice": "OpenVoiceOS/phoonnx_pt-PT_miro_tugaphone"
}
}
If
"voice"is omitted, the plugin picks the first bundled model that supports the configured language.
Per-language default voices¶
A configured voice pins one voice regardless of request language. For multilingual serving
(1.86.0a1+), the lang2voice config map, e.g. {"pt-br": "...", "gl": "..."}, and
PHOONNX_DEFAULT_VOICE_<LANG> env vars resolve the default voice per request language. Keys
are BCP-47 tags, full tag tried before primary subtag, and resolution is table-major: the
whole lang2voice table wins outright for any language it names before env vars are consulted
at all. Spellings are normalized on both sides (gl-ES/gl, pt-br/pt_BR agree). An entry
naming a nonexistent voice logs the mistake and falls back to the voice index's own default
rather than refusing to serve the language.
Bounding the voice cache¶
Loaded voice models stay resident in an in-process cache. Two settings bound it, and they are not equivalent:
| Key | Bounds by | Default |
|---|---|---|
max_loaded_bytes |
Total size in memory, LRU-evicted. Accepts a plain byte count or a human size like "3GB", "512MB", "1.5GiB" (KB/MB/GB/TB are powers of 1000, KiB/MiB/GiB/TiB powers of 1024). |
unset (no budget) |
max_loaded_voices |
Count of resident voices, LRU-evicted. | unset (no limit) |
load_wait_timeout |
Seconds a load waits for resident memory to free up before proceeding anyway. | 300 |
max_loaded_voices is the older setting and a poor bound on this catalog: a Piper voice is
around 60 MB while an omnivoice voice is around 2.2 GB, roughly a 40x spread, so a count that is
safe for small voices is fatal for large ones. max_loaded_bytes bounds by the actual resident
size instead, and is the one to reach for on a mixed catalog. (Mirrors max_loaded_mb on the
linguonnx plugins.)
"tts": {
"module": "ovos-tts-plugin-phoonnx",
"ovos-tts-plugin-phoonnx": {
"voice": "OpenVoiceOS/phoonnx_pt-PT_miro_tugaphone",
"pinned_voices": ["OpenVoiceOS/phoonnx_pt-PT_miro_tugaphone"],
"max_loaded_bytes": "3GB"
}
}
pinned_voices (a string or a list) names voices that are loaded at startup and never
evicted. The two caps treat pins differently. If more voices are pinned than
max_loaded_voices allows, that count limit is raised to fit them (logged as an error so
the mismatch isn't silent). The max_loaded_bytes size budget is never raised: a pin that
fits individually still loads even when resident usage then exceeds the budget (again logged,
not fatal). A failed pin never stops the service from starting.
This refusal applies to any voice load, not only pins: any voice whose own known on-disk size
alone exceeds the whole max_loaded_bytes budget is refused with VoiceExceedsMemoryBudget
and never becomes resident — loading it would be a guaranteed OOM kill, not a degraded path.
A voice that fits on its own but not beside what is currently resident instead waits for room:
up to load_wait_timeout seconds (default 300) for another load to finish or a leased voice
to be released, after which it loads anyway and logs a warning that memory use will exceed the
budget. A voice not yet downloaded can't be measured and is treated as needing the whole
budget, so it always loads alone.
Size the budget for the actual peak, not just the steady state: peak resident memory is the cached models plus whatever is loading in flight at that moment, and a request that arrives mid-load can tip a box over even when the cache's own ceiling looks safe.
Read next: TTS Plugins Related: Writing a TTS Plugin · TTS Server · SSML