← Builds
Activerunning in the house

Warren

Say the phrase and audio streams to a server in the house, which transcribes it, asks a model and answers out loud. Nothing leaves the building. The same microphone feeds a listener that groups speech into conversations and writes each one up.

Board
ESP32-S3 and a MEMS microphone on a 58 by 42 mm board of my own
Wake phrase
Trained from scratch on synthesized speech. 62 KB.
Pipeline
Voice detection, Whisper, speaker embedding, grouped on a three-minute gap
Summaries
Run on the local CLI tool, not a metered API

Timestamps come off the queue

Audio is stamped when it goes onto the transcription queue, not when transcription finishes, so a conversation is grouped by when people spoke rather than by when the transcriber caught up with them.

Speaker identification

Named voices are matched at a higher similarity threshold than anonymous clusters, and have to beat the best anonymous cluster by a margin before they are claimed.

Labelling a voice and learning from it are two separate decisions, so a match that is good enough to show is not automatically good enough to train on.

Diarization was rejected on the numbers

Proper diarization ran at nine tenths of real time on this hardware, against six hundredths for speaker embedding alone, and it invented dozens of speakers.

The board is generated, not drawn

Schematic, layout, routing, bill of materials and assembly files all come out of Python. The generator is edited; the layout never is. The back carries a line drawing exposed as bare copper through the solder mask.

Front copper and silkscreen of the Warren board: ESP32-S3 module, USB-C, castellated edge pads and a keep-out under the antenna
Front copper. The clear rectangle at the left is the antenna keep-out, which no trace or pour is allowed to cross.
Back copper of the Warren board with the pin map printed in silkscreen next to the header
Back copper. The pin map is printed next to the header so the board documents itself.
The sadbabyrabbit line drawing that is etched into the back of the board as bare copper
This goes on the back as bare copper, by leaving a hole in the solder mask in the shape of the drawing.