As a photographer, if there is one thing I despise when editing my photos, it is jumping between multiple editing apps with one single photo and ending up with duplicate files where my settings are burned in and can’t be tweaked down the line. I would rather have just one file and be able to fine-tune all of my settings if I needed to at a later date. And for this reason, I started looking for ways to push Lighroom to do more than Adobe ever wanted it to be.
Lightroom was supposed to be just a RAW processing application. And if you wanted to do precise editing, you were supposed to go to Photoshop. But as someone who doesn’t do much compositing or complex retouching anymore, I started to see Photoshop as an annoyance since I was using it mostly for grain, resizing, content-aware fill, and basic stuff like adding borders for my social media posts. That’s why I spent the last year or so looking for workarounds to get more out of my Lightroom editing workflow so I won’t have to go to Photoshop that often and keep most of my work just to post processing inside Lightroom, and in the process, I learned a lot about how presets work and I even started messing with the code inside the .xmp files to get some extra functionality out of my presets.
What is a file .xmp?!
That’s the file format Lightroom uses to store the presets after you save them. They are stored somewhere on your computer, and to find them, just right-click on one of your presets in the preset list inside LR and click Show in Explorer. You can open presets with any basic text editor like Notepad, and its content will look like code. But don’t you worry; it’s super simple to understand, at least most of the time.
We don’t care too much about the first part, but if you scroll down a bit, you will see stuff like:
- crs:Saturation=”+10″ | this means the saturation slider is set to +10
- crs:Shwadows2012=”+25″ | which means shadows were saved at +25
- crs:HueAdjustmentGreen=+7″ | this means that in the HSL panel, the hue slider of green is set to +7
I bet you get the idea; it’s just a way to save the position of the sliders in text. But while reading presets in this form is cool, the fact that we can modify parts of the code and the preset will still work is way cooler. Just pay attention to the formatting because it matters a lot when it comes to coding. Speaking of coding, before we go any further, let me take a second and mention a few important things:
- If you are new to any kind of code. Take your time and read every line. .xmp files are similar to plain English but make sure to respect the same formatting when modifying values in the code.
- There is no risk of damaging Lightroom or your catalog by just playing around with the code of a preset
- It’s good practice to back up any preset before modifying the code. This way, you can also replace it with the previous version in case something is not working as you wanted it to.
- You will have to restart Lightroom for the changes to take effect after you modify the code
Simple editing – Curves
Let’s start with a simple example. In Lightroom, if you want to save settings from the Tone Curve panel, you have two options: Parametric Curves and Point Curves. The Point Curve includes all four channels: Luminance, Red, Green, and Blue. But what if we want to save them separately inside a preset?! — SORRY CAN’T DO! —And even if you only modify one channel, say the Green curve, and save it as a preset, Lightroom will still save the entire state of the Point Curves. That means it will overwrite the other three channels and reset them when the preset is applied.
But it turns out you can work around that! What I do is save the preset like normal, then open the .xmp preset file in a text editor. I look for the part of the code that refers to the point curves (starts with
This ability to isolate and preserve specific curve channels has been essential for my Color Response Curves workflow. It allowed me to build presets that translate color response curves from DaVinci Resolve film LUTs into Lightroom. More importantly, it enables realistic film emulation, where switching between different film emulations can be done, and the preset will only affect the RGB color channels without resetting your work on the Luminance curve.
And that’s just an example. Most of the time, a preset will store the default value inside a category, but if you just go in and edit the code to remove that section, it will continue to work and will only apply the values that are left in the .xmp file.
Borders Without Plugins: Just Brushes and Code
Another great example of .xmp code manipulation is the way I managed to create borders directly into Lightroom. This time, I’m using masking. Lightroom masking can be super useful on its own, but with a bit of help from some code and the brush mask, you can trace perfectly straight lines inside of Lightroom.
Lightroom uses a normalized coordinate system for brush masks, which means the positions of each brush stroke is stored as percentages instead of pixels. The top-left corner is (0, 0), the center is (0.5, 0.5), the bottom-right corner is (1.0), and the bottom-right is (1, 1), no matter the image size. And the brush sizes work the same way—something like 0.1 means the brush is 10% of the image width, and 1 means the brush’s radius is equal to the width of your photo. This system makes it easy to reuse masks across different images with different megapixel counts and aspect ratios. But this also means that with a bit of math that nowadays can be done with the help of Chat GPT, you can trace precise lines in your images, and that’s how I was able to create Borders directly inside Lightroom, and even better, I was able to add black bars to my 2.4:1 and 65:24 aspect ratios so they can be posted as 16:9 to social media.
Moreover, by editing the code, you can get much finer control over a lot of things inside Lightroom. Since lots of mask-related sliders have a stored value that goes from 0 to 1 (normalized system) with 5 decimals, this means you get 10000 steps on that slider.
The Hidden ID System Behind Lightroom Masks
Finally, the last thing I want to touch on in today’s article is the way Lightroom manages preset names, mask names, and the names of the mask components. While you can rename all of them in the user interface, that’s just a user-facing title, and in the background, Lightroom uses IDs made out of 32 characters.
In each preset, you will find a field calledcrs:UUID. This is the unique ID and is used to uniquely identify the preset itself. This enables you to have 2 presets in the preset lists, but they can contain different settings. Lightroom uses this to manage and reference presets internally without relying on the name alone. This is cool for iterating on presets, but even better is the fact that Lightroom has IDs for masks as well. The tag for it is:crs:CorrectionSyncID and you can have multiple presets that call up on the same mask, modify its setting, and at the same time change its user-facing name.
By editing .xmp preset files, I use this ID to replace generic mask names like Radial Gradient 1 with clear, custom labels – “Grain 400 Highlights”. Even better, the ID stays consistent across my presets, so if I apply All In One Grain 200 afterward, the name of the mask will change to Grain 200 Highlights, so I can easily track which presets I’ve used. It’s a small tweak that keeps my workflow organized and my preset names user-friendly. And now I am in the process of reorganizing all the preset on my store to include this nice and clear labeling.
Finally, there is crs:MaskSyncID. This one is the ID for mask components, and with it, you can do the same thing as with the mask ones, but they are not as useful, or if you have masks made out of 3 components, you can use them to write haiku.
I’m sure that I’m just scratching the surface here, and there are even bigger nerds that have figured out better ways to modify the .xmp preset files for amazing lightroom tools. But my goal today was not to compile a complete list of possibilities but to show people some examples of what is possible and how we – the users – can push the usability of presets within Lightroom’s limitations. So have fun thinking outside the box that is Lightrooms UI and start having fun with your presets.
About the author: Vlad Moldovean is a photographer and visual artist from Brasov, Romania. He describes himself as a nerd who enjoys seeking DIY solutions for photography problems. The opinions expressed in this article are solely those of the author. You can find more of his work on his website, Facebook, 500px, and Instagram. This article was also published here.