# Control WLED LED Strip via MIDI keyboard

**URL:** <https://wled.discourse.group/t/control-wled-led-strip-via-midi-keyboard/15448>\
**Category:** Integrations\
**Created:** [July 7, 2026, 9:04am UTC](https://wled.discourse.group/t/control-wled-led-strip-via-midi-keyboard/15448 "2026-07-07T09:04:02Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![theTiPE](https://avatars.discourse-cdn.com/v4/letter/t/2bfe46/32.png) [@theTiPE](https://wled.discourse.group/u/theTiPE)\
**Post date:** [July 7, 2026, 9:04am UTC](https://wled.discourse.group/t/control-wled-led-strip-via-midi-keyboard/15448/1 "2026-07-07T09:04:02Z")

</div>

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.

![ezgif-10ecb4c7a8a25746](https://global.discourse-cdn.com/free1/uploads/wled/original/2X/3/397ed8a79a0099c40ef6ab1069fee2ca8737c201.gif)

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!

> **[GitHub - tim-peters/WLED-Midi-Keyboard: Control your WLED Led Strip via a compatible Midi...](https://github.com/tim-peters/WLED-Midi-Keyboard)**
>
> Control your WLED Led Strip via a compatible Midi Keyboard (tested with: Donner DMK 25 Pro)

Happy to answer questions. 🎹💡

---

<div class="post-metadata">

**Author:** ![theTiPE](https://avatars.discourse-cdn.com/v4/letter/t/2bfe46/32.png) [@theTiPE](https://wled.discourse.group/u/theTiPE)\
**Post date:** [July 15, 2026, 9:13am UTC](https://wled.discourse.group/t/control-wled-led-strip-via-midi-keyboard/15448/3 "2026-07-15T09:13:54Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Beennnn](https://yyz2.discourse-cdn.com/free1/user_avatar/wled.discourse.group/beennnn/32/10546_2.png) [@Beennnn](https://wled.discourse.group/u/Beennnn)\
**Post date:** [July 17, 2026, 12:30pm UTC](https://wled.discourse.group/t/control-wled-led-strip-via-midi-keyboard/15448/4 "2026-07-17T12:30:37Z")

</div>

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.

Hope that’s useful.
