
Our stage lighting is a shower curtain and a smart home light
That’s our sign at Grog Shop in Cleveland. The letters are cut from vinyl on my mother-in-law’s Cricut, adhered to a shower curtain stretched across a window frame I built from scrap wood and spray-painted black. Behind the curtain: a Philips Hue gradient lightstrip.
When I step on my guitar pedal to switch from a clean tone to a crunch tone, the sign lighting changes. Gradient chases that travel across the strip, lightning flashes, slow desert heat shimmers, a “highway traffic” effect with amber taillights and white headlights alternating. Twenty presets, all triggered by MIDI notes from my pedalboard.
I know, this is absurd. Professional stage lighting uses DMX protocol and there’s an entire industry built around it. I’m using smart home lights designed for living rooms.
But it works. We’ve played five shows with this setup. Grog Shop, Musica in Akron, a few bars, a house show. Nobody knows it’s a Hue light (or, they’ve at least been kind with their compliments). They just see a band with zero recordings or merch that showed up with a glowing sign that responds to the music.
The extra 10%
Most local bands we’ve opened for or played alongside are missing something. It’s not musical talent (the Cleveland music scene has plenty of that). What’s missing is the extra 10% that turns three or four or five people playing music on a stage into a show.
Awkward silence between songs, no signage, no visual identity, no sense that they’ve thought about what the audience experiences beyond the sound.
I’m past the days of wanting to tour, or being the next hype band. The ceiling here is lower than in my basement and I’m fine with that.
But music is an outlet for me. I still want to show up. I want to invest in the work. I want it to be obvious that we give a shit, even if we’re playing a Tuesday night to thirty people.
So: a sign, lighting that responds to the music, short instrumental beds I produce in Ableton to fill the gaps between songs, storytelling between tracks. The stuff that makes it feel like you’re watching a band that prepared.
My bandmates’ reaction to all this: “you’re being an overachieving nerd.” Fair.
Building the sign
The frame is old wood I had in the garage. I cut it to size, spray-painted it black, built a simple rectangle with cross-braces to create the window pane effect. The “glass” is a white shower curtain from Meijer. Cheap, diffuses light well.

I designed the HOMEDAYS lettering in Illustrator, cut it on the Cricut, and adhered it to the shower curtain. The letters block the light, so what you see is the glow around them.

Behind the curtain, a Hue gradient lightstrip. The gradient matters. It can display multiple colors at once, so the whole strip pulses and shifts rather than just switching from one solid color to another.

