Python Library

Private wake word detection that runs locally on real hardware

WakeWordLab is for always-on wake word detection that stays on-device, keeps your audio private, and runs efficiently on constrained hardware without sending speech to the cloud.

View on GitHub PyPI

By the numbers

Benchmarked against openWakeWord on the same hardware and dataset.

15× Smaller model footprint 244 KB vs 3.5 MB (openWakeWord)
15–30% Better recall Against a trained openWakeWord model
15.3% CPU on Raspberry Pi 3 Single core, vs 40.6% for openWakeWord
11× Lower MACs per second 48.1 vs 530.3 MMAC/s

Raspberry Pi 3 benchmark

Measured on a single pinned CPU core, single-thread inference, 30 seconds of 16 kHz synthetic audio.

Engine MMAC / invoke Cadence MMAC / sec ms / sec audio Core load
WakeWordLab 4.81 100 ms 48.1 152.7 ms 15.3%
openWakeWord (mel + embedding + head) 42.4 80 ms 530.3 405.7 ms 40.6%

Comparison used a trained openWakeWord model. YouTube audio without the wake word was used for false-positive evaluation; a synthetic dataset for recall. Both models scored 0 false positives on the DIPCO dataset.

Features

Silero VAD pre-filter

Inference only runs on speech frames — silence passes straight through. Cuts CPU usage further and reduces false positives on background noise.

Lightweight CNN architecture

Under 25 KB model size. Designed from scratch for constrained inference — not a pruned version of a larger model.

Single .wkw deployment file

One file to ship, cache, and update. No multi-model pipeline to coordinate — simpler deployments on embedded hardware.

Wyoming Protocol server

Drop-in integration with Home Assistant. Run WakeWordLab as a Wyoming-compatible server and connect it to your voice assistant pipeline.

Single .wkw deployment file

Pack the model into one .wkw file for simple shipping, caching, and updates on edge hardware.

Microphone streaming

Optional mic support via wakewordlab[mic]. Stream live audio directly into the detector with VAD gating out of the box.

Install

pip install wakewordlab          # file scoring only
pip install wakewordlab[mic]     # + microphone streaming

Quick start

import wakewordlab

# Download a model (cached to ~/.cache/wakewordlab/models/)
wakewordlab.download("hey_jarvis")

# Start listening — VAD is on by default
detector = wakewordlab.WakewordDetector("hey_jarvis")

@detector.on_detection
def handle(event):
    print(f"Detected: {event.wake_word}  confidence={event.confidence:.2f}")

detector.start()
detector.wait()   # blocks until Ctrl-C
Full documentation on GitHub →

Custom wake word?

Need a model trained on a specific wake phrase or language? Get in touch and we can discuss what's involved.

info@apinference.com