OpenClip Colour Transform
The colour node that makes log footage look like what your model trained on
- IMAGE
- MASK
- IMAGE
- MASK
Diffusion models were trained on ordinary Rec.709/BT1886 display-referred images. VFX plates arrive as log or camera colour space - wider gamut, scene-linear, and aggressively not-Rec.709. Feed raw log footage straight into an img2img model and you get the washed-out, wrong-hue result that makes people swear AI can't touch VFX. The OpenClip Colour Transform exists to fix exactly that handoff: it runs an OCIO view transform that converts the clip's log/camera space into the Rec.709 look your model actually expects.
How it works
OCIO is OpenColorIO, the industry-standard colour-management library, and this node wraps it through PyOpenColorIO. It builds a DisplayViewTransform: input colour space → display (Rec.1886 Rec.709) → view (default ACES 2.0 - SDR 100 nits (Rec.709)). That view step is the part that matters. A plain colour-space-to-colour-space conversion into a display space skips the ACES Output Transform, so bright saturated pixels come back negative or above 1.0 - out-of-range values are how you get bad reds and models hallucinating on nonsense pixels. The view is the tone-mapping and gamut-compression step, and the default is picked to match what Flame expects on import.
The config resolves in order: the $OCIO environment variable first, then the newest Flame ACES 2.0 config under /opt/Autodesk/colour_mgmt/configs/flame_configs/*/aces2.0_config/config.ocio, then empty. On a Flame workstation it just works out of the box; elsewhere you'll usually point it at your project's config by hand.
The inputs
IMAGE- required, obviously.ocio_config- path to a.ocioconfig file. Auto-detected, but you'll often override it.input_colour_space- the name of the source space as registered in the config (the ACES or log space your clip came in). Required; the node raises a hard error if it's empty, which is deliberate - a silent passthrough here would quietly poison everything downstream.view- defaults toACES 2.0 - SDR 100 nits (Rec.709); any view the config exposes works, so HDR or un-tone-mapped variants are one text edit away.MASK- optional, passed through untouched (zero-filled if absent, since the outputs expect both).
Where it sits
The README's advice is exactly right: insert it right after the Reader and before the model. IMAGE feeds the model, MASK keeps your alpha in the pipe. It's the bridge between "what Flame gave you" and "what the diffusion model wants", and it's the node that makes the whole round-trip concept work - skip it and your pipeline is technically functional but colour-broken.
How to install it
Same pack as the Reader and Writer:
cd ComfyUI/custom_nodes
git clone https://github.com/allklier/ComfyUI_OpenClip.git
or ComfyUI Manager (search "ComfyUI_OpenClip"), then restart. This is the one node that specifically needs opencolorio on top of the shared lxml + openimageio dependencies - Manager installs all three from requirements.txt. If you're not doing colour-managed work, skip the pack's opencolorio requirement entirely; the other two nodes run fine without it.
Where people get burned
- The config field comes up blank on a non-Flame machine. Set
$OCIOor just type the path to your.ocio. - Forgetting
input_colour_space- you'll get a hard error, which is the pack being helpful, not broken. - Swapping in a different
viewchanges the look more than you'd expect - the ACES Output Transform does real tone-mapping work, not a gentle grade. Test on a still before committing a full sequence.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| IMAGE | IMAGE | — | |
| ocio_config | STRING | — | |
| input_colour_space | STRING | — | |
| view | STRING | ACES 2.0 - SDR 100 nits (Rec.709) | — |
| MASKopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |