Lightroom preset to LUT: convert one with a HALD image

Lightroom cannot export a LUT, but you can capture a preset as one. Generate a HALD identity image, apply the preset to it in Lightroom, export it as a 16-bit TIFF, then convert that image into a .cube file. The LUT reproduces the preset's global colour and tone, and works in video editors. Local and texture settings do not carry over.

A preset is a list of slider values that only Lightroom understands. A LUT is a colour transform any app can read. To turn one into the other, you let Lightroom apply the preset to an image that contains every colour, then read the result back as a table.

Why can't Lightroom export a LUT directly?

Because a preset is not a transform. It stores settings such as Exposure +0.3 or Clarity +20, and Lightroom recalculates the picture from them every time. Some of those settings depend on the photo itself, so the same preset does slightly different things to different images. A LUT can only describe the part of a preset that maps one colour to another colour, the same way on every pixel.

That part is usually most of a look: tone curve, white balance shift, HSL, colour grading wheels, calibration and the base profile's colour. How to create a LUT covers the general idea, and its short Lightroom section mentions an approximate route through Photoshop. The HALD method below is more exact.

What is a HALD image?

A test image that contains a grid of every colour a LUT needs to sample, arranged in a fixed order. Run it through any colour change and the output image is, pixel for pixel, a lookup table for that change. A level 8 HALD is 512 by 512 pixels and becomes a 64-point LUT, which is more than precise enough. What a LUT is explains what the points in a LUT are.

What do you need before you start?

  • Lightroom Classic and the preset.
  • ffmpeg, to generate the HALD image and read it back. On a Mac, brew install ffmpeg installs it. Applying a LUT with ffmpeg has more on what it does.
  • Python 3, for a ten-line conversion script. It runs in Terminal with no extra packages.

How do you convert a Lightroom preset to a LUT?

1. Generate the identity image

In Terminal, in an empty folder:

ffmpeg -f lavfi -i "haldclutsrc=level=8,format=rgb48" -frames:v 1 hald-identity.tif

That writes a 16-bit TIFF that changes nothing yet. Keep a copy, since you can reuse it for every preset.

2. Apply the preset in Lightroom

Import hald-identity.tif into Lightroom Classic and apply the preset in the Develop module. Then switch off everything that is not a pure colour change:

  • Texture, Clarity and Dehaze
  • Sharpening and Noise Reduction
  • Vignette and Grain
  • Lens corrections, crop and transform
  • Any masks or local adjustments
  • Any Auto setting

These either look at neighbouring pixels or depend on the image content, and on a HALD image they scramble the table. Leave the tone curve, HSL, colour grading, white balance and calibration as the preset set them.

3. Export as a 16-bit TIFF

Export with these settings: format TIFF, compression None, colour space sRGB, bit depth 16 bits/component, resizing off, output sharpening off, no watermark. Name it hald-graded.tif. The file must still be exactly 512 by 512 pixels.

4. Turn the image into a .cube

Save this as hald_to_cube.py in the same folder:

import struct, sys

src, dst = sys.argv[1], sys.argv[2]
data = open(src, "rb").read()
pixels = len(data) // 6
size = round(pixels ** (1 / 3))
if size ** 3 != pixels:
    sys.exit("Not a HALD image: the pixel count is not a cube.")

with open(dst, "w") as out:
    out.write(f"LUT_3D_SIZE {size}\n")
    for i in range(pixels):
        r, g, b = struct.unpack_from("<3H", data, i * 6)
        out.write(f"{r / 65535:.6f} {g / 65535:.6f} {b / 65535:.6f}\n")

Then run:

ffmpeg -i hald-graded.tif -f rawvideo -pix_fmt rgb48le hald.rgb
python3 hald_to_cube.py hald.rgb my-preset.cube

The first line unpacks the image into raw 16-bit pixels. The script writes them out in the order a .cube expects, which is the same order the HALD image stores them in.

5. Test it

Apply the new LUT to an ordinary photo and compare it with the same photo and the preset in Lightroom:

ffmpeg -i test.jpg -vf "lut3d=file=my-preset.cube" -q:v 2 test-lut.jpg

Colour and tone should match closely. Texture and grain will not, because they were switched off on purpose.

What carries over, and what doesn't?

