DaVinci Resolve DCTL and OFX Plugins

This should be changed back to uppercase. I was running tests with the new Combo Box option and there was a conflict, but uppercase maintains compatibility with the ACES 1.1 plugin.

I forgot to add the 00 to the end of the function name. The function itself is a direct translation from the original CTL header, which was probably not intended for use within Resolve in its current form. It’s in the library purely for the sake of inclusion. The exp_factor is what is returning super high values (it’s 36 in the original CTL).

The ACES DCTL set should be used in Resolve YRGB, but the LMTs can be used in Resolve ACES (provided they included a conversion to and from ACEScct). In Resolve YRGB and Resolve ACES you can apply a DCTL as an input transform (pre node graph), within the node graph (clip level, and timeline), and as an output transform (post node graph). Fully modular. In Resolve ACES at the input level, the DCTL is applied before the conversion from ACES to ACEScct (or ACEScc), so an IDT DCTL can be applied here if not natively supported in Resolve.


I added two new DCTLS to ACES_DCTL_DR16

Both contain the full ACES library (minus ACESproxy and LMT_Analytic_2 related stuff), so no need for inclusion headers.

ACES_METAL_COMBO.dctl works in DR16 with the DCTL OFX Plugin, with drop-down menus for IDT, RRT, and ODT.

ACES_METAL.dctl works in both DR15 and DR16, and has a similar layout to ACES_Sample.dctl (plus all the precompiled stuff).

These 2 DCTLs will also work with CUDA, and there may even be a slight performance boost (compared to the un-precompiled versions).


Thanks to Nick Eason (over at LGG) I was able to precompile the full ACES transform library into a single header file, which can be included in a DCTL in both Metal and CUDA. The ACES_Sample option than was previously only available in CUDA is now available in Metal too. I tried OpenCL, but only the IDTs and some LMTs would work.

In a separate folder called ACES_DCTL_NEW I’ve added 3 files


ACES_LIB.h contains the full ACES transform library, ACES.dctl has a similar layout to ACES_Sample.dctl from the original ACES_DCTL set, and ACES_COMBO.dctl works in DR16 with the DCTL OFX Plugin.


Yes. The ARRIRAW IDTs should not be used in Resolve, as Resolve never presents the image data in its raw form, even if the source is ARRIRAW. It is already decoded. The value 36 is the multiplier from sensor linear to relative scene exposure at EI800. When that is incorrectly applied to image data which is already had EI gain applied, it will indeed produce ridiculously high values.

1 Like

I converted the ACES transform library into a Matchbox Shader. It works in Flame, but I haven’t tested it in Baselight or Scratch (or any other app that can run these shaders).

It has a similar UI to the combo box DCTL in Resolve. There are a few options included in the drop down menus, but the entire library is included in the .glsl file so the remaining options can be added as required.

Baldavenger ACES Matchbox Shader


I tested it in Scratch, and it runs successfully (and very fast too).

1 Like

Short(ish) video demonstrating some the options available in the Shadertoy ACES shader.


// Open Chrome with CORS disabled

open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security

// Open Console (cmd + alt + j) and paste this link (Arri LogC clip)

