Nodes/ComfyUI-ACES-IO/ACES IO — ColorSpace (OCIOColorSpace)
ComfyUI Node

ACES IO — ColorSpace (OCIOColorSpace)

Convert between any two color spaces without losing your mind

By BISAM20·Created 6 months ago·Updated 6 months ago· 9
ACES IO — ColorSpace (OCIOColorSpace)
  • image
  • ocio_config
  • in_colorspace
  • out_colorspace
  • image
directionForward

ACES IO - ColorSpace is the node you'll wire into almost every workflow this pack enables. Its job is boring on purpose: take an image, convert it from one OCIO colorspace to another, hand it back. In Nuke terms it's the OCIOColorSpace node, and it's the standard way to get all your inputs into one working space - usually ACEScg - before you composite, and back out again when you're done.

The thing to internalize: ComfyUI's own pipelines assume sRGB. If you load a render, run diffusion math on it, and save, the pixels are sRGB throughout. The moment you pull in an EXR (scene-linear, possibly HDR) or export to a grading app, that assumption silently breaks. ColorSpace is the bridge.

The inputs that matter

Only four, and the defaults are already sensible:

  • in_colorspace (default sRGB Encoded Rec.709 (sRGB)) and out_colorspace (default ACEScg). The defaults give you the single most common conversion: sRGB texture → ACEScg working space.
  • direction (Forward / Inverse). Flipping to Inverse swaps the two. So sRGB → ACEScg forward is ACEScg → sRGB inverse - handy when you've forgotten which end you're on.
  • ocio_config - the OCIO_CONFIG wire from the Config Loader. Everything in this pack needs one.

The colorspace dropdowns come from whatever config the loader is set to. Every entry has a Browse button that opens a Nuke-style picker: tabs for ACES / Display / Input / Utility / All, sub-tabs per camera vendor (ARRI, Sony, RED, Canon), and live search. That picker is where this pack earns its keep - the flat dropdown of a raw OCIO config is 200+ entries of unreadable names.

Typical chains

  • sRGB texture → ACEScg before compositing (the default).
  • ACES2065-1 → ACEScg when you ingest an EXR that's stored in the archival AP0 space - which is exactly what the EXR Loader hands you by default.
  • ACEScg → ACEScct if you want to grade in log before the final display transform, or camera log → ACEScg with a Studio config for live-action footage.

Output is a single image, so it slots anywhere: between a Loader and your image-to-image sampler, or between your sampler and a Saver. Because it's a pure passthrough otherwise, you can drop a chain of them anywhere in the graph.

Install & gotchas

It's in BISAM20/ComfyUI-ACES-IO. Manager → search ComfyUI-ACES-IO, restart. The dependency that matters is PyOpenColorIO (pip package opencolorio, not "PyOpenColorIO") - see the Config Loader article if install steps feel fuzzy; every node in the pack shares them.

Two things bite people:

  • Applying a colorspace transform you don't need. If in == out the node is a no-op, which is fine, but converting an sRGB image to ACEScg and looking at it will make it look dark and flat. That's correct - ACEScg is scene-linear. Put a Viewer or Display Transform after it before judging.
  • Config mismatch. The in/out names only exist in the config you loaded. Switch the Config Loader to a different ACES version and a dropdown that no longer matches falls back to defaults instead of warning you. Re-check your ColorSpace nodes after touching the config.
CategoryACES IO/Transform

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
ocio_configOCIO_CONFIG
in_colorspaceACES_COLORSPACEsRGB Encoded Rec.709 (sRGB)
out_colorspaceACES_COLORSPACEACEScg
directionCOMBOForward2 options: Forward, Inverse

Outputs (1)

NameTypeDescription
imageIMAGE