Setup guide

Control Adobe Lightroom from a Stream Deck over MIDI

Lightroom has no MIDI support of its own, but the free, open-sourceMIDI2LR plugin adds it — and once Lightroom is listening for MIDI, MIDIRover can drive it from your Stream Deck's dials and keys. Exposure on a dial, a preset on a key, white balance under your thumb.

This page is the part that is usually missing: which CC numbers are safe,absolute versus relative, and the one routing mistake that makes Lightroom pile up history entries on its own.

What you'll need

1. Give them a port to talk over

On Windows, open loopMIDI and create one port (the default name is fine). On macOS, skip this — MIDIRover publishes a port called MIDIRover automatically. Then, in any MIDIRover action, setMIDI Port to that port, and in MIDI2LR's settings choose the same port as itsinput. Full detail in the manual.

2. Use CC numbers MIDI2LR will accept

This is where most setups fail silently. MIDI2LR's own controller documentation is specific:

So in MIDIRover, pick a CC in 0–119, skip 98–101, and leave the dial in its defaultAbsolute mode. MIDIRover's named values help here — label CC 21 asExposure once and every dropdown shows it that way.

3. Map it in Lightroom

In MIDI2LR, click the Lightroom command you want (say Exposure), then move the MIDIRover control — turn the dial, or press a key set to Sweep mode. MIDI2LR learns the incoming CC and binds it. Repeat per parameter. Because MIDIRover sends ordinary MIDI CC, nothing here is MIDIRover-specific: if a control can be learned from a hardware knob, it can be learned from your deck.

4. Dials, or any deck

The mistake that makes Lightroom edit itself

If Lightroom starts logging history entries every couple of seconds with nobody touching anything, you have a MIDI feedback loop rather than a bug. MIDI2LR's maintainer describes the mechanism plainly: MIDI2LRreplies to all controllers whenever it sends a message. Send it MIDI on one loopback port, and it answers on that same port.

To be clear about where the loop is and is not: a virtual port is a loopback, so MIDIRover does hear its own output on it — but it recognises and discards its own echo, so you do not need a second port. The loop that bites here is between MIDI2LR and whatever else is listening: its replies go to every active controller and virtual driver at once.

What to do, in order:

MIDIRover stays silent unless you touch it

Worth stating because it matters for this pairing: MIDIRover sends only in response to a key press, a dial turn or a touch. It never transmits on a timer — no heartbeat, no re-send. (It does re-read the list of MIDI ports every few seconds so it can reconnect if one disappears and comes back, but that check only reads names; it puts nothing on the wire.) Measured on a Windows machine with a fully configured deck, a virtual port carried zero messages over twelve seconds of idle time. So if something is arriving at Lightroom unprompted, it is coming from the loop above or another device on the port — not from the deck.

What about Premiere Pro and After Effects?

Premiere Pro has no built-in MIDI control surface support either, and unlike Lightroom there is no widely-adopted free bridge equivalent to MIDI2LR. Third-party control-surface utilities exist and change often, so rather than publish steps that may be wrong by the time you read them: MIDIRover's job is to send the MIDI, and it will work with any bridge that can learn a MIDI CC, Program Change or Note. If you get a Premiere workflow going, tell us and we will document it here properly.

For editors, the honest alternative today is Stream Deck's own native actions plus keyboard shortcuts — MIDI only earns its place when you need continuous control, which is exactly where Lightroom's develop sliders sit.

Relative encoders, if you need them

MIDI2LR can interpret incoming data as relative encoder increments, and MIDIRover's dial supportsRelative mode with all three common encodings — signed-bit,two's complement and binary offset — so an endless encoder never makes a parameter jump on pickup. Note that relative CC over a virtual port is where users have reported the repeating-value problems above, so start in Absolute, confirm it works, and only move to Relative if you specifically need pickup-free behaviour.

Next steps

Get launch updatesAll guides

MIDIRover is not affiliated with Adobe or with the MIDI2LR project. MIDI2LR is independent, free and open-source; check its own documentation for the current details of its setup.