Concept & Research
Chromatic Confession
Interaction Design · Electronics · AI Integration
Overview
Type a secret. Broadcast only the feeling.
Confess privately. Broadcast only emotional charge.
Type a secret on the keyboard. Press Enter. A language model reads the emotional weight (not the words) and translates it into a live light animation on a 32×32 LED matrix. The room sees the feeling. Nobody sees the confession.
The Object
A confession machine


How It Works
Type, submit, witness
The interaction is three steps: type, submit, witness.
A physical USB keyboard is the only input. When the user presses Enter, the message travels via UART to a second microcontroller, which calls the ChatGPT API. The API returns a strict JSON of visual parameters: not a description and not text, but a data object encoding emotional intensity across dimensions like glitch amount, sparkle density, deformation, sharpness, HDR contrast, and ripple speed. The LED matrix renders these as an expanding, donut-shaped ring animation in real time.
The room sees the animation. Nobody sees the message.
Privacy by design
The system deliberately withholds the typed message from everyone but the confessor. Only the emotional weight, encoded as visual parameters, is broadcast. The room sees feeling, not content.



The Output
1024 pixels of emotional abstraction
The brief for this course was to embrace the limitations of a low-resolution display as design opportunities, not obstacles. The 32×32 grid (1024 pixels total) turns out to be exactly the right resolution for emotional abstraction. High enough to convey motion and texture. Low enough that nothing literal can be represented.
Each confession produces a unique animation. The same words typed twice would produce the same JSON parameters, but the timing, the room, and the person watching make it singular every time.
Design insight
32×32 (1024 pixels) is exactly the right resolution for emotional abstraction: high enough to convey motion and texture, low enough that nothing literal can be represented. The constraint enforces privacy architecturally.
Experimentation
Technical Overview
Components
System components
- Arduino Nano ESP32 (ESP32-S3): keyboard host that receives USB input and transmits via UART
- ESP32 (visual controller): calls ChatGPT API, renders animation to matrix
- 32×32 RGB LED matrix (HUB75, P6): visual output, 1024 pixels, 6mm pitch
- USB keyboard: physical text input
- ChatGPT API: emotion-to-JSON translation layer
- Laser-cut enclosure: chassis for component placement and cable routing
Reflection
The constraint was the point
The constraint was the point. A low-resolution LED matrix can't display text, faces, or recognisable forms, which makes it the right medium for a project about privacy. The output is abstract by necessity, not by artistic choice, and that constraint is what makes the concept hold.
The hardest technical problem was powering the USB keyboard from a board that doesn't source 5V VBUS via VIN. This was solved with a controlled VBUS injection that powers the keyboard while keeping data lines intact. A small fix with a lot of debugging hours behind it.
Takeaways
- Low resolution as a deliberate constraint: the matrix can't represent text or faces, which makes it the right medium for a privacy-first project. The limitation is the concept.
- The hardest technical challenge (USB power injection for keyboard VBUS) required the most debugging but had the cleanest solution: a single controlled injection that powered the keyboard while keeping data lines intact.