gShaderToy.SetTexture(0, {mSrc:‘https://dl.dropboxusercontent.com/s/faxgcvief55uljr/arri%20logc.m4v?dl=0’, mType:‘video’, mID:1, mSampler:{ filter: ‘linear’, wrap: ‘repeat’, vflip:‘true’, srgb:‘false’, internal:‘byte’ }});

// Arri LogC clip +3ev

gShaderToy.SetTexture(0, {mSrc:‘https://dl.dropboxusercontent.com/s/6th2uj79ym33y78/arri_logc_3ev.m4v?dl=0’, mType:‘video’, mID:1, mSampler:{ filter: ‘linear’, wrap: ‘repeat’, vflip:‘true’, srgb:‘false’, internal:‘byte’ }});

// Longer demo video

gShaderToy.SetTexture(0, {mSrc:‘https://dl.dropboxusercontent.com/s/y2oyr2pggimpx88/Showreel%20PD%202014.m4v?dl=0’, mType:‘video’, mID:1, mSampler:{ filter: ‘linear’, wrap: ‘repeat’, vflip:‘true’, srgb:‘false’, internal:‘byte’ }});

1 Like

Hi Paul,

for those of us still using Resolve 15 is there anything we could do to still be able to load the OFX?

Hi Paul, I tried to build a pipeline using your dctls for a new project(I did with success with past projects) and I found issues with the ADX10 IDT:

This is the image as it come from the lab:

This is how It looks using Davinci implementation of ACES:

This is how it looks with your dctls:

Maybe I’m doing something wrong, but the Alexa footage in the same project works as expected so I think the issue is located on the ADX10 IDT

Gotta Add I’m getting nice results without the IDT, maybe because the ACEScct its close to Cineon, but I’m still not sure its the best method.

Hi Paul,

Thanks so much for the efforts you’ve put into this. It took me a while, the first time I came here I did not understand the scope of everything you had done. Now I get it and it’s amazing you’re dedicating the time to the community.

Having an exposure controller for resolve and this alternatives to keying are just amazing.

On aproblem note:I tried installing the Edge Detect on the ofx folder but it won’t show up! And I believe that, specially for HDR grading this is very, very interesting.

What could be causing the issue?

I have a MBP 2018 on macOS 10.14.6.
Using Resolve 16.0.0



It’s a specifically strange behaviour from the ADX10 IDT in the old ACES DCTL set. It works fine in the ACES OFX Plugin and the new ACES DCTL set. I recommend switching to the new set (with the single library file).

Most of the OFX Plugins are CUDA only, which rules out your MacBook (no Nvidia). There may be, in the future, updates to the plugins that add OpenCL or Metal compatibility.

On aproblem note:I tried installing the Edge Detect on the ofx folder but it won’t show up!

No Edge Detect plugin. Perhaps you mean the Convolution plugin (which has an Edge Detect option). The Convolution plugin is perhaps more a showcase tool than a practical one. You’re better off using Resolve’s native OFX Plugin instead.

This thread (and website) is specifically for ACES related inquires, whereas yours seem to be of a more general nature. Perhaps you should try a more appropriate channel instead:

Hi Paul!

thanks for the answer. That makes total sense.
You are right, I’m referring to the Frequency Separation OFX that was described in the ACES TOOLS video.

But with the context around CUDA you provided, I’ll try and get a different configuration to check it out!

Thanks again!

Also, Paul, in playing with the LMT_PFE_OFX I get some great results. Thanks for that too!
I wonder if you have plans of adding the ability of exporting the LMT with adjusted settings as a dctl or as a cube.

By LMT_PFE_OFX, do you mean the actual DCTL? If you want export a version with updated settings, you can simply copy the original and then manually change the values in the text file.

The ACES OFX plugin can export both DCTLs and 3D LUTs, but the plugin itself is only CUDA and CPU compatible. The export options are CPU driven only, so should still work on a non-CUDA Mac.

Read back over the whole thread (and the LiftGammaGain one) for further information.

I’m updated the ACES DCTL repository on GitHub with the newer set (that contains just the single ACES_LIB.h file), which is compatible with CUDA, OpenCl, and Metal.

The older versions of the ACES DCTL set can still be found in the EXTRAS repository.

1 Like

Paul, I’m grading in AcesCct workflow on dr15 with your dctl scripts and plugins fully integrated in my company workflow.
the client (a huge vod streaming service) asks me for an exr ap0 graded dsm and a nam (non graded archival master) with the complete dctl set adopted to grade. this for long term archival storage purpose. they do not ask for the dr project, but just the luts/ctl/dctl package.
I know that plugins have the dctl script export option, but what about the parametric / slider-based dctl loaded in ofx --> dctl --> LMT.xxx.dctl?
the question is: is there a simple way to set the slider-param into the script? in other words, how can I export (or edit in the script) a fixed-dctl from a slider-based-dctl?
thanx everyone

I’m not quite sure I understand what you’re asking. The custom LMT option in the OFX Plugin has slider parameters, and any adjustments made are written into the exported DCTL.

If you want to ‘bake’ in any adjustments to any of the individual OFX DCTLs, just simply overwrite the default value in the text file with your new value, and then save it.

1 Like

thanks a lot, this is exactly what I was looking for.
It seems you implemented the LMT academy fix highlight magic matrix into PFE dctl (acescct), it’s true? it looks in a very pleasant way.

1 Like

Is there a tutorial on how to install these plug ins?

1 Like