Preset settingIn the LUTWhy
Tone curve, contrast, highlights and shadows slidersMostlyGlobal tone; the sliders adapt slightly to each photo
White balance shiftYesA global colour change
HSL and colour gradingYesGlobal colour changes
Calibration and profile colourYes, as rendered on the TIFFPart of the colour pipeline
Clarity, Texture, DehazeNoThey depend on neighbouring pixels
Sharpening, noise reduction, grain, vignetteNoSpatial effects, not colour
Masks and local adjustmentsNoA LUT has no idea where a pixel is

What goes wrong most often?

  • The LUT looks different from the preset on raw files. Lightroom renders a TIFF differently from a raw file, and a preset that sets a raw profile changes nothing on a TIFF. Apply the preset to a JPEG and compare against that, not against a raw.
  • The look is far too strong on video. The LUT expects footage in normal contrast. Convert log footage to Rec.709 first; log footage explained covers why.
  • The script says it is not a HALD image. The export was resized or cropped. Export again with resizing off.
  • Odd colour blotches in the LUT. Clarity, Dehaze or an Auto setting stayed on. Switch them off and export again.

What can you do with the LUT?

Use the same look on video, in any editor that reads a .cube: Resolve, Premiere, Final Cut, CapCut and the rest. How to install LUTs covers each one. You can also bring it back into Lightroom as a profile with its own Amount slider, which using LUTs in Lightroom walks through, or hand it to a client who does not use Lightroom at all. If your presets came from a free pack, free Lightroom presets covers which ones are worth keeping.

Or apply it to a whole shoot. BatchTone reads the .cube as it is and applies it to a folder of photos and video clips together, with a strength slider on every file for the frames the look does not suit. A frame from each file is previewed before export, EXIF from JPEG originals is kept, the audio on clips is copied untouched, and the originals are never touched. It does not develop raw files, so export JPEGs from Lightroom first. It runs on macOS 12 or later on Apple Silicon. Batch applying a LUT to photos shows what it reads and writes, and the seven-day trial has everything unlocked.

Common questions

Is there a Lightroom plugin or app that does this?

Third-party converters exist, and most use the same HALD method underneath. The manual route above takes a few minutes, costs nothing and shows you exactly which settings went into the LUT.

What LUT size does this produce?

A level 8 HALD gives a 64-point LUT, larger than the common 33-point size. If an app refuses it, generate the HALD at a lower level or resample the LUT, though most modern apps read 64-point files.

Can I convert a Lightroom mobile preset the same way?

Only on a computer. The HALD image has to be graded and exported as an uncompressed 16-bit TIFF at its exact size, so get the preset into Lightroom Classic first and do the conversion there.

Will the LUT match the preset exactly?

Close, not exact. Settings that adapt to each photo, such as Highlights and Shadows, are captured as they behaved on the HALD image. On most photos the difference is small; on extreme exposures it shows more.

Read next

How-to · 6 min read

How to use LUTs in Lightroom: turn a .cube into a profile

Lightroom cannot open a .cube file directly. To use a LUT in Lightroom, open a photo in Photoshop's Camera Raw, Option-click the Create Preset button to get Create Profile, load the .cube under Color Lookup Table and save. The LUT then appears as a profile in Lightroom's Profile browser, with an Amount slider for strength.

Read it
How-to · 6 min read

How to create a LUT: four ways, and which to use

The reliable way to create a LUT is to grade one representative clip until it looks right, then export that grade as a .cube file. Resolve does this with Generate LUT on a node, Premiere through Export Color Look, and Photoshop through Export Color Lookup Tables. Grade on neutral, correctly exposed footage and put the creative work on its own node, because a LUT bakes in everything upstream of it, including exposure mistakes you did not mean to share.

Read it
Workflow · 4 min read

Free Lightroom presets: where the usable ones are

Adobe's own bundled profiles and the packs from camera manufacturers are the most reliable free starting points, followed by presets from photographers who show them applied to varied images rather than one hero shot. Almost every free pack is a mailing-list lead magnet, which is fine. The problem is not the price: it is that a preset encodes the light it was built in and yours is different.

Read it

One look. A whole shoot.

BatchTone applies your .cube LUTs across photos and video at once, with a strength dial on every file. Seven-day trial, everything unlocked.

Download for macOS