Maschine Mk3 running Maschine2LR with Lightroom

The long way to a decent controller

My goal was always the same: get through a big batch of images faster and with less mouse. The first attempt was a Midi Fighter Twister with MIDI2LR as the bridge. Sixteen knobs, endless rotation, works fine. The problem was that the knobs have no labels. I had to memorise what each one does, and after a two-week break I found myself turning the wrong knob again. It worked, but it never felt intuitive.

Then Loupedeck released the Loupedeck CT. Small device, six knobs, a few buttons and twelve touch buttons with a screen behind them. Finally I could look at the device and see what a button does. I used it a lot, but two things kept bothering me. Six knobs is not enough for me. I need at least eight, and with six I was constantly switching between two pages and always had the wrong one open. The other thing is Logitech. They bought Loupedeck, and there is no real successor for the CT. The one device they brought out since is, in my opinion, not worth talking about. If my CT dies, my workflow dies with it. That is not a comfortable position for a piece of hardware I use every week.

So I started looking again. Going back to MIDI2LR was an option. I wanted motor faders this time, so the Behringer X-Touch was on top of my list, but it was impossible to get one at that time. While searching around I stumbled over the Native Instruments Maschine Mk3. It is a huge thing compared to the Loupedeck, but it has two colour screens, eight endless encoders directly below them, sixteen big pads, a touch strip and LEDs everywhere. I found one on Kleinanzeigen for 250 Euro and thought: that is the perfect device for a Lightroom workflow tool.

Three months on the shelf

And then it sat on my shelf for three months. There is a MIDI2LR mapping for the Mk3, and NI has a template editor to turn the device into a generic MIDI controller. I hesitated to put all that configuration effort in, but eventually I went through it. It did work, to a degree. Then I wanted more precision from the knobs, and with MIDI that means mapping several channels to one element, and at some point I simply couldn't make it work. And I was back at the same problem as with the Twister: the screens showed nothing useful, so I had to memorise everything again. Slightly better than sixteen blank knobs, but not by much.

The real capabilities of the device, the screens, the encoder resolution, the touch on the knobs, are not reachable through MIDI at all. That is when I decided to build a new bridge that talks to the hardware directly over USB and uses it for what it can actually do. AI is helping me, what could possibly go wrong.

Talking to the hardware

Getting the hardware to talk was less scary than I expected, but it would have been impossible for me without a coding agent. I built the first prototype with Google Antigravity. The steps were: replace the manufacturer's USB driver with a generic one, figure out what the different USB interfaces of the device are for, decode the button and pad reports, and finally get the two screens to display something. The first confirmation that the whole chain works, from a knob turn to a moving slider in Lightroom, was there after one day.

Once or twice we ran into dead ends. One example: the agent wanted to figure out the button mapping and decided it needs Wireshark and USB capture tools for that. After an hour of watching it fight with logs, I took a step back and asked whether that is really necessary. The answer was a simple "Oh, true, I don't need this, I was looking at the wrong thing", and we were one step closer to a working prototype. The lesson I took from this: don't let it dig into a rabbit hole. Stop, restart the research and try a different direction.

The Lightroom side was more painful than the USB side, to be honest. The plugin API itself is fine, but getting the plugin and the bridge connected over two TCP ports cost a lot of time. Blocked ports, hanging processes, connections that looked open but weren't. Nothing dramatic, just the kind of thing that eats an evening.

From babysitting to product owner

I want to spend a paragraph on the tooling, because it changed how this project went. The first prototype with Gemini Pro was very painful. Only tiny baby steps were possible and I hit a lot of roadblocks. Of course, this early stage needed a lot of research nobody could skip, but still, it didn't feel good.

Then I switched to Claude Code with Fable 5 as the model, and it became a completely different story. Features started working on the first prompt. My role changed from babysitting a coding agent to something like a product owner. The tech stack was fully under control of the agent and I could focus on what I actually want the software to do. I did the usual things to keep it honest: a good test coverage so new features don't break old ones, and a set of requirements to make the program as secure as reasonably possible. It did all of that and explained the changes. My loop went from "prompt, review, test, commit" to "prompt, test", and the agent handled the rest, including fixing the CI pipeline when it broke. Quite impressive.

How it works

Maschine2LR has two parts. A small Lightroom plugin, which reads and writes the develop settings and tells the bridge which module and tool is active. And a Windows program, the bridge, which talks to the Maschine over USB, draws the screens and turns your knob turns and pad hits into commands for Lightroom. Nothing MIDI in between, the encoders deliver their native resolution of roughly 1000 steps per turn.

The two screens in the Develop module

The screens are the whole point. The bottom row shows the eight sliders the knobs currently control, with their live values. The left screen shows the pad and button layout with icons and labels, plus the exposure data of the current photo. The right screen shows the photo itself. Ratings, flags and colour labels show up too.

The mapping follows Lightroom. A profile belongs to a module and a tool. In Develop the knobs are temperature, tint, exposure and so on. Switch to Crop, and the same knobs become straighten, angle and the crop edges, the pads switch to aspect ratios and the Apply pad closes the tool. Switch to the Library and the pads are ratings, flags, previous and next. There is no "wrong page open" anymore, the device just follows what I'm doing.

The screens in the Library module

Hold Shift, and every control gets a second function with its own colour and label on the screen. The knobs are touch sensitive, so a tap on a knob resets the slider to its default, or triggers something else if you want. And the touch strip, which I had no plans for at all, became one of my favourite controls. More on that below.

The editor

Mappings are plain YAML files, but you don't have to touch them. The bridge comes with a profile editor that opens in the browser. Pick a profile, click a knob or pad in the drawing of the controller, choose what it does, pick a colour and an icon, done. The screens are previewed live in the editor, and the device picks up changes while the program runs.

The profile editor in the browser

The nice thing about building with an agent is that the editor didn't stay a bare-bones tool for myself. It became a proper UI that anyone can use. I don't think I would have taken the time to build it like that by hand.

My workflow today

To be honest, my workflow is not fundamentally different from before. I have pads to walk through the images, rate and flag them, and knobs for exposure, temperature, highlights, shadows and the rest. What is different is how it feels.

The thing that makes me happiest is the touch strip for exposure. It works relative: swipe your finger to the right and the exposure goes up, swipe left and it goes down. That feels extremely good, and my initial wish for motor faders is gone. The knobs are very precise, 1000 steps per turn make a difference you can feel. I do miss that they don't click. So I added a click sound instead, a tiny bit of feedback that tells me something happened. Two pads move the exposure up or down by exactly one stop, which I use constantly. Cropping I can do completely from the controller now, no mouse needed. And if the editor is missing something I want, I know exactly who to ask.

Donationware

This software was built for me. But since the tooling made it easy to make it user friendly, I decided to publish it. Except for the one-time swap of the USB driver, which the manual walks you through, it is nice to use. It is Windows only, needs Lightroom Classic and a Maschine Mk3, and there is no installer: unpack, start, done.

How to publish it was the harder question. My experience with software is that a paid product is a good motivation for a developer to keep going and to build what users ask for. For now, Maschine2LR is donationware. Use it for free. If it helps you, and especially if it helps your business, please donate something. And share your feedback, that is worth a lot to me at this stage.

Download, manual and the details are on maschine2lr.svenbluege.de.