$ cd ~/projects && ls

Voice Agent (Lux)

Raspberry Pi smart speaker with a local wake-word model and live-voice LLM backends.

Raspberry Pi Python Wake Word OpenAI Realtime Gemini Live Grok Voice WebRTC

Overview

Lux is a smart speaker I built on a Raspberry Pi that detects the wake word “Lux” locally, then opens a real-time bidirectional voice connection to one of three LLM providers — OpenAI Realtime, Gemini Live, or Grok Voice — for full-duplex conversation. Everything routes through the Badland API, so context, memory, and tool calls all stay consistent across the chat, agent, menubar, and voice surfaces.

Architecture

Why it matters

Most off-the-shelf smart speakers lock you into one vendor and one assistant. Lux uses whichever provider has the best live-voice experience that month (Gemini Live tends to win currently) without locking the surface to the provider. And because the API call shape is identical to chat.badland.ai, switching providers is a config change, not a rewrite.