OCIO FileTransform
Drop a real .cube LUT on your generation — and respect what it was made for
- image
- video
- image/sequence/video
- ComfyUI Video
So you've got a LUT. Maybe a film emulation you paid for, maybe one a colorist exported for you, maybe a freebie you downloaded. OCIO FileTransform is the node that applies it: Nuke's OCIOFileTransform rebuilt, taking a LUT / CCC / CDL file and running every frame through it via OpenColorIO. It handles the formats a professional LUT actually comes in - .cube, .3dl, .spi1d, .spi3d, .csp, .ccc, .cdl, .clf - so you're not limited to the one .cube parser someone shoved into a random pack.
Mechanically it's simple: pick a file, choose an interpolation, run it. file_path is a picker of LUTs sitting in your ComfyUI input folder (drop a .cube there and it shows up), and there's an upload button to bring one in from your machine. interpolation is linear (default, the safe general choice), nearest (hard edges - a look-up table that isn't meant to be smoothed), tetrahedral (best quality for 3D LUTs, pricier), or best (let OCIO decide). direction forward or inverse lets you un-apply a LUT. mix blends with the original. Same as the other color nodes, image and video are mutually exclusive and a VIDEO in gives a VIDEO out, so you can LUT a native-video graph in place.
The trap, stated plainly
Feed it the domain it was made for. This is the one warning in the node's own tooltip and it's the one people hit. A LUT file is defined over a bounded input range - usually 0..1 - and OCIO clamps to that domain before interpolating, which is correct and is what Nuke does. Feed a scene-linear plate peaking at 15.37 through a .cube authored over 0..1 and your highlights don't get graded, they get clamped to the corner value, silently, with no error. The pack measured it: 1.05 out, exactly the LUT's corner. The fix is usually OCIO LogConvert ahead of this node - encode the data into the domain the LUT expects (a log curve, typically) and the LUT behaves the way it did in the suite it came from.
This same rule is why the node is safe to use and dangerous to trust blind. On ordinary SDR display-referred content in the 0..1 range, LUTs apply exactly as authored and look great. The moment you're running scene-linear or HDR data, think about the domain before you wire the LUT in.
Installing it
This ships in ComfyUI-OCIO by Slava Sexton (AI VFX NEWS). ComfyUI Manager: search "ComfyUI-OCIO", pick Nightly in the Select Version dialog - the numbered registry entries are stale and flagged, so Latest gets you old code. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/SlavaSexton/ComfyUI-OCIO
pip install -r ComfyUI-OCIO/requirements.txt
Restart; nodes appear under OCIO. It needs opencolorio, which requirements.txt installs. If your LUT doesn't appear in the picker, check you dropped it in the input folder (not the output folder), and that the extension is in the supported list. And if a LUT "does nothing," odds are the mix got left low or the direction is set to inverse - both easy to fat-finger and both silently plausible.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| file_path | STRING | No LUT in the input folder; type a path. FEED IT THE DOMAIN IT WAS MADE FOR: a LUT clamps anything outside its range to the edge, so a scene-linear plate peaking at 15 lands on the corner value silently. Put a LogConvert ahead. | |
| interpolation | COMBO | linear | 4 options: linear, nearest, tetrahedral, best |
| direction | COMBO | forward | 2 options: forward, inverse |
| mix | FLOAT | 1.000–1 | Blend with the original: 1.0 = full effect, 0.0 = bypass. |
| imageopt | IMAGE | — | |
| videoopt | VIDEO | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image/sequence/video | IMAGE | Image with the LUT / CCC / CDL file transform applied. |
| ComfyUI Video | VIDEO | — |