All posts by jarnoh

Lightroom 6 with MIDI

And you thought this day would never happen! I’m of course talking about Lightroom’s GPU support. It allows us to have much more responsive processing, the sliders respond quite instantly to new values.

But wait, there’s more. LR6 also has some new API calls for plugins to use – unfortunately it is yet undocumented. I have however spent this week’s nights mostly reverse engineering the API, and I’m proud to present Knobroom v0.3 which has partial support for new LrDevelopController API, which seems to be a new way of setting develop sliders.

Here’s a little demo of the speed, recorded on a two year old MacBook Pro Retina 13″ using the Intel GPU. Those of you who have Mac Pros might get even faster response?

And how does the new API help? On the video, note how the slider section changes depending on which control I am moving. Also, see at 30 seconds where I am changing exposure and vignette with two hands, which results as a “Multiple Settings” history entry.

I addition to faster response, the API also seems to provide method for accessing different tools, and when the Adobe chooses to document this, I will add more functionality for the plugin.

Download 0.3.1042

Slight note: the new API only works in Develop module, meaning that the knobs do nothing if you are in Library mode.

v0.2 alpha builds

As many of you have noticed, there is automatic build of Knobroom 0.2 available at

These are on-the-edge versions from source repository, not tested and highly unstable versions. I’m planning to implement a couple of more features before actually releasing a more stable beta.

For issue and feature management, I’ve set up a repository at If you run into any issues, please submit a ticket there.

Here’s some features from my to-do list for the beta version:

  • using accessibility API
  • increment/decrement step mode for CC controls
  • 14bit CC mode
  • color labels
  • pick/reject
  • rating
  • applying develop presets (step mode)
  • view filters
  • metadata presets
  • mapping UI improvements

UI draft for MIDI Mapping

Yellow office buildingNew Knobroom version for LR4 is progressing steadily, and I’ve now reached the point that is sensible to create some UI elements as well. Except that Lightroom SDK is notoriously bad with growing UI elements. And if you’ve used the previous LR3 release, you might have noticed that creating lots of pulldown menus isn’t particularly fast either.

The main problem is that once you have created a list of elements, there is no way to grow the list. And since the creation of elements is slow, you really can’t just create lots of hidden controls either. MIDI protocol is quite extensive, e.g. there are 128 id’s of each event, possibly on several channels. And since I’d like to support quite advanced configurations, I need something which I can grow dynamically.

After few miserable attempts with pulldown menu spaghetti, I’ve come up with a list-based approach. Unfortunately, this simple_list component is only available on Lightroom 4. It is not dynamic either, but at least it is possible to unobtrusively fill it with blank rows.

Basically, you can load a mapping preset (in JSON format) and edit it further by clicking the row in the large listbox. When you select the develop setting from the last pulldown menu, it is updated to the listbox. You can also insert new rows into the listbox by selecting a new event type (note, control change) and note/controller key id.

Also, pay attention to the tab view section. The idea is that on the left there are the basic controls (“Base” for now), which specify the default controls. The other tabs override these controls, so that you can specify to use CC 4 as Fill Light when Process Version 2010 is in use. And similar handling to B&W Treatment and JPEGs (RAW Temperature, JPEG IncrementalTemperature)

I originally figured that it would maybe take me a couple of days to create the mapping UI. Fair estimate, but I’ve so far spent about ten times as many hours…

Anyway, I’m working on a new release, and no, I don’t have a set date yet, but I’m hoping to release few first releases during August.

Knobroom and Korg nanoKontrol

Sean McCormack has created a video of Knobroom used with a Korg nanoKontrol. It has non-motorized slides and knobs, so when adjusting a new picture, you first have to slide to old value, then the slider will start controlling the new value. (I think that is what I saw on the video. That’s how world operated before the motorized faders came affordable 🙂

Thanks for the effort, Sean!

I do have a Akai LPD-8 controller in the closet, I probably should investigate how it works with the current version. Akai has 8 velocity sensitive buttons (think of it as a small drum pad) and 8 rotary knobs.

I’m also working on the 0.2 release, which has been taking a bit longer than I had hoped. One of the excuses is that I’m replacing the control assignment display. It was already a bit slow to initialize, and there will be many more options in the future releases, so it also needs some kind of grouping.

ps. I was fully aware of the double meaning when I named the software – I hope it’s at least very hard to forget the name once you realize it… 🙂

The Fader, Lightroom plugin API and Camera RAW settings

Someone asked what values exactly is The Fader scaling, and what’s not being faded from preset into another.

In short, all the Lightroom’s numeric sliders I could think of are linearly interpolated between the current image settings and the chosen preset, but only if the preset sets new values for that value. This way, you can apply e.g. sharpening preset and still keep your cross-processing look the same.

What is not applied:

  • Point curve (maybe later)
  • Graduated filters (maybe later)
  • Red-eye removal
  • Dust removal
  • Adjustment brush
  • Process version
  • Color profile type
  • Color/Black&White Mix toggle
  • All attributes that select process or enable Auto-something, e.g. Defringe, vignette style, constrain crop, auto-exposure….

All values are interpolated linearly, except RAW white balance, which is (since v0.2) interpolated using 4 linear functions. This combination was figured out by dorfl68, the author of Paddy – thanks!

Outside 0-100% weight, it is still using the same linear interpolation, but as the value can go outside the proper range, clamping function kicks in. Without clamping, Camera RAW would just forget that the value is set at all.

After all the necessary values are interpolated, The Fader creates a “plugin develop preset”, which is then applied on the image. Every time a preset is applied, a new history entry will be visible on the image. Unfortunately, there is no way for me to prevent this, it’s part of the plugin API.

Here is the long list of Camera RAW internal develop settings which the plugin is using. If you notice anything missing, or values that have incorrect values, please get back to me!

Setting Name Minimum Default value Maximum
BlueHue -100 0 100
BlueSaturation -100 0 100
Brightness -150 0 150
ChromaticAberrationB -100 0 100
ChromaticAberrationR -100 0 100
Clarity -100 0 100
ColorNoiseReduction 0 25 100
ColorNoiseReductionDetail 0 50 100
Contrast -50 0 100
ExperimentalSharpenHaloLimit 0 25 100
Exposure -4 0 4
FillLight 0 0 100
GrainAmount 0 0 100
GrainFrequency 0 50 100
GrainSize 0 50 100
GreenHue -100 0 100
GreenSaturation -100 0 100
HighlightRecovery 0 0 100
HueAdjustmentAqua -100 0 100
HueAdjustmentBlue -100 0 100
HueAdjustmentGreen -100 0 100
HueAdjustmentMagenta -100 0 100
HueAdjustmentOrange -100 0 100
HueAdjustmentPurple -100 0 100
HueAdjustmentRed -100 0 100
HueAdjustmentYellow -100 0 100
LensManualDistortionAmount -100 0 100
LuminanceAdjustmentAqua -100 0 100
LuminanceAdjustmentBlue -100 0 100
LuminanceAdjustmentGreen -100 0 100
LuminanceAdjustmentMagenta -100 0 100
LuminanceAdjustmentOrange -100 0 100
LuminanceAdjustmentPurple -100 0 100
LuminanceAdjustmentRed -100 0 100
LuminanceAdjustmentYellow -100 0 100
LuminanceNoiseReductionDetail 0 0 100
LuminanceNoiseReductionContrast 0 0 100
LuminanceSmoothing 0 0 100
ParametricDarks -100 0 100
ParametricHighlightSplit -100 75 100
ParametricHighlights -100 0 100
ParametricLights -100 0 100
ParametricMidtoneSplit -100 50 100
ParametricShadowSplit -100 25 100
ParametricShadows -100 0 100
PerspectiveHorizontal -100 0 100
PerspectiveRotate -10 0 10
PerspectiveScale 50 100 150
PerspectiveVertical -100 0 100
PostCropVignetteAmount -100 0 100
PostCropVignetteFeather 0 50 100
PostCropVignetteHighlightContrast 0 0 100
PostCropVignetteMidpoint 0 50 100
PostCropVignetteRoundness -100 0 100
RedHue -100 0 100
RedSaturation -100 0 100
Saturation -100 0 100
SaturationAdjustmentAqua -100 0 100
SaturationAdjustmentBlue -100 0 100
SaturationAdjustmentGreen -100 0 100
SaturationAdjustmentMagenta -100 0 100
SaturationAdjustmentOrange -100 0 100
SaturationAdjustmentPurple -100 0 100
SaturationAdjustmentRed -100 0 100
SaturationAdjustmentYellow -100 0 100
ShadowTint -100 0 100
Shadows 0 0 100
SharpenDetail 0 25 100
SharpenEdgeMasking 0 0 100
SharpenRadius 0.5 1 3
Sharpness 0 25 150
SplitToningBalance -100 0 100
SplitToningHighlightHue 0 0 360
SplitToningHighlightSaturation -100 0 100
SplitToningShadowHue 0 0 360
SplitToningShadowSaturation -100 0 100
Vibrance -100 0 100
VignetteAmount -100 0 100
VignetteMidpoint 0 50 100
Temperature 2000 50000
IncrementalTemperature -100 0 100
IncrementalTint -100 0 100
Tint -150 150

Update bug

First the good news. Adobe Lightroom 3.2 update is out.

Bad news, the update wizard conflicts with Knobroom’s startup, meaning that both update dialog and Knobroom start dialog freeze and you have to kill the Lightroom task to solve it.

Workaround is to temporarily rename Knobroom.lrplugin folder, run the update and then rename directory back.

Sorry for the trouble, I’ll try to figure out a way to start the plugin without interfering with the built-in updater.

Growl On-Screen Notifications

As said earlier, I have only 8 knobs in my MIDI controller, so not all of the controls in Lightroom are directly available. Novation’s software provides several pages of controls, but when the controls are changed, it becomes very hard to remember which one is which.

For next release, I am planning to include on-screen notifications using Growl. Growl provides somewhat coherent way to display notification messages on screen and it’s available for both OSX and Windows.

That said, there are some big differences between those two versions – OSX version does not support GNTP protocol provided by Windows version. But on OSX, there’s a ready-made commandline tool for showing notifications (growlnotify)

Here’s a screenshot how it currently looks, using Growl’s built-in in “Music Video” display style:

Here, I’ve adjusted Exposure to +1.15. If you adjust multiple values at the same time, it picks one value to show – this might need some fine-tuning later on. But even now, it really helps if you lose track of which knob is which.

Implementation is currently just executing the growlnotify command from plugin server. My next task is to get the same functionality to Windows version, as I’d like to keep same features on both platforms in each release.


Cat’s out of the bag!


Lightroom 3 plugin for MIDI controllers

This plugin allows you to adjust photo develop settings using MIDI
continuous controller knobs or faders.


Unzip package to your home directory, giving you with this readme.txt
and Knobroom.lrplugin directory.

Ensure that your MIDI controller is connected, as the installation will
immediately open the device.

Start Lightroom 3, and open Plugin Manager from File menu. Click “Add”
and navigate to folder where the Knobroom.lrplugin is located. Select
Knobroom.lrplugin and click “Add Plug-in”.

Knobroom should immediately start and present you with a device
selection list. Select your MIDI device and the channel it is
listening. The channel is used for reprogramming device settings when
changes are made in Lightroom or the selected photo changes. Knobroom
always listens to all MIDI In channels.

You can assign MIDI CC numbers to Lightroom develop sliders using
File/Plug-In Extras/Knobroom/Assign Controls menu item. Selecting a
preset changes all settings at once, or you can modify each setting


You can either uninstall from Lightroom’s Plugin Manager, or if you run
into any sort of problems when starting Lightroom, you can just rename
or remove Knobroom.lrplugin directory when Lightroom is not running.

Release notes

Version 0.1.4 (public alpha release)

– This is alpha release and it is not yet recommended for production
usage. The version will expire by December 31, 2010.

– MIDI input is shown on every Lightroom start. This is to remind you
that Knobroom is running. MIDI input selection from File / Plugin
Extras does not work properly.

– If MIDI devices are not connected when Knobroom starts, the device
list is not properly updated later on.

– Sometimes, when photo is deleted, Knobroom stops working, and reports
with “nil” error message.

– Setting white balance does not work for JPEG images, or if RAW image
is not set to Custom white balance.

– Lightroom plugin spawns a separate server process for handling MIDI
input. The process is connected to Lightroom using TCP socket 56627.
If you are using special firewall software, you might need to open this
port manually or be prompted to accept connections.