Hey everyone! Just wanted to share a small project I built for fun.
It’s a browser-based tool that lets you play your LED strip like an instrument: Press a key on your MIDI keyboard, the corresponding LED segment lights up; release it, and it fades out. Polyphonic, velocity-sensitive, and everything happens in real time.
The whole thing is a single HTML file you upload directly to your WLED device’s filesystem (no install, no extra server, no complex setup). Just open it in a modern web browser and you’re good to go. I tested it with a Donner DMK 25 Pro, where the three hardware knobs even map to color, brightness, and fade-out time out of the box.
It’s nothing serious, just a fun little experiment, but it opens up some interesting possibilities for live performances or just messing around. If you’ve got a WLED strip and a USB MIDI controller collecting dust, give it a try!
Thanks for the kind words, and that convention is a genuinely good idea - I’ve been thinking about exactly this problem without realising someone might actually spec it out properly. The credit is appreciated!
On your question: I went with interpolation, so the keyboard covers the whole strip as a continuous range. Feels more like playing an instrument that way, pitches map to positions the way you’d expect. That said, I added a small touch area on the side where you can address individual LEDs directly - which is its own kind of fun, more like a sequencer than a keyboard. Both modes have their place, I just didn’t want to force a choice.
Nice — serving it from the WLED filesystem is a clever move: same-origin with the JSON API, so no CORS to fight and nothing to install.
A couple of things from having built the same kind of thing:
Rate: WLED starts dropping commands past ~30 req/s over HTTP, which fast polyphonic playing blows past. Coalescing a frame’s note-on/off changes into a single POST /json/state (one seg[].i payload) keeps it smooth under a flurry of notes.
Secure context: Web MIDI needs a secure context, so a plain http://<wled-ip> page silently blocks MIDI on some browsers even though the rest works — localhost/https/a proxy fixes it; might be worth a README line.