Nodes/radiance/OCIO Transform
ComfyUI Node

OCIO Transform

Real colour management, minus the config wrangling

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
OCIO Transform
  • image
  • image
  • metadata
◄source_colorspaceACEScg►
◄target_colorspaceACEScct►
◄ocio_config_path►
◄look►
◄exposure_stops0.0►
◄directionForward►
◄clamp_outputfalse►

This is the node that decides whether Radiance is a toy or a tool. The KB's read on the whole colour-management corner is that it's real, thinly discussed, and specialist - "OCIO" shows up in barely a handful of threads in the corpus, and "OpenImageIO" in fewer, because the people who need it talk in VFX channels, not r/StableDiffusion. The reason to care is concrete: hand an sRGB PNG to a Nuke comp and gamma-encoded values get treated as linear light, which blows out every merge. You need to decode to scene-linear, speak the same transforms as the rest of the shot, and carry float.

OCIO Transform does exactly that, using an actual OpenColorIO config rather than a hardcoded matrix. It's the general-purpose partner to HDR Color Convert: that node does fast primaries math, this one runs whatever your config can express, including camera logs and looks.

How it works

You name a source_colorspace and a target_colorspace, and OCIO resolves both against the active config, then runs the processor. The pack does the setup for you at startup: if you already have $OCIO set, it uses yours (validated, never overwritten - the same contract as Nuke and Resolve). Otherwise it activates OpenColorIO's built-in ACES 2.0 studio config, serialising it once to ACES/studio-config.ocio inside the package so that other tools and custom nodes that only accept a path can use the same file. On OpenColorIO older than 2.2 there are no built-in configs, so it falls back to the bundled ACES 2.0 CG config. Nothing downloads.

Aliases and roles resolve, which is the quality-of-life feature: ACEScg, ACES - ACEScg and lin_ap1 all land on the same space.

Inputs and outputs

Required: image, source_colorspace (default ACEScg), target_colorspace (default ACEScct). Both are free-text strings, and the tooltip tells you to connect ACES Config Manager → List Colorspaces to see valid names in your config - do that once and save yourself a lot of typos.

Optional: ocio_config_path (blank uses the environment or the locally installed config), look (e.g. ACES 1.3 Reference Gamut Compress, which is a genuinely good look to have available), exposure_stops, direction (Forward or Inverse), and clamp_output.

Two design details worth understanding. exposure_stops multiplies the raw source values by 2^stops before the transform, so it's true exposure only when the source is linear - on a log source it's just a pre-scale. And direction: Inverse runs target→source, which is how you write a roundtrip test: forward then inverse, then check the reconstruction error is near zero.

Outputs: image and metadata. Alpha passes through untouched; only RGB goes through OCIO.

Install

Manager → search Radiance → Install → restart ComfyUI → refresh your browser. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt

Windows portable users: python_embeded\python.exe for the pip step. OpenColorIO is a hard requirement of the pack, and install.py will also try to make sure OpenEXR, diffusers and accelerate are present - because the colour pipeline is built on the first two.

Where people get burned

CG config versus studio config. The two bundled configs aren't equivalent: camera log targets like ACES - ARRI LogC4 (EI800) or ACES - Sony S-Log3 SGamut3.Cine need the ACES Studio config. If you set your own $OCIO to a CG config, those names won't exist, OCIO will refuse the transform, and it'll look like the node is broken rather than the config being smaller than you assumed.

clamp_output off is correct for HDR. Leave it on and you'll clip legitimate values above 1.0 in log or HDR outputs - the tooltip warns about this, and it's easy to flip "for safety."

The config is process-wide. Radiance makes its chosen config OCIO's current config so every OCIO consumer in ComfyUI resolves the same names. Useful for consistency, but it also means another pack that wanted a different config is now sharing yours.

CategoryFXTD STUDIOS/Radiance/HDR

Inputs (8)

NameTypeDefaultDescription
imageIMAGEImage encoded in source_colorspace. RGB goes through OCIO; alpha is passed through unchanged.
source_colorspaceSTRINGACEScgOCIO colorspace name of the input image. Connect ACESConfigManager -> List Colorspaces to see valid names. Aliases and roles are accepted: in the bundled ACES CG config 'ACEScg', 'ACES - ACEScg' and 'lin_ap1' all resolve. Camera log spaces such as 'ACES - ARRI LogC4 (EI800)' need the ACES Studio config, not the bundled CG one.
target_colorspaceSTRINGACEScctDesired output colorspace. Any OCIO name, alias or role in the active config. Bundled CG config log target: 'ACEScct'. Camera log targets ('ACES - ARRI LogC4 (EI800)', 'ACES - Sony S-Log3 SGamut3.Cine') require the ACES Studio config.
ocio_config_pathoptSTRINGPath to .ocio config file. Leave empty to use the OCIO environment variable or the locally installed ACES config.
lookoptSTRINGOptional OCIO Look name to bake in, e.g. 'ACES 1.3 Reference Gamut Compress'. Leave empty for a plain colorspace transform with no look.
exposure_stopsoptFLOAT0.0-10–10Pre-transform exposure in stops (multiplies by 2^stops). Applied to the raw source values before the OCIO transform, so it is true exposure only when the source colorspace is linear.
directionoptCOMBOForwardForward: source -> target. Inverse: target -> source (useful for roundtrip tests or undoing a previously applied transform).
clamp_outputoptBOOLEANfalseClamp output to [0, 1]. Disable for HDR / log outputs where values legitimately exceed display range.

Outputs (2)

NameTypeDescription
imageIMAGE—
metadataSTRING—