Wake word detection,
open and on-device.
ViolaWake is a production-tested wake word SDK — Apache 2.0, ONNX-first, Python-native. Train custom wake words in minutes. No cloud, no metering, no lock-in.
Quick Links
API Reference
Full auto-generated docs for every public class and function in the SDK.
Browse API docs →README
Quick start, threshold guide, training CLI, voice pipeline, and feature comparison.
Read on GitHub →Contributing
Setup guide, coding conventions, how to add a model, and the PR checklist.
CONTRIBUTING.md →Installation
Minimum install — wake word detection only:
pip install "violawake[oww]"
Full install with microphone, TTS, and STT:
pip install "violawake[audio,oww,tts,stt]"
Linux requires portaudio19-dev; macOS requires brew install portaudio for the [audio] extra.
| Extra | What it adds |
|---|---|
audio | Microphone capture (PyAudio + soundfile) — requires PortAudio |
oww | OpenWakeWord backbone — required for wake word detection |
download | Model downloading with progress bars |
tts | Kokoro-82M on-device text-to-speech |
stt | faster-whisper speech-to-text |
vad | WebRTC VAD backend |
training | Full training pipeline (torch, librosa, scikit-learn, edge-tts) |
all | Everything above |
Quick Start
Download a model, then detect in 5 lines:
violawake-download --model temporal_cnn
from violawake_sdk import WakeDetector
detector = WakeDetector(model="temporal_cnn", threshold=0.80, confirm_count=3)
for audio_chunk in detector.stream_mic():
if detector.detect(audio_chunk):
print("Wake word detected!")
break
Full voice pipeline (wake → STT → TTS):
from violawake_sdk import VoicePipeline
pipeline = VoicePipeline(wake_word="viola", stt_model="base", tts_voice="af_heart")
@pipeline.on_command
def handle(text: str) -> str:
return f"You said: {text}"
pipeline.run()