OVOS Speaks Wyoming: Use OpenVoiceOS Engines from Home Assistant
JarbasAl
OVOS Contributor
OVOS Speaks Wyoming
Home Assistant's Assist voice pipelines only work with speech engines that speak Wyoming, its voice protocol. OpenVoiceOS (OVOS) has a much larger catalog of speech-to-text (STT), text-to-speech (TTS), and wake-word plugins, and none of them spoke Wyoming. Three bridges close that gap: they expose any OVOS plugin as a Wyoming service, so you can pick from the whole OVOS catalog inside Home Assistant.
What Wyoming is, briefly
Wyoming is the peer-to-peer voice protocol behind Home Assistant's Assist stack, originally from the rhasspy project. It frames audio and events over a plain socket. A client such as Home Assistant hands audio to a service and gets back transcriptions, synthesized speech, or wake-word detections.
The bridges are adapters, not reimplementations. Each one wraps an existing OVOS plugin and speaks Wyoming on one side, the OVOS plugin API on the other. Your OVOS plugin runs exactly as it always has. The bridges are Wyoming servers: Home Assistant connects to them, not the other way around.
Three bridges, one per pipeline stage
- wyoming-ovos-stt exposes any OVOS speech-to-text plugin, for example an
onnx-asrmodel, as a Wyoming ASR service. - wyoming-ovos-tts exposes any OVOS text-to-speech plugin, such as a phoonnx or piper voice, as a Wyoming TTS service.
- wyoming-ovos-wakeword exposes any OVOS wake-word plugin as a Wyoming wake service.
Each bridge takes --plugin-name, the OVOS plugin to load (the same value you would put under module in mycroft.conf), and --uri, where it listens, unix:// or tcp://host:port. Both are required. The plugin reads its own settings (language, model, voice) from mycroft.conf, the same file it would read inside a running OVOS instance. If you don't already have one, start from the plugin's own README: OVOS plugins document the stt/tts/hotwords section and the plugin-specific keys they expect under it.
Point Home Assistant at a bridge and the OVOS engine behind it appears as a provider in Assist. Whatever the plugin supports, such as language selection or custom models, works through the bridge too, since the bridge does not touch that logic. The STT bridge buffers all incoming audio and runs the plugin once the client signals end of speech, so transcription is batch, not streaming, regardless of what the underlying plugin can do.
Deploying the bridges
The ovos-wyoming-docker repository ships a docker-compose.yml with ready-made images, so you do not have to assemble a Python environment by hand. Images are published under the jarbasai/ovos-wyoming-* namespace:
- STT: a Chromium-based recognizer (
jarbasai/ovos-wyoming-chromium) on host port 10500, and a server-backed STT image on 10501. - TTS: a family of voices, each on its own port: server-backed (10600), Matxa (10601), Google Translate (10602), Mimic (10603), NOS (10604) and SAM (10605).
- Wake word: a
wakewordsimage on host port 10900.
Inside every container the bridge listens on port 8080. The compose file maps that to the host port shown above, so the services land in the 10500 to 10900 range. Each service also mounts your mycroft.conf, where you set the plugin's language, model, or voice.
Clone the repository, point it at your mycroft.conf, and start a service like any other compose service:
git clone https://github.com/OpenVoiceOS/ovos-wyoming-docker
cd ovos-wyoming-docker
export CONFIG_BASE_DIR=/path/to/your/mycroft-conf-folder
docker compose up -d wyoming-ovos-tts-sam
CONFIG_BASE_DIR must point to the folder holding mycroft.conf; the compose file mounts it into every container.
That publishes the SAM voice bridge on host port 10605. In Home Assistant, go to Settings → Devices & Services → Add Integration → Wyoming Protocol, and enter the IP address of the machine running the container, plus the port (for example 10605). Home Assistant connects and offers it as a TTS, STT, or wake-word provider for your Assist pipelines.
The exact image names and host ports live in the compose file. The pattern is the same for all three bridges: run the container, note the host port, add it in Home Assistant.
To run without Docker, each bridge is a plain Python service. Give it a --plugin-name and a --uri such as tcp://0.0.0.0:10605, and point Home Assistant at that address instead.
Why this matters
Your choice of STT, TTS, or wake word is no longer tied to which assistant you started with. You can run OVOS wake-word detection in front of a Home Assistant pipeline, or a phoonnx voice inside Assist. Every plugin in the OVOS catalog, the full family of STT and TTS engines with their voices and languages, becomes available to Home Assistant users through the same Wyoming Protocol integration, added once per bridge you run.
Most of these engines run offline: the bridge and the plugin keep audio on your own hardware and network, and don't send your data anywhere else. The Google-Translate-backed TTS variant is the exception: it calls out to Google, same as any other Google Translate TTS use. Pick an offline voice, such as SAM, Mimic, NOS or Matxa, if that matters to you.
The bridges are on PyPI as wyoming-ovos-stt, wyoming-ovos-tts and wyoming-ovos-wakeword (0.2.0). Bugs and questions go to the issue tracker of the bridge concerned, or to ovos-wyoming-docker for the images.
This work is part of the OpenVoiceOS From Beta to Breakthrough milestone, funded through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, managed by DG Communications Networks, Content and Technology under grant agreement No 101135429. Additional funding is made available by the Swiss State Secretariat for Education, Research and Innovation (SERI).
Help Us Build Voice for Everyone
OpenVoiceOS is more than software, it's a mission. If you believe voice assistants should be open, inclusive, and user-controlled, here's how you can help:
- 💸 Donate: Help us fund development, infrastructure, and legal protection.
- 📣 Contribute Open Data: Share voice samples and transcriptions under open licenses.
- 🌍 Translate: Help make OVOS accessible in every language.
We're not building this for profit. We're building it for people. With your support, we can keep voice tech transparent, private, and community-owned.