ACES Color Transform
Speak OCIO without leaving ComfyUI
- image
- IMAGE
ACES Color Transform is the pack's color-management workhorse: it converts an image between color spaces using the real ACES Studio 1.3 OpenColorIO config. If you've ever loaded an ACEScg EXR into ComfyUI and stared at a washed-out image, this is the node that makes it right - decode from ACEScg to sRGB and suddenly your render looks like a render, not a fog bank.
This is the "VFX handoff" corner of the toolkit. A ComfyUI image is a roughly-sRGB, 0–1 tensor; a VFX pipeline works in scene-linear float under an OCIO config, usually ACES. The gap between the two is exactly what this node closes: it decodes AI output into linear light and carries it as float (see the KB's post-processing notes on the color-managed handoff) or re-encodes a render back into the space a comp expects. This is niche - most people making finished images will never need it, and the sRGB path is correct for them. You need it the moment AI output has to sit in a color-managed shot next to real footage.
How it works
The default engine is ACES Studio 1.3 OCIO, which processes pixels in bulk through PyOpenColorIO - fast, and it unlocks all twelve source/target spaces, including the camera log spaces (ARRI LogC3/LogC4, Sony S-Log3, RED Log3G10). The ocio_config field defaults to the built-in config URI ocio://studio-config-v1.0.0_aces-v1.3_ocio-v2.1; point it at a local .ocio file or set the OCIO env var and it'll use that instead.
The alternate engine, Built-in matrices, needs no OCIO install at all - it's pure matrix math plus sRGB encode/decode - but it's limited to four spaces: sRGB, Linear sRGB, ACEScg, ACES2065-1. Pick a camera space under this engine and it throws an error, deliberately.
Two controls matter more than the rest:
reverse- flips source and target. This is the pack's answer to the round-trip problem:ACES -> sRGB -> ACES. The README's verified workflow is forwardACES2065-1 -> sRGB, backwardsource: ACES2065-1, target: sRGB, reverse: true.clamp_output- clips to 0–1 when true. The README is emphatic: set it false on intermediate nodes in a round-trip, because clamping destroys the HDR data the reverse transform needs to reconstruct.
The settings you'll actually set
source/target- the two spaces;ACEScg -> sRGBis the classic preview pairreverse- true for the backward leg of a round-tripclamp_output- false on intermediates, true on the final preview output
Install
The OCIO engine needs opencolorio installed into ComfyUI's Python - that's the one dependency people miss:
cd ComfyUI/custom_nodes
git clone https://github.com/azhagurajpandians/ComfyUI-ACES-EXR-Toolkit.git
python -m pip install -r ComfyUI-ACES-EXR-Toolkit/requirements.txt
Restart ComfyUI, and it's under image/ACES + EXR.
Gotchas
Missing opencolorio means the default engine fails at load time with a clear "install the opencolorio pip package" error - that's your cue, not a bug. And if you're on the built-in matrix engine, don't reach for ARRI/Sony/RED spaces; it can't do them by design. The error messages from this node are unusually specific about what it can and can't do, which is rare and welcome.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| engine | COMBO | ACES Studio 1.3 OCIO | 2 options: ACES Studio 1.3 OCIO, Built-in matrices |
| ocio_config | STRING | ocio://studio-config-v1.0.0_aces-v1.3_ocio-v2.1 | — |
| source | COMBO | 12 options: sRGB, Linear sRGB, ACEScg, ACES2065-1, Utility - sRGB - Texture, Utility - Linear - sRGB, +6 | |
| target | COMBO | 12 options: sRGB, Linear sRGB, ACEScg, ACES2065-1, Utility - sRGB - Texture, Utility - Linear - sRGB, +6 | |
| reverse | COMBO | false | 2 options: false, true |
| clamp_output | COMBO | 2 options: false, true |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |