Skip to main content
The Wake Word Engine is an edge-only voice trigger. It sleeps until it hears the wake word, then streams PCM int16 @ 16 kHz mono downstream (typically to Call Model / Whisper) until you stop speaking. Internally uses OpenWakeWord.

Typical pipeline

Set Audio Track buffer preset to Wake Word (80 ms) — not Speech-To-Text (4 s). A 4 s upstream buffer only invokes scoring about once every 4 seconds and makes short phrases like “alexa” easy to miss. Compile rejects Audio Track speech-to-text → Wake Word Engine.

Built-in wake words (only these six)

Legacy ids such as hey_siri are not in openWakeWord v0.5.x and are stripped at compile and runtime. Select multiple words in the UI — the engine activates on any of them.

Detection threshold

One Detection Threshold in the workflow editor applies to every selected wake-word model (default 0.5, range 0–1). A frame triggers AWAKE when any loaded model’s score is ≥ that value. There is no per-model threshold override in the engine — tune this single knob if a phrase is too sensitive or too hard to trigger.
Pretrained models do not peak at the same level on identical audio. For example, committed test clips often score ~1.0 for alexa, ~0.68 for hey_mycroft, and ~0.41 for hey_jarvis. If hey_jarvis (or hey_rhasspy) rarely fires at 0.5, lower the threshold (e.g. 0.35–0.40) or switch models — do not expect the engine to auto-adjust per model.

Two-state machine

SLEEPING

  • Audio is scored in 80 ms frames (1,280 samples @ 16 kHz).
  • Downstream nodes receive no speech audio (only state metadata).
  • A lookback deque (default 500 ms) is used internally for detection only — it is not forwarded to STT.
  • When any selected model score ≥ threshold (default 0.5), the engine switches to AWAKE.

AWAKE

  • After detection, the engine skips the wake phrase (default 500 ms, Wake Word Trim) then buffers command-only audio.
  • One audio output is emitted per session (after silence timeout or listening limit), without the wake word in the PCM.
  • Listening ends per listening policy (see below), then state returns to SLEEPING.

Prediction keys (important)

openWakeWord stores files like alexa_v0.1.onnx, but predict() returns scores under short keys such as alexa. Compiled workers use prediction_keys = list(oww_model.models.keys()) so scores are read correctly. If logs show words=['alexa_v0.1'] without prediction_keys=['alexa'], the edge worker is stale — recompile and sync the workflow.

Model download (three layers)

Only the wake words selected in the workflow are provisioned — not the full catalog. Edge-sync model_requirements includes wake_word_models: ["alexa", ...] and edge_package: ml-wakeword. The official cyberwaveos/edge-ml-worker image also pre-bakes all built-in models at image build time for air-gapped use.

Configuration

Output buffer presets (while AWAKE)

Assistant sound signaling

When Play start/stop assistant sounds is enabled and a digital twin is selected (same twin as the Audio Track microphone), the engine emits two events per AWAKE session: Both events carry the same JSON payload:
source_type is edge when the workflow runs on the edge (default for Wake Word Engine) and tele when the workflow runs on the cloud. source_subtype is the wake word node name (defaults to wake_word_engine), following the CwProcessor source subtype convention.

Feedback target

A Feedback target sidebar toggle controls where the audio plays:
Edge and Both require a speaker physically connected to the edge device, plus an edge speaker driver subscribing to the Zenoh commands/assistant_signaling channel for the twin.
The frontend handler is cyberwave-frontend/lib/workflows/assistant-signaling-sounds.ts (handleAssistantSignalingCommand), wired into useMQTTTwin for environment viewers.

Input formats

Adapted automatically to int16 @ 16 kHz mono:

Output (only after score ≥ threshold)

While SLEEPING, outputs contain state only (state, is_speaking) — no speech audio.

Logging on edge

At INFO (worker log level):
  • Wake Word Engine initialized: wake_words=[...] prediction_keys=[...]
  • Periodic Wake word listening scores=... (~every 2 s while listening)
  • Wake word detected: 'alexa' scores={'alexa': 0.512} threshold=0.50, switching to AWAKE
Set CYBERWAVE_WORKER_LOG_LEVEL=DEBUG for per-frame scores above 0.15.

Dependencies

Edge workflow dependencies lists all voice nodes and STT catalog extras.

Edge dependencies

Full compile + edge matrix

Models & compile

Compile-time download and edge-sync requirements

Testing

WAV fixtures and offline detection tests

Audio Track

Upstream buffer presets

Audio in Workflows

Shared PCM format