The physical build took a few days. Fun project. The kind of thing I might have done regardless of whether I could control it programmatically.
But I knew from the start I wanted to control it programmatically.
The technical problem
Here’s where it gets ridiculous.
My guitar rig is a Line 6 Helix Stadium XL. It’s a floor unit with expression pedals, footswitches, and a feature called Showcase that lets me sequence preset changes and MIDI events during song playback. When I step on a switch, it can send a MIDI note.
The Hue Bridge has an API, my MacBook can receive MIDI. There was a bridge to build here.
The first approach didn’t work. The standard Hue REST API can’t handle frequent updates—try to change colors multiple times per second and you’ll hit rate limits immediately. Anything animated, any traveling gradient, any pulse effect: impossible.
It took me weeks to discover the Entertainment API (the documentation for Hue developer is pretty buried). It’s a separate protocol: DTLS streaming over UDP, meant for syncing lights to media. No rate limits, real-time control. But nothing like the REST API I’d been fighting with.
The architecture
Click a footswitch to trigger the signal chain
The server listens for MIDI messages from the Helix. When I change presets (which usually lines up with a prechorus or chorus change in a song) the server translates that signal into an Entertainment API call. The sign changes color.
At venues, I can’t connect the Hue Bridge to their WiFi. So I plug the bridge directly into my MacBook with an ethernet dongle. The bridge and laptop form their own little network. Fits in a backpack.
The MIDI handling:
private handleMidiMessage(message: number[]): void {
const status = message[0];
const data1 = message[1];
const data2 = message[2];
// Handle MIDI clock for tempo sync
if (status === 0xF8) {
this.handleClockPulse();
return;
}
const messageType = status & 0xF0;
const channel = status & 0x0F;
if (messageType === 0x90 || messageType === 0x80) {
const isNoteOn = messageType === 0x90 && data2 > 0;
this.emit('note', {
channel,
note: data1,
velocity: isNoteOn ? data2 : 0,
timestamp: Date.now()
});
}
}The DTLS streaming connection:
async startStreaming(entertainmentGroupId: string): Promise<void> {
const config = await this.getEntertainmentConfig(entertainmentGroupId);
this.dtlsConnection = new DtlsConnection({
host: this.bridgeIp,
port: 2100,
psk: Buffer.from(config.clientKey, 'hex'),
pskIdentity: this.username,
});
await this.dtlsConnection.connect();
this.streamingActive = true;
}The supervision is the work
Overall, this really took about two quarter-attention months of trial and error. While AI can produce working code in seconds, the direction was the hard part.
Claude would write a Hue integration using the deprecated v1 REST API. I’d catch it and redirect to v2. Then I’d realize v2 couldn’t handle the update frequency I needed. Then I’d discover the Entertainment API existed. Then Claude would implement it wrong. Then I’d find the DTLS library it chose didn’t work on Mac. Then we’d try another one.
This is what agentic coding actually looks like. Supervised execution by someone with a vision for the outcome.
The presets
The best part: I can describe a visual to Claude and it generates the preset.
“I want something that looks like highway traffic at night.”
Claude built a chase animation with warm amber (taillights) and cool white (headlights) alternating across the gradient strip. It understood what I meant. I didn’t have to define the colors or the timing or the animation curve.
“Make a desert heat shimmer, warm and slow.”
Dusty orange, sand, terracotta, sage, slow crossfades. It just worked.
The preset system supports chase animations, gradient crossfades, lightning flashes, strobes, breathing effects. All defined in code, all triggerable from a MIDI note, all generated by describing what I wanted to see.
const COLORS = {
DUSTY_ORANGE: { x: 0.55, y: 0.40 },
SAND: { x: 0.44, y: 0.42 },
SAGE: { x: 0.38, y: 0.48 },
TERRACOTTA: { x: 0.58, y: 0.35 },
WARM_WHITE: { x: 0.45, y: 0.41 },
};At a show
Setup takes ten minutes. Place the sign on a guitar stand, plug in the lightstrip, connect the bridge to my laptop, launch the server, confirm the Helix is sending MIDI. By the time the opening band finishes their set, we’re ready.
During the set, I’m singing and playing guitar. I’m thinking about the next chord change, whether the monitor mix is too hot, whether that guy in the front row is enjoying himself or just waiting for us to finish. The lights are the last thing on my mind. They happen automatically when I switch presets, which I’m already doing for the tone changes the songs need.
Prechorus: clean tone, warm white sign. Chorus: crunch tone, orange sign. Bridge: ambient tone, slow purple fade. Outro: lead tone, blue pulse.
Once the system exists, it just works.
Between songs, I trigger the Ableton beds from the Helix (short instrumental tracks I produced to fill dead air while we’re tuning or adjusting). The sign shifts to a neutral ambient mode without the awkward silence.
PAPER rock
We play indie rock. Melodic, sometimes post-rock, a little poppy at times. I’ve been calling it PAPER rock: Post Alt Pop Emo Rock. Nobody asked for that acronym but I’m committed to it now.
We’re not going to be famous. We’re not going to tour. We’re three humans, fast approaching 40, playing original music to small crowds in Northeast Ohio, trying to put on a good show and forget about the dystopia around us.
That’s the whole point. Show up. Invest in the work. Make it obvious you give a shit.
Even if your stage lighting is a shower curtain and a smart home light strip controlled by a guitar pedal.
The code is on GitHub if you want to build something similarly absurd.