Back to Tutorials

An in-depth look at 3D LUTs in Pixelmator Pro

Pixelmator Pro now includes support for LUTs and, in this tutorial, we’ll explain what exactly these files are and how to use them.

What is a LUT?

First of all, what is a LUT? Imagine if the filters from your favorite filter app could be shared to other editors and even video editing apps so you could get the same look everywhere. That’s a basic (although very simplified) way of looking at LUTs.

LUTs are very common in the film industry and, equally often, they’re used not just creatively – to get a certain look and feel – but also to match the look of different cameras or correct unwanted color shifts. We’ll be focusing mostly on using LUTs for creative effect.

Quick overview of digital color

Before we get into the finer details of how LUTs work, let’s start with a quick recap of how digital color works. Using the three additive primary colors – red, green, and blue – you can create a much wider range of colors, pretty much every color you could need.

You do this by varying the intensity of each primary color. Imagine you have three colored lights: red, green, and blue. Every digital color can be expressed in RGB values, by specifying the intensity of each color using numbers from 0 to 255, for example. With 256 intensity values for each color, we’d be using an 8-bit-per-channel color depth.

To create pure red, you’d just shine the red light at full intensity and turn off the other two lights. To create yellow, you would shine both the red and green lights at 100% intensity. To create orange, you’d shine the red light at 100% intensity and the green light at 50%.

In 8-bit RGB terms, red is RGB(255,0,0). Yellow is RGB(255,255,0). Orange would be RGB(255,127,0).

8 bits? What’s that?

It’s called 8-bit color because, when counting in binary, 256 values (from 0 to 255) require 8 bits of data. 0 in binary is the same as the value 0 in the decimal (a.k.a. base-10) system that most us are used to. But the value 2 in the decimal system is expressed as 10 in binary. 3 in decimal is 11 binary, and 255 is 1111111. There are 8 ‘1s’, therefore 8 bits of data are needed to express this value.

What is a LUT file and what’s in it?

LUT stands for “lookup table” and a LUT file is actually a simple text file that contains a list (or table) of colors. Using that list, an app can find out (i.e. look up) that pure black, which is RGB(0, 0, 0) should be changed to RGB(5, 1, 1), a slightly faded black with a red tint. Instead of 8-bit or 16-bit integer values, LUT files often use floating-point notation – values from 0.0 to 1.0. In fact, if we open a LUT file exported from Pixelmator Pro in the TextEdit app, we’ll see just that – a long list of colors in fixed-point notation.

It should be noted that LUT files don’t include every possible color. With 16-bit color depth, there are over 281 trillion colors, which is an impractically huge amount. Instead, a number of samples – 32 or 64, for example – are taken along each each axis (R, G, and B) and other values are approximated from these. A 64x64x64 LUT might sound quite small, but such a lookup table contains 262,144 lines (64^3) in total and is around 7 MB in size.

Why is it called a 3D LUT?

The most important thing to note is that 3D LUTs have nothing to do with 3D computer graphics. The “three dimensions” refer to the fact that each color is sampled along three axes – the red, green, and blue channels mentioned above.

1D LUTs also exist, which are a little simpler and adjust the intensity values of one channel at a time. For example, the color orange is RGB(255, 127, 0) and dark green is RGB(0, 127, 0). So changing the intensity of the green channel will have an effect on both the oranges and the greens (as well as other colors), therefore 1D LUTs are less precise than 3D LUTs. However, they can also be imported and used in Pixelmator Pro.

How to use LUTs in Pixelmator Pro

Find the Custom LUT adjustment

To use LUTs, you’ll need to turn on the Custom LUT adjustment in the Color Adjustments tool. LUTs work just like any other color adjustment, so they can be applied to individual layers or layer groups.

Applying a LUT and finding the built-in LUT collection

Once you turn on the adjustment, you’ll see there’s a pop-up menu and an Intensity slider. You’ll notice Pixelmator Pro includes a collection of 48 LUTs, ranging from cinematic look LUTs to technical LUTs for grayscale conversion, and photo filters.

Also, notice that when you hover over a LUT in that pop-up menu, you’ll see a handy live preview of it in your image!

Applying your own LUTs

To apply your own custom LUT, you’ll need to open the pop-up menu and click Choose Custom LUT. The LUT you choose will automatically be imported to your Pixelmator Pro LUT library and will then always be available for you to use.

Intensity slider

A LUT works like any other adjustment, so it will be combined with other adjustments if they’re active. Using the Intensity slider, you can fine-tune how strongly the LUT is applied.

Converting a LUT into color adjustments

One really great feature of LUTs in Pixelmator Pro is that you can convert a LUT into adjustments. To do this, Pixelmator Pro uses the machine learning algorithm that powers ML Enhance, ML Match Colors, and our individual ML adjustments to intelligently reverse-engineer the LUT into Pixelmator Pro adjustments.

To convert a LUT into color adjustments, apply the LUT and choose Convert LUT into Adjustments from the Custom LUT pop-up menu.

Exporting adjustments as a LUT

