this is Recto Verso
/
//
an interactive art installation that takes something
invisible, your emotional state, and turns it

into something

you can actually see.

Role:
Concept, EEG signal design, real-time visual system (TouchDesigner), browser interface and UI, hand tracking interaction, spatial audio, exhibition and poster design, identity

Year
Spring 2026

Solo Project:
The Muse 2 headset is the only outside tool, used purely as the biometric input.
Everything else was designed and built by me.


This was my capstone, and the brief was mostly one I set for myself. I wanted to make something personal, something that didn't start from a client or a trend but from a feeling. Somewhere in the middle of school and client work I had lost track of myself, and I wanted to build a piece that could take that invisible, interior place and give it a form a stranger could step into. The challenge I held myself to was this: make an installation that bridges the body and the screen, that responds to a real person in real time, and that anyone can walk up to and understand without instruction. It had to feel like a quiet mirror, not a tech demo.

Problem

Brainwave data means nothing to anyone on its own. A column of numbers moving up and down doesn't make you feel a thing. The real problem was getting that signal to land, to feel like something instead of just sitting there as data. The sensor fought me too. The Muse 2's delta band gets thrown off by every blink and jaw clench, so I had to design around its unreliability. On top of that I had to keep brainwaves, video, audio, and hand tracking all running at once without the whole system collapsing, and pull a pile of separate files into one pipeline. And it all had to be simple enough that someone could put it on and understand it in seconds.

Insight

The meaning lives in how you map it, not in the data itself. Brainwaves only start to feel like something once each band is tied to an image a person can read on instinct. Calm should look like order. Tension should look like things breaking apart. The more I held back, the clearer it got. Fewer mappings and cleaner metaphors said far more than piling on complexity.

Solution

I built one connected real time system where a person's mental state visibly shapes the image in front of them, controlled entirely by hand, with no screen to touch and nothing to learn. The piece became less a machine to operate and more a thing that quietly reflects you back.

Secondary research:

I started by reading into how the EEG bands behave, Delta through Gamma, and which ones actually reflect calm versus stress. This is what later became the spectrum that runs across the System board.

Signal prototyping:

built the OSC signal chain in TouchDesigner, moving the raw readings through Select, Math, Filter, Lag, and Null to smooth out the jitter and turn an unstable feed into something usable.

Visual system design:

I iterated through several engines before landing on the final look, including a honeycomb particle system, a self displacing feedback loop, and an infinite biological zoom driven by beta activity.

Interface iteration:

The browser UI went through real revisions. It started as a carousel and ended as a two card grid with a focus interaction, paired with MediaPipe hand tracking I had to calibrate carefully so the pinch wouldn't flicker between open and closed.

Real-Time
AI Visual System

The network runs in two parallel layers. A CHOP chain — OSC In → Select → Math → Lag — receives live EEG data from the Muse 2 headband, smoothing the raw brainwave frequencies into stable values that drive the visual layer above it. There, a noise texture moves through a feedback loop that gives the image memory of itself, then gets color-shaped through HSV and Levels adjustments before landing in StreamDiffusionTD — a real-time Stable Diffusion component running inside TouchDesigner. The brainwave values simultaneously control both the visual parameters and the text prompt fed into the model, so what generates on screen is responding to brain state in two ways at once: in how it looks, and in what the AI is being asked to imagine.

Output Routing & Browser Bridge

From StreamDiffusion's output, the signal passes through an intensity node, composites over black, then hits switch1 — the router that determines which visual is active at any given moment. The result scales through resolution_web and splits toward two destinations: a local window1 for on-screen output, and null_web_out which feeds the final image to the browser via OBS Virtual Camera. On the right, webserver1 handles the WebSocket layer — a Python callback script running the two-way conversation between TouchDesigner and the browser, pushing live EEG data outward and receiving song selection and intensity controls back in

The Full Pipeline

The complete network runs left to right as a single continuous system. EEG data enters at the bottom through an OSC chain — selected, remapped, and smoothed — then branches upward to drive the visual layer, where a noise texture cycles through a feedback loop and gets color-shaped before reaching StreamDiffusion for real-time AI generation. That output moves right through intensity and compositing nodes, into switch1 which manages which visual is active, then scales for web and splits toward the local display window and null_web_out. The entire flow is orchestrated by webserver1 on the far right, keeping the browser and TouchDesigner in constant two-way communication.

Results

The finished piece is one unified system, and a few features carry it.Hands free navigation:

The whole screen is a touchpad you never touch. Open your palm and you get a cursor, pinch and you select. A stranger can walk up and use it in seconds with the three rules on the Navigate board.

Live brainwave visuals: The Muse 2 streams EEG into TouchDesigner over OSC, which renders the visuals and pushes the values to the browser over WebSocket.

A live bar shows all five bands while the image responds underneath.

Clean video path: The visuals run out through OBS Virtual Camera at 1080 by 1920 at 60fps using Spout, read straight into the browser. This avoided the lag and instability I hit trying to poll frames.

Three worlds and spatial sound: You move through three songs, each with its own visual world, including Em Đau which plays in both Vietnamese and English. The audio comes out as surround sound routed from TouchDesigner so it wraps around you.

Recto Verso did the thing I most wanted it to do. People didn't just look at it, they sat with it, and a few of them got quiet in a way I recognized. That mattered more to me than any technical part working. Looking back, the hardest lesson was trust. I kept wanting to add more, more mappings, more visuals, more proof of effort, and the piece only got better every time I took something out. If I keep going with it, I'd want the EEG sensing to be more robust so it leans less on workarounds, and I'd love to let two people wear headsets at once and see what happens when the visuals respond to both. There's something there about showing people not just their own inside, but the space between two of them.