Custom wake words. Open source. Yours forever.
Train a personal wake-word detector from your voice samples. Apache 2.0 SDK, ONNX models, no API keys. Works offline forever.
Get started free View on GitHub
Apache 2.0 licensed. No runtime API keys. No phone-home.
Quick answer: what is ViolaWake?
ViolaWake is an open-source wake word SDK and web Console for custom voice activation. Train from recordings, download an ONNX model, and run detection locally in Python. The hosted Console manages recording and training; runtime detection stays on device.
Why developers compare ViolaWake to Picovoice
Picovoice Porcupine is a proprietary wake word SDK with broad platform documentation and an AccessKey workflow. ViolaWake is the open-source path: Apache 2.0 SDK, ONNX export, inspectable training code, and no runtime API key.
| Feature | ViolaWake | Picovoice Porcupine |
|---|---|---|
| SDK license | Apache 2.0 SDK | Proprietary SDK and service terms |
| Runtime key | No API key or phone-home | AccessKey required by Picovoice docs |
| Model format | ONNX wake head with OpenWakeWord backbone | Picovoice .ppn/.pv model assets |
| Training path | Browser Console or open CLI | Picovoice Console text-to-wake-word flow |
| Local inference | Yes | Yes |
| Source | ViolaWake GitHub | Picovoice Porcupine docs |
Comparison checked as of 2026-05-08. Picovoice AccessKey requirement verified from Picovoice Porcupine Python Quick Start.
Accuracy and deployment signals
ViolaWake's production reference model is a TemporalCNN(96, 9) wake head with 25,409 parameters and a 102 KB ONNX export. The reference evaluation reports 0.8% EER and d-prime 8.58. User-trained models from 10 samples are personal-demo quality; accuracy depends on sample quantity, microphones, rooms, negatives, and threshold tuning.
Build path
- Sign up.
- Record 10+ samples.
- Train a custom TemporalCNN head.
- Review metrics.
- Download the ONNX model.
- Deploy with the Apache 2.0 SDK.
Use it from Python
from violawake_sdk import WakeDetector
detector = WakeDetector(model="my_word.onnx", threshold=0.80)
for frame in mic_stream():
if detector.detect(frame):
print("Wake word detected")
What makes the project useful
- Apache 2.0 SDK.
- ONNX wake head export.
- OpenWakeWord embedding backbone.
- Browser recording and training.
- EER, FAR, FRR, ROC AUC, d-prime, and threshold tooling.
- No API keys or phone-home at runtime.