Skip to content

Wake Word

Zlatko Lakisic edited this page Aug 4, 2026 · 2 revisions

Wake Word

Phrase: hey comstar (four syllables — lower false-accept rate than two-syllable wake words).

Engine: openWakeWord · model: hey_comstar.onnx

Wake word training


Training

hey comstar is not in any pretrained set. openWakeWord supports fully synthetic training:

python scripts/train_wakeword.py \
  --phrase "hey comstar" \
  --tts piper \
  --n-samples 20000 \
  --out terminal/audio/models/hey_comstar.onnx

Generate positives with Piper across multiple voices, rates, and pitches; mix room impulse responses and negatives from ambient household audio (including TV).

Without openwakeword[train], the script prints setup instructions and exits. Until a real ONNX is deployed, the audio process may use a stub that never fires.


Threshold tuning

  1. Record ~60 minutes of normal room audio (TV, conversation, kitchen).
  2. Sweep threshold 0.3 → 0.9 in 0.05 steps offline + ~50 real utterances across the room.
  3. Produce an ROC table in Baselines.
  4. Pick the lowest threshold with zero false accepts over the hour, then check miss rate.

If miss rate is bad at that threshold, it is a microphone problem, not a threshold problem. Do not "fix" room-distance misses by dropping into false-accept territory — the TV will wake the device at 2am.

Wake ROC curve


Runtime behaviour

  • Feed ~80 ms chunks; emit wake above threshold.
  • Refractory period ~2 s so one utterance cannot double-fire.
  • Disabled during playback in half-duplex mode.
  • Always armed in sleeping (only exit path).

Bring-up bypasses:

Method How
Force score COMSTAR_FORCE_WAKE_SCORE=0.99
Dev inject POST :8781/admin/inject with WakeWord (COMSTAR_ENV=dev)
Config / logs see Runbook

Related pages

Clone this wiki locally