Custom non-English wake words for Home Assistant — ~93% recall fully offline ONNX (100 KB)

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