ACES LUT Generation In DaVinci Resolve

Tags: #<Tag:0x00007f632c66a698> #<Tag:0x00007f632c66a5d0> #<Tag:0x00007f632c66a508>

Hi there,
I am fairly new to the ACES workflow, but I am really liking it so far. Color matching different cameras has never been easier. And I have downloaded and applied a few LUTs for ACES that I really like. The one thing I’ve noticed however is that LUT generation is significantly different. I did not expect my old LUTs that I built around Rec. 709 or LogC to work in the ACES workflow as they were designed around a different color science (DaVinci YRGB). What I did expect though, was that when I designed a new look in the DaVinci ACES color science and generated a LUT that the look I designed would be baked in using the new LUT. This was not the case. When I applied the new ACES LUT it looked nothing like the look I had designed. The color shifts I had made were similar, but the exposure, contrast, and saturation looked like they had all been affected when I didn’t touch any exposure, contrast, or saturation tools when building the look. My only conclusion is that I missed a step in the ACES architecture somewhere along the way that is being retained in the data of the new LUT I am creating, and then when I apply the LUT it is doubling whatever setting I missed. Can someone help me understand what I am missing? I am using DaVinci Resolve 12.5. My image procesing is 32 bit floating point, my color science is DaVinci ACES, my ACES version is 1.0.2, my input Transform is Alexa, and my output transform is Rec. 709. Is there something I am missing when building the LUT? Or something I should be doing differently?

Vincent Lomascolo

1 Like

Hey Vince …

So glad you’re enjoying ACES so far! I’m hardly a Resolve expert, but there’s a few things to note here.

I believe there’s a bunch of gotchas with regards to exactly where one applies LUTs when using ACES in resolve (node graph vs. project settings, etc.). The other thing is that depending on the working space, you may need to make changes to LUTs, or modify append another transform before you apply the LUT. Your LUT is expecting a particular type of data and the Resolve may not be pushing the right kind of data into it. Finally, some workflows are built around the concept of working on display code values directly, others, such as ACES, expect there will be a rendering applied. LUTs built for one workflow may not at all work for another.

Hope this helps a little. I’m sure there are others on here that can help work through the details.


That is extremely helpful, thank you. I was applying the LUT through the node graph. I completely forgot to try and apply it through the project settings. I will experiment with the different applications and see what results it turns back. Also the fact that ACES doesn’t use direct code values is helpful to know. When you say ACES expects a rendering will be applied, what do you mean exactly? I know that LUTs built for other workflows aren’t easily translated, but I was assuming if I built a look with ACES settings and generated a LUT based on it, that the LUT could be applied under the same specifications that the look was mastered with and turn back the same results. Based on what you are saying I am wondering what data the LUT is and is not recalling, or what data it still requires to process correctly. I’m wondering if that is because of the direct code versus rendered values you were talking about.

Thanks Again,

Honestly, I’m not sure the node graph is the wrong place to be applying your look … others can pipe in here.

ACES data is scene referred. It needs to go through subsequent image processing to make the image look correct on a display. Specifically, it needs to go through an ACES output transform (RRT+ODT combination). Any grading is going to happen prior to those transforms in a a working space such as ACEScc or ACEScct. This is certainly very different then code values.

1 Like

The node graph in Davinci Resolve makes possible to apply different IDTs to multiple cameras or individual shot. The Timeline is used when using a single camera. The IDT applied in the Timeline is global.

1 Like

I find the best approach is to temporarily modify the node graph when exporting the LUT.

Resolve bakes in a transform from the working space, the RRT, and the current ODT (but not the IDT) when exporting a LUT. So in the OP’s situation you get a LUT which transforms from DaVinci ACES to Rec.709. This is not useful for several reasons. It doesn’t work if applied in the node graph in place of the grade, because it already includes the RRT and ODT so those get applied twice, giving the wrong result. Also, because DaVinci ACES is a gamma coded space, not log, the working space has values greater than 1 in it, and those are not handled by LUTs (unless you include a range or shaper, which Resolve’s “Export as 3D LUT” does not) so anything more than 2.5 stops above mid grey will be clipped by the LUT. This is bad!

