I run an AI assistant at home, on the GPU box from the Oryx post. It listens, it talks, and it lives entirely on my own hardware. The problem with an assistant that lives in a server rack is that there is nothing to look at. A voice coming out of nowhere is a smoke detector, not a companion.
So I built it an eyeball.
The eyeball
The eyeball is a small round screen, 240 pixels across, attached to an ESP32. The ESP32 is the same tiny cheap chip that keeps showing up in my other projects. The screen shows a spinning 3D scene: a shaded ball in the middle, two geometric shapes orbiting it, one spinning against the other, and a ring of tick marks around the rim. It idles like that all day, slowly turning, a little machine planet on my desk.
Drawing 3D the hard way
The fun part is that this chip has no graphics hardware at all. Your computer draws 3D scenes with a GPU, a whole separate processor built for the job. The ESP32 has nothing like that, so every frame is drawn by the CPU, one triangle at a time, into a chunk of memory that gets shoved out to the screen over a wire.
That means writing the renderer yourself, the way it was done in the nineties. Triangles get sorted from farthest to nearest and drawn in that order, so the near ones cover the far ones. Each face gets brighter or darker depending on how squarely it faces the light. The see-through faces are done by reading the pixel already on the screen and mixing the two colors by hand. None of this is new computer science, but there is something satisfying about building it from nothing on a chip that costs a few dollars.
It reacts to the voice
The eyeball finds the assistant on my network by itself, no addresses typed in anywhere. While the assistant speaks, it streams how loud the voice is, moment to moment, over wifi. The eyeball uses that to drive the scene: one of the shapes splits apart along its seams, and the louder the voice gets, the wider it opens, like the sound is pushing it apart from the inside.
My favorite detail is what happens when the assistant starts talking. The spinning stops, and the whole scene snaps around to face you. It holds eye contact while it speaks, and when it finishes, everything drifts back into its lazy orbit. There is also a button on the back that makes the assistant speak on demand.
Problems
This board has a flashing ritual. To upload new code, you hold the BOOT button, tap RESET, and let go, in that order, like a secret handshake. Sometimes an upload works without it. You never know which kind of upload it is going to be until it fails.
Where it lives
It sits on my desk, it spins, and when the assistant talks, it stops and looks at me. Between the game board, the spell card, and now this, I seem to be building a whole family of small quiet machines that each do one thing. I am okay with that.