Custom Wake Word Training in 2026: Create an Offline ONNX Model
A custom wake word is a phrase you pick for a device to listen for — a brand name, a product trigger, or "Hey Home". The traditional way to make one means recording hundreds of speakers, cleaning and labeling the data, then training and iterating: two to four weeks and a serious budget. Here's the faster way.
The old way vs. the new way
- Old way. Collect 500+ recordings from varied speakers → clean and label → train a model → test and re-train. Two to four weeks, often thousands of dollars.
- New way. Type the phrase into an online platform, let it train the model automatically, test the result with your own voice in the console, and pay only when you are ready to download the ONNX file.
How online training works
- Type the keyword. Enter the phrase you want — English, German, French, Japanese, or Chinese. Two to six characters or a short phrase.
- Automatic training. The system synthesizes many TTS voices, then applies noise mixing, speed perturbation, and room-impulse simulation before training a lightweight neural network. Ten to twenty minutes, fully automatic.
- Test your model in the console. Use your own microphone and natural pronunciation to check intended activations and ordinary background speech before buying the download.
- Decide whether to download. Use the console result to evaluate the Basic model, then purchase the standard ONNX download if you want to continue with integration and device testing.
What you get
| Metric | Value |
|---|---|
| Model size | ~100–170 KB |
| Training time | ~10–20 minutes |
| Languages | English, German, French, Japanese, Chinese |
| Recall | > 90% in quiet conditions |
| Platforms | Android, Linux, Windows, macOS, ESP32, Web |
No GPU, no audio collection, no parameter tuning. Compared to a multi-week traditional pipeline, the barrier drops by an order of magnitude.
Why this instead of the usual tools
English is the crowded corner of wake-word tooling — openWakeWord and Picovoice both handle it. What most tools don't give you is a type-a-word workflow that works across languages:
- No training pipeline to set up. openWakeWord custom models mean a weekend of Python, CUDA, and hyperparameters. Here the training is the product.
- Multi-keyword in one model. A single shared-backbone model detects 2–10 keywords, instead of loading one full model per word.
- Non-English actually works. English-only tools hit a wall the moment you need a German, French, or Japanese phrase — see why English tools fail on German.
- A Picovoice alternative. Picovoice's free tier stopped June 30, 2026; Voicute is a one-time-payment option with no per-device license. See the migration guide.
Using the model
The model is standard ONNX, running through the open-source onnx-wakeword engine (Apache 2.0), which ships Mel feature extraction and multi-stage false-trigger filtering.
Python (Linux / macOS / Windows)
from wakeword_engine import WakeWordEngine
engine = WakeWordEngine()
engine.load('model_info.json', 'melspectrogram.onnx')
engine.start(lambda word, prob, info: print(f'{word} {prob:.0%}'))
Android
val engine = OnnxWakeWord.create(context, "model_info.json", "melspectrogram.onnx")
engine.setCallback { word, prob -> onWake(word) }
engine.start() // CPU < 1%, single-frame inference < 5ms
Web browser
const engine = VoicuteWakeWord.create()
await engine.load("model_info.json", "melspectrogram.onnx")
await engine.start((word, prob) => console.log(word))
One model, several words
You don't need one model per phrase. Multi-keyword training puts 3–10 wake words or command words in a single ONNX file — 135 KB for three words, 167 KB for ten.
Test first, then decide whether to download
Training and the online Basic model test are free. Use your own voice in the console to evaluate the model, then pay only if you decide to download the ONNX/TFLite files and continue with device validation. The downloaded model has no per-device license, subscription, or per-unit runtime fee.
Important: the online test is an evaluation of the Basic model, not a production-readiness guarantee. False triggers can be keyword-specific because the base model uses generic negative data. If a phrase reacts to particular sounds, collect examples and contact support about custom negative-sample optimization; the self-service workflow for this is still under development.
FAQ
Can you train a wake word with TTS only?
Yes. Base models are trained entirely on TTS-synthesized speech, so no recordings are required. That covers standard pronunciation; an optional real-audio step (a few short clips) recovers accents and noisy environments.
How do you train a custom wake word without recording audio?
Type the phrase, and the platform synthesizes training data from many TTS voices with noise and speed augmentation, then trains a lightweight model. You never collect or upload audio.
How do you create a wake word from text?
Text in, model out. The pipeline turns your phrase into thousands of varied utterances in minutes — no voice samples, no GPU.
Can a custom wake word run offline on ESP32?
Yes. ESP32-S3 uses an INT8 TFLite Micro export rather than the desktop ONNX path. The public ESP-IDF example is tested on an ESP32-S3-HMI-DevKit; other boards require audio and memory adaptation. See the ESP32-S3 wake-word guide.
What's an openWakeWord alternative for custom wake words?
openWakeWord's official models are English-only, and a custom model means setting up a Python/CUDA pipeline. Voicute's type-a-word flow covers English, German, French, Japanese, and Chinese, with multi-keyword support in one model — see the full comparison.
How do you make a custom wake word for Home Assistant?
Run the ONNX model through the onnx-wakeword engine as a Wyoming service, or on-device. See the Home Assistant guide.
Is there a Picovoice alternative for custom wake words?
Yes. Picovoice's free tier stopped working June 30, 2026, with no non-commercial plan planned. Voicute is a one-time-payment alternative — type a word, get an offline ONNX model, no per-device fees. See the Picovoice alternative guide.
Train and test your wake word →