Home Assistant’s voice pipeline is great, but the wake-word layer is where non-English users get stuck. The open-source options (openWakeWord, microWakeWord) are solid for English, but when I tried to get a Chinese wake word working with them, the results just weren’t there. If your wake word is German, French, Japanese, Chinese, or anything non-English, it’s hard to find a model that actually works.
How I got here
I originally set out to solve one thing: a Chinese wake word. I tried the open-source route first, but the quality wasn’t good enough. So I ended up building my own training pipeline — and it turned out to handle multiple languages really well.
Right now it supports Chinese, English, Japanese, French, and German, and training consistently hits 90%+ recall across those languages.
Because I built my own pipeline, I also needed my own inference code — which is why I wrote onnx-wakeword (Apache 2.0). It runs on Linux, Android, and Web.
The training is fully automated:
- Type a keyword → get a model. No audio upload needed.
- Not happy with the recall? Upload ~5 short recordings and it improves.
- Need several words? Train them into one model — it recognizes multiple keywords in a single forward pass.
The result
A ~100 KB ONNX model, fully offline, nothing uploaded at inference time.
Home Assistant integration — I’d love your input
The runtime is standalone today (Linux / Android / Web). To plug into HA’s voice pipeline, the natural path is a Wyoming-protocol wake-word service (like openWakeWord’s wyoming integration) or an ESPHome component. Before I build it: is this useful to the non-English HA folks here, and which path would you prefer — Wyoming or ESPHome?
The runtime and demo models are free (open source). A custom model is $4.9 — voicute.com