The open AI speaker that works with ANY model. Switch between OpenAI, Anthropic, Gemini, Llama (local), or any future model with one click.
- π Model-Agnostic β Works with OpenAI, Anthropic, Groq, Ollama, Hermes Agent, OpenRouter
- π Privacy-First β Local wake word, physical mic mute, optional cloud
- π€ Voice Control β Wake word β Speak β AI responds naturally
- π Smart Home β MQTT + Home Assistant integration
- π Web Dashboard β Configure providers, view stats, chat via browser
- π§ Open Platform β Open-source firmware, community skills
- macOS (tested on Apple Silicon)
- Python 3.9+
- Microphone + Speaker/Headset
cd ~/novavoice
# Install dependencies
python3 run.py setup
# Or manually:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtEdit config/default.yaml:
llm:
default_provider: "openrouter" # or openai, anthropic, groq, ollama
providers:
openrouter:
api_key: "your-key-here" # Get free key at openrouter.ai
model: "google/gemma-4-31b-it:free"Or set environment variables:
export OPENROUTER_API_KEY="your-key"
export OPENAI_API_KEY="your-key"
export GROQ_API_KEY="your-key"python3 run.py textpython3 run.py voicecd ~/novavoice
source .venv/bin/activate
uvicorn web.server:app --host 0.0.0.0 --port 8301Then open http://localhost:8301
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Microphone ββββββΆβ Whisper STT ββββββΆβ LLM Router β
β (sounddevice)β β (faster-whisper)β β (any API) β
ββββββββββββββββ ββββββββββββββββ ββββββββ¬ββββββββ
β
ββββββββββββββββ ββββββββββββββββ β
β Speaker βββββββ Edge TTS ββββββββββββββ
β β β (or Piper) β
ββββββββββββββββ ββββββββββββββββ
| Command | Action |
|---|---|
| "Switch to OpenAI" | Switch LLM provider |
| "Use Claude" | Switch to Anthropic |
| "Use local model" | Switch to Ollama |
| "Clear history" | Reset conversation |
| "Status" | Show current provider & stats |
| "List providers" | Show available providers |
novavoice/
βββ main.py # Main application + voice loop
βββ run.py # Launcher script
βββ requirements.txt # Dependencies
βββ config/
β βββ default.yaml # Configuration
βββ audio/
β βββ capture.py # Microphone input (sounddevice)
β βββ playback.py # Speaker output
βββ stt/
β βββ whisper_stt.py # Speech-to-Text (faster-whisper)
βββ llm/
β βββ router.py # Model-agnostic LLM router
βββ tts/
β βββ edge_tts_engine.py # Text-to-Speech (Edge TTS)
βββ wake/
β βββ wake_word.py # Wake word detection
βββ web/
β βββ server.py # Web dashboard (FastAPI)
β βββ templates/
β βββ dashboard.html # Dashboard UI
βββ PROJECT_PLAN.md # Full project plan
| Provider | Models | Free? |
|---|---|---|
| OpenAI | GPT-4o, GPT-4o-mini | Paid |
| Anthropic | Claude Sonnet, Haiku | Paid |
| Groq | Llama 3.3 70B, Mixtral | Free tier |
| Ollama | Any local model | Free |
| Hermes | Hermes Agent | Free |
| OpenRouter | 100+ models | Free tier |
See PROJECT_PLAN.md for full hardware design:
- ESP32-S3 based
- 2x MEMS microphone array
- 3W speaker with I2S amp
- WS2812B LED ring
- Target BOM: <$70 at 100 units
MIT License β Open source, use however you want.