ethanhouseworth

← back to projects

DJ Lighting System

Feb 2026 · Updated Jul 2026 DJ / Hardware

Ethan Houseworth + Ultron

from a DMX board and a phone app to a full studio rig synced to the decks.

how it started

the first lighting setup in my apartment was a DMX board and two Venue Tetra 12 wash fixtures. physical faders, manual control. me and my friends would stand behind the decks and ride the sliders by hand during a set. it worked, sort of, but you're choosing between mixing and doing lights. you can't do both well.

then i added Govee gear. four COB strip lights and four smart bulbs, all WiFi, all controlled through the Govee app on your phone. suddenly the room had more color, more coverage. but now i'm juggling two completely separate systems. the DMX board for the stage fixtures, the phone app for the strips and bulbs. mid-set i'm stepping away from the decks to open the app, pick a scene, close the app, reach over to the DMX board, adjust the faders. it killed the flow. most of the time i'd just pick one look and live with it for the whole set because switching was too much hassle.

it was cool. it wasn't what i wanted.

the code

what i wanted was one system that controlled everything. DMX fixtures, LED strips, bulbs, all of it, responding to the music automatically. no app switching, no fader riding. just put on a track and the room comes alive.

so i started building it. i used Claude and Codex to write the first versions. the idea was simple: a daemon that talks to the DMX interface over USB, talks to the Govee lights over the network, listens to the audio coming out of the DJ controller, and changes the lighting based on what's playing.

the reality was brutal. this project took months. i'm not a lighting engineer or a DSP guy. i was figuring out DMX channel addressing, FFT audio analysis, Pro DJ Link packet structure, Govee's LAN protocol, all at the same time. older AI models couldn't handle it. i'd ask for a new feature and get code that almost worked but had some subtle timing bug that made the lights stutter or the beat detection drift. Opus 4.6 couldn't crack it. i actually started using this project as a stress test for new models. whenever a new model dropped, i'd throw the lighting system at it and see what happened. most of them failed.

Opus 4.8 finally cracked it.

what it is now

the system is called lightd. it's about 7,000 lines of Python running on my Mac mini, and it does everything i wanted and then some.

the hardware stack didn't change much. same two Tetra 12s, a Tetra Bar, the four Govee strips, the four bulbs. but now there's also a Scarlett 2i2 audio interface feeding raw audio in for FFT analysis, and an ethernet cable running from the Mac mini to the Pioneer XDJ-XZ. that ethernet connection is the key to everything.

lightd creates a virtual CDJ on the network. it shows up as Player 5 on the mixer's screen. through Pro DJ Link, it gets real-time beat position, BPM, track metadata, which deck is master, loop status, all of it. the lights don't guess where the beat is anymore. they know.

when a track loads into a deck, lightd pulls the phrase data from the Rekordbox analysis on the USB. it knows the track's structure: intro, verse, buildup, drop, breakdown, outro. it maps each section to a lighting mode and picks from 39 scenes across those six categories. scenes change on phrase boundaries, every 32 bars, with a lookahead that fires the transition before the beat so the lights lead the change instead of lagging behind it.

during a buildup, the intensity ramps up automatically. by the time the drop hits, the strobes are going, the wash fixtures are at full power, and then the drop lands and everything hits at once. it reads the silence before a drop and blacks out for a beat, then slams everything back on the moment the kick returns. that's the moment that gets people.

and the Govee lights are no longer on the cloud API with its 200ms round-trip. i found their LAN protocol, UDP packets at about 10ms latency. the strips and bulbs fire in parallel with the DMX fixtures now. everything hits together.

the studio

the best part isn't the automatic mode. it's the studio.

there's a web dashboard running on the Mac mini, pulled up on my phone or laptop. two pages: a live monitor showing what's happening in real time, what deck is playing, what track, what mode, what scene, current BPM, intensity level. and a scene editor.

the editor is where i live. i can build a scene from scratch, layer by layer. pick a chase pattern for the wash fixtures, set the color palette, add a strobe layer, dial in the rate, hit preview and see it on the actual rig in my room. don't like it? change a value, hit preview again. the scene hot-swaps without restarting the engine.

there's a blackout button for when things need to stop immediately. a refresh button to force a new scene pick. an intensity slider that overrides the automatic curve so i can dial the room up or down manually. and a build two-step demo that ramps a scene through the breakdown and buildup intensity curves so i can see how it'll look during a real transition without needing to play a track.

i've spent hours in that editor. it's where the system stops being code and starts being a creative tool. i'm not a programmer adjusting parameters. i'm a DJ shaping the room.

weekend pregames

every weekend it's the same thing. friends come over, i fire up the decks, lightd starts, and the room just works. i load a track and the lights follow it. buildups ramp, drops slam, breakdowns breathe. nobody's touching a phone or a fader. i just mix.

that's the whole point. the system disappeared. it's not something i operate anymore. it's just part of the room.

Architecture Prompt
Build a lighting system that unifies DMX fixtures and WiFi LED strips/bulbs into one daemon. Add Pro DJ Link integration over Ethernet to a Pioneer DJ controller for real-time beat position, BPM, and track metadata. Use Rekordbox phrase data for section detection (intro, groove, buildup, drop, breakdown, outro). Map sections to lighting modes with 39 scenes across 6 categories. Fire scene changes on phrase boundaries with lookahead so transitions lead the beat. Ramp intensity during buildups, detect pre-drop silence for blackout-to-slam transitions. Use Govee LAN UDP protocol (~10ms) instead of cloud API. Build a web dashboard with live monitor and scene editor for real-time editing during sets.
Share LinkedIn

subscribe for a monthly bonus article and updates on new projects and experiments.