One of the biggest advantages of using LUTs is that they work across many different image, video, and even 3D apps. If you’ve edited an image using some color adjustments in Pixelmator Pro and would like to apply the same adjustments to different images or videos in other apps, you export the adjustments as a LUT. To do that, open the More menu next to the ML Enhance button and choose Export Adjustments as LUT. You’ll also find this option when Control-clicking presets in the Presets browser.

Tip

Almost every adjustment in Pixelmator Pro is also supported in LUT files, except for the three adjustments below the Custom LUT adjustment (Sharpness, Vignette, and Grain) because these change the colors of specific areas of images, rather than every pixel of a specified color.

Managing your LUT collection

Managing LUT presets work a little differently from other presets in Pixelmator Pro – you can manage your collection directly in the Finder. If you turn on the Custom LUT adjustment, open the pop-up menu and choose Reveal in Finder, you’ll automatically be taken to the folder in which LUTs are stored. Simply put your LUTs there, organizing them into folders if you’d like them to appear in sub-menus in Pixelmator Pro.

Example LUT workflow with Final Cut Pro

Let’s take a quick look at one real-life workflow that would involve using LUTs – color grading a still from video footage using Pixelmator Pro and LUTs.

When editing video footage, you’ll often want to first correct its colors and then apply a specific look to the footage. If you enjoy using the color adjustments in Pixelmator Pro, you can export a frame from Final Cut Pro, edit it in Pixelmator Pro, and then apply those changes to your entire footage using a LUT.

To start, open some video in Final Cut Pro and export a frame by choosing File > Share > Save Current Frame. Export the frame in PNG or TIFF format and open it in Pixelmator Pro.

After opening the frame in Pixelmator Pro, adjust its colors – feel free to use either the presets, or make your own manual edits and once you’ve made your changes, open the More menu next to the ML Enhance button and choose Export Adjustments as LUT.

Finally, open Final Cut Pro again and apply the Custom LUT effect to your footage. In the Video Inspector, open the LUT pop-up menu, click Choose Custom LUT, and find the LUT you exported earlier from Pixelmator Pro.

Once the LUT has been applied, the look of your footage will be transformed according to the edits you made in Pixelmator Pro. Awesome!

Applying LUTs to multiple images using AppleScript

Pixelmator Pro includes extensive support for AppleScript and we’ve also made it possible to apply custom LUTs to files and images using AppleScript.

To make it easier to get started, we created a quick example script that can open a series of images in any supported format, apply a custom LUT to each one, and save the changes back to the same image whenever possible or another format for any formats that cannot be exported to. Here’s the script:

use scripting additions

tell application "Finder"
    set imagesToProcess to choose file with prompt ¬ 
              "Choose the images you'd like to process:" of type {"public.image"} with ¬ 
              multiple selections allowed
    set myCustomLUT to choose file with prompt ¬ 
              "Choose the LUT you'd like to apply to the layer:" of type {"com.blackmagicdesign.cube"}
end tell

tell application "Pixelmator Pro"
    repeat with currentImage in imagesToProcess

        tell application "Finder"
            set kindOfFile to kind of currentImage
        end tell

        set fileType to my returnFileType(kindOfFile)

        open currentImage


tell the front document tell the color adjustments of the first layer to set its custom lut to myCustomLUT end tell if fileType is not missing value then export the front document to currentImage as fileType close the front document without saving else activate set kindOfFile to choose from list {"JPEG", "PNG", "HEIF", "WebP", "TIFF"} with title ¬ "Choose Format" with prompt ¬ "This image format cannot be exported to. Choose an alternative format ¬ to which you'd like to export:" default items 1 OK button name ¬ "Choose" cancel button name "Cancel" without multiple selections allowed ¬ and empty selection allowed set fileType to my returnFileType(item 1 of kindOfFile) tell application "Finder" set currentImage to (container of currentImage) as alias end tell export the front document to ¬ ((currentImage & name of the front document & "." & item 1 of kindOfFile) ¬ as text) as fileType close the front document without saving end if end repeat end tell on returnFileType(kindOfFile) using terms from application "Pixelmator Pro" if kindOfFile is "PNG image" or kindOfFile is "PNG" then return PNG else if kindOfFile is "TIFF image" or kindOfFile is "TIFF" then return TIFF else if kindOfFile is "JPEG image" or kindOfFile is "JPEG" then return JPEG else if kindOfFile is "HEIF image" or kindOfFile is "HEIF" then return HEIC else if kindOfFile is "GIF image" then return GIF else if kindOfFile is "JPEG 2000 image" then return JPEG2000 else if kindOfFile is "Windows BMP image" then return BMP else if kindOfFile is "WebP Image" or kindOfFile is "WebP" then return WebP else if kindOfFile is "XML" then return SVG else if kindOfFile is "PDF document" then return PDF else if kindOfFile is "Adobe Photoshop Image" then return PSD else if kindOfFile is "Pixelmator Pro Document" then return Pixelmator Pro else return missing value end if end using terms from end returnFileType
Expand script

Open in Script Editor

Resources