Typical pipeline
Built-in wake words (only these six)
Legacy ids such ashey_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 likealexa_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.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
CYBERWAVE_WORKER_LOG_LEVEL=DEBUG for per-frame scores above 0.15.
Dependencies
Edge workflow dependencies lists all voice nodes and STT catalog extras.
Related
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