ACES IO — File LUT (OCIOFileTransform)
Drop any LUT file into your graph — .cube, .clf, .3dl, whatever
- image
- ocio_config
- image
ACES IO - File LUT is the node for when the look you want already exists as a LUT file on your hard drive. Someone in the studio baked a film emulation into a .cube, a colorist handed you a .clf, or you downloaded a "cinematic" 3D LUT that's been sitting in a folder - this node applies it through OCIO's FileTransform, which is the Nuke OCIOFileTransform equivalent. No manual curve editing, no reverse-engineering: point it at the file and the transform is applied as-is.
Inputs
lut_path- path to the LUT file. OCIO reads the common set:.cube,.spi1d,.spi3d,.clf,.csp,.lut,.mga,.3dl,.vf,.spimtx. If you connect anocio_config, the file is resolved using that config's search paths; without one, a bare raw config is used and the path must be absolute.interpolation- how the LUT is sampled between its grid points: Best (auto), Linear, Tetrahedral (the default - the accurate one for 3D LUTs), Cubic, or Nearest. For 3D LUTs you basically never want Nearest; leave Tetrahedral or Best alone.direction- Forward / Inverse. Inverse applies the LUT backwards, which is how you "un-grade" footage that had a LUT baked in, when the math is invertible.cccid(optional) - for.cdl/.cccfiles: the ID of the specific color correction to pull out of a CDL collection.
Output is a single image, and it's a pure transform - wire it anywhere a filter belongs, e.g. after the Viewer/Display transform to apply a final creative LUT before saving, or on top of a Log Convert to grade in log space like a real colorist.
Install
Part of BISAM20/ComfyUI-ACES-IO: Manager → Install Custom Nodes → ComfyUI-ACES-IO, restart, or git clone https://github.com/BISAM20/ComfyUI-ACES-IO into custom_nodes + pip install -r requirements.txt. The pack-wide dependency to watch is PyOpenColorIO (pip package opencolorio; Manager's install hook handles it - without it the whole pack fails to register).
Gotchas
- A LUT doesn't know your colorspace. A
.cubeapplies its own math to whatever pixels it gets. If your source is linear ACEScg and the LUT was authored for display-encoded sRGB, apply it after a Display Transform (or set up the chain so the LUT sees the space it expects). This is the most common "why does this look awful" cause, and it's a mismatch of intent, not a broken node. - Empty
lut_path= hard error ("lut_path is empty"). This node doesn't silently no-op. - Inverse isn't guaranteed clean. Some LUTs (quantized 3D LUTs especially) don't invert cleanly; you'll get banding or clipped results. That's the nature of the format.
- Every node in this pack re-runs each queue, so editing the LUT file on disk takes effect on the next run - no cache clearing ritual.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| lut_path | STRING | — | |
| direction | COMBO | Forward | 2 options: Forward, Inverse |
| interpolation | COMBO | Tetrahedral | 5 options: Best (auto), Linear, Tetrahedral, Cubic, Nearest |
| ocio_configopt | OCIO_CONFIG | — | |
| cccidopt | STRING | Optional CDL/CCC ID when loading .cdl/.ccc files |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |