OpenWakeWord on/off switch for voice-activated edge workflows
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.
Audio Track (80 ms buffer) → Wake Word Engine → Call Model (Whisper) → Send Alert
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.
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.
Setting
Where
Default
Detection Threshold
Wake Word node → Detection Parameters
0.5
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.
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.
Only the wake words selected in the workflow are provisioned — not the full catalog.
When
What runs
Workflow compile (cloud)
openwakeword.utils.download_models(model_names=[...]) + load probe. Fails compile if openwakeword is missing on Django or download fails. /compile returns openwakeword_models.
Worker import (edge)
Top of wf_*.py: download_models(model_names=_CW_WW_WORKFLOW_WAKE_WORDS) then _cw_ww_ensure_models_downloaded(...).
Engine init (edge)
First audio frame: same download (idempotent) before Model(wakeword_models=...).
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.
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:
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.
Environment viewer in the browser (/sounds/assistant/start-assistant.mp3, end-assistant.mp3)
Edge
Zenoh — {prefix}/{TWIN_UUID}/data/commands/assistant_signaling (built via build_key)
On-edge speaker driver subscribed to the Zenoh channel
Both
MQTT + Zenoh
Browser and edge speaker react simultaneously
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.