luMIDI

Turn Ableton Live into an LED light show. LumiDI is an open-source Max for Live device that streams pixel animations as MIDI notes to a Teensy-driven WS2812B strip — tempo-synced, automatable, and hackable.

⬇ Download LumiDI.amxd Try the simulator Source on GitHub Max for Live MIDI effect — requires Ableton Live Suite (or Live + Max for Live)

How it works

No DMX, no Art-Net, no serial protocol to invent — just MIDI notes. The LumiDI device runs an animation engine inside Live and streams complete pixel frames (~30 fps) out the track's MIDI output. A Teensy 4.0 running the open firmware shows up as a class-compliant USB-MIDI port, decodes the notes, and drives the strip. Because it's plain MIDI, everything is automatable, tempo-syncable, and recordable like any other instrument.

Ableton LiveLumiDI Max for Live device
MIDI notespixel frames, ~30 fps
Teensy 4.0USB-MIDI firmware
WS2812B stripthe light show

…or route the same notes to an IAC bus and preview in the browser simulator — no hardware needed.

The Ableton device

A Max for Live MIDI effect with 15 animations — Solid, Pulse, Chase, Rainbow, Strobe, Scanner, Breathe, Wipe, Theater, Burst, Hue Drift, Sparkle, Fire, Flip, and Wave. HSV color dials, a direction switch, free-run rate, and beat sync that locks the animation cycle to Live's transport (e.g. exactly one bar). Every parameter is automatable.

Try it — right here

Not a mock-up: this is the same lumidi-engine.js the device runs in Live, loaded straight into the page and driving a virtual 19-pixel strip through the real MIDI protocol. And just like in Live, animations only move while the transport plays — hit Stop and the frame freezes.

LumiDI
On
Sync

The real thing in Live

The LumiDI device in Ableton Live running the Rainbow animation: On toggle, animation menu, Fwd/Rev tabs, Hue/Sat/Bright/Rate dials, Sync toggle with sync-rate menu, a color picker, and a strip preview glowing in rainbow colors.
Rainbow — the strip preview along the bottom mirrors exactly what's streamed to the LEDs.
The LumiDI device running the Wave animation, its strip preview showing red waves.
Wave
The LumiDI device running the Chase animation, its strip preview showing a blue chase.
Chase

Using it

  1. Download LumiDI.amxd (or build it from source with python3 ableton/build_amxd.py).
  2. Drag it onto a MIDI track in Live.
  3. Set the track's MIDI To to the Teensy's MIDI port — or to an IAC bus to preview in the simulator.
  4. Set the track's MIDI From to "No Input". This matters: on "All Ins" the track hears its own output, trips Live's feedback protection, and knob changes get silently swallowed.
  5. Press play. Animations follow Live's transport — with Sync on (the default) the cycle locks to your tempo; turn it off to free-run at the Rate dial's speed.
⬇ Download LumiDI.amxd

Build one yourself

The hardware is a Teensy 4.0 and a strip of WS2812Bs plus two passive components. Firmware, the device, and this page all live in the repo.

Parts

PartNotesPrice
Teensy 4.0 The USB-MIDI brain. Appears to your computer as a class-compliant MIDI device. $23.80
WS2812B LED strip, 5 V 1 m at 30 px/m (5050 RGB, aka NeoPixel). The firmware defaults to 19 pixels; the MIDI protocol addresses up to 42. $9.95
330 Ω resistor In series on the data line, between the Teensy and the strip's DIN. You need one; they come in a 20-pack. $1.25
100–1000 µF capacitor 6.3 V or higher, across the strip's +5V and GND, close to the strip. Bigger is fine — the linked one is 4700 µF. $1.95
5 V power supply Budget 60 mA per pixel: 19 px ≈ 1.14 A at full white, so the linked 2 A supply has headroom. Power the strip from the PSU, not the Teensy. $7.95
Micro-USB cable Powers the Teensy and carries the MIDI. You probably have one already. $2.95
Estimated total ≈ $48

Prices as of August 2026, before shipping — and the links are just known-good examples; any equivalent part works.

Circuit

Wiring diagram: Teensy pin 7 through a 330-ohm resistor to the strip's DIN; a 5V PSU powering the strip's VDD with a 100–1000 µF capacitor across VDD and GND near the strip; Teensy, PSU, and strip grounds tied together.
Data from Teensy pin 7 through the 330 Ω resistor to DIN; strip powered by the PSU; all grounds common.

Firmware

The firmware is a PlatformIO project using FastLED:

git clone https://github.com/chris-albert/lumidi.git
cd lumidi/hardware/teensy
# set NUM_LEDS in src/main.cpp to your strip length
pio run -t upload

Once flashed, the Teensy enumerates as a USB-MIDI port — point Live's MIDI To at it and you're done.

The MIDI protocol

The firmware is deliberately dumb — anything that can send MIDI notes can drive the strip. The Max for Live device is just one client; your sequencer, script, or microcontroller can be another.

notes 0–125stage one color channel: pixel = note ÷ 3, channel = note mod 3 (R, G, B) velocity vchannel value = v × 2 — except velocity 1 writes 0 (velocity 0 is a note-off and is ignored) note 127"show" — latch the staged frame to the LEDs

Pixel writes only stage; nothing changes on the strip until note 127 arrives, so a frame always appears atomically.

No hardware? Simulate it

The strip simulator renders the same MIDI stream in the browser — pick a MIDI input, point Live's MIDI To at an IAC bus (macOS: enable the IAC Driver in Audio MIDI Setup), and watch the strip. It needs Chrome for Web MIDI, logs every decoded pixel write, and shows the latched frame rate — handy for debugging your own protocol clients too.

Open the simulator →