№ 0103GitHub★ Pick
Tarquin: StackChan robot butler on Muse Spark
Custom firmware and a Go server that turn an M5Stack StackChan into Tarquin, a voice-driven robot butler with wake word, face tracking and on-device speech, using Muse Spark 1.3 via the Meta Model API as its brain.
Otter-chan / Tarquin
Custom firmware and server for the M5Stack StackChan (CoreS3, ESP32-S3) that turns it into
Tarquin: a Victorian butler with a dry wit, a British male voice, a camera that follows you, and a
bridge to your Grok bots.
StackChan (firmware/) ── WiFi/WebSocket ──► Tarquin server (server/, Go) ──► Muse Spark 1.3 (Meta Model API)
mic → VAD → PCM ├─ parakeet-server (STT, ggml) ◄── Grok bots (REST, bearer)
speaker ◄ TTS PCM └─ otter-vox (Audio8 TTS, ggml)
camera → motion + face assist
servos, LEDs, face on screen
No Python at runtime. Speech runs on CPU via ggml (parakeet.cpp for STT, otter-vox for TTS).
Features
- Side button: click = open mic until you stop talking; click again = close mic; double-click = hard
mute (wake word off); hold = sleep / wake. The bottom button is the hardware reset line and cannot be
intercepted by software (it reboots), so sleep lives on the side button hold and on/api/sleep. - Wake word "tarquin" (hands-free, on-device): a microWakeWord streaming model trained here
(tools/wakeword/) runs on the ESP32-S3 via tflite-micro, ~1 % CPU, no network. Falls back to shipping
short clips for server-side matching if no model is compiled in. - Butler: Muse Spark 1.3 (contributor tier by default) with tools: message bots, read bot status,
take and look at a photo (multimodal), timers, notes/memory, gestures, lights, volume, sleep, tracking. - TTS: piper by default (native, ~25× real time on CPU, British male voices
en_GB-alan-medium/en_GB-northern_english_male-medium), orOTTER_TTS_ENGINE=voxfor the Audio8 zero-shot "tarquin" clone
(needs a strong GPU to be quick). Sentence streaming starts speech while the model is still writing. - Screen: animated robot face (blinks, gaze follows you, mouth syncs to speech, expressions from the
LLM) plus live cards for each Grok bot's activity (coding cursor, browsing globe, thinking dots…). - Tracking: camera motion centroid on-device + server face detection (pure Go, pigo) → head follows you;
returns home when you leave. - Fun: head-touch tap = happy nod, swipe = volume, hold = hearts; shake it = "I am not a cocktail";
screen tap = wink, hold = IP/battery; idle fidgets; LED patterns per state; dance gesture; timers spoken aloud.