DaVinci ACES is also non standard, so does not work well outside Resolve. I believe it has been removed entirely in the Resolve 14 beta. I recommend using ACEScc or ACEScct, the latter being my personal favourite.

To produce a LUT which can be used in Resolve in place of the grade, or in a compositing app, you need to remove the RRT and ODT from your exported LUT. Even if you choose “None” as your output transform, Resolve will bake a transform from the working space to linear ACES into the LUT. You therefore need to set an output which is the same as your working space. In Resolve 14 you can choose e.g. “ACEScct” as the output transform, so exported LUTs should then be able to be imported and used in place of the grade. I am not yet running Resolve 14, so have not personally tested this.

In Resolve 12.5 you cannot do this, so need to temporarily add a transform to your node tree to invert what Resolve “is going to do”. You can do this with DCTL. Pardon the self promotion, but I sell a set of DCTL files (ACES Utility Conversions) which can be used for this purpose. I also made a short screencast* (sorry it’s a bit rough and ready; I must make a better version!) showing an example of using the DCTL to export a LUT.

*Note: If you are confused by my reference to the “bubblegum effect” in the video, I am referring to an effect that happens with ACEScc, which I describe in this Mixing Light article.

If you want to export a LUT which includes the whole ACES process, IDT, grade, RRT and ODT, you can also use one of my DCTL IDTs to do this, by setting Resolve’s IDT to “None” and adding a DCTL IDT to the node tree, so it is included in the exported LUT, which you can then use stand alone, e.g. in a LUT box on set. I describe this process in another thread.


Another method for creating a LUT of the whole ACES process in Resolve is to use the “trim LUT”. I haven’t tested it in 14, but I’d bet it still works.

It Seems Like Resolve14 has solved this problem. I am working in 14.2, and I can export LUTS and then apply them to another clip in ACEScct. I don’t have to change the ODT or append my node tree. Works great, but there is a big difference between applying the LUT to a node (correct), and applying LUT to the clip in the timeline (which seems to apply LUT before it is in the ACEScct colorspace).

Yes, this is an important note. It is my understanding that a LUT applied via a node is applied in the current working space (e.g. ACEScct), whereas applying a LUT to a clip will apply it pre-conversion to the working space, but after any IDT, i.e. in ACES. I wish this type of stuff was better documented in their user manual.


I’m currently running Resolve 14.3 and am having issues producing an accurate LUT for VFX handoffs. It seems that no matter what export method I use, the results are never exact. As of now, the method that gets me closest to my original ACEScc grade is by simply exporting a 3D LUT without any node transforms and in the Rec.709 ODT that was used during the grade. When I load that LUT onto a node on an ungraded version of the same clip, the results are close in the midtones but highlights and shadows are clipping, producing a darker, more contrasty image.

Oddly enough, when I try exporting a LUT with my ODT set to ACEScc (which is my project color science) the result is exactly the same. I’ve experimented with quite a few different settings while exporting a LUT and have not had desirable results. Also, I’ve tried dropping my exported LUTs onto EXR files I exported in AP0 (no ODT selected during the render) to rule out any chance it could be some odd file discrepancy, and the results were the same.

I hope that is clear and makes sense, any help would be much appreciated.

The way LUTs are exported has changed in v14, so my earlier video demo and explanation of changing the node tree no longer applies. It appears that Resolve now exports a LUT of the grade only, which should be usable to replace the grade, either in Resolve or e.g. in ACEScct in Nuke. I just tested, and an exported LUT matches my grade.

If you are not seeing a match, I suspect this is not ACES related, and may be because you are using some grading operations which Resolve does not include in a LUT export. It is not always obvious which ones are excluded. For example, the highlight and shadow controls are not baked into LUTs.

You are absolutely right. It was Shadow and Highlight adjustments that were not translating. Thanks Nick, that was very helpful.

Correct. DR now correctly establishes the input space (automatically) and your grade LUTs on nodes correctly.