Nodes/ComfyUI-ACES-IO/ACES IO — Viewer (Nuke Viewer)
ComfyUI Node

ACES IO — Viewer (Nuke Viewer)

Why your ACES render looks washed out — and the node that fixes it

By BISAM20·Created 6 months ago·Updated 6 months ago· 9
ACES IO — Viewer (Nuke Viewer)
  • image
  • ocio_config
  • input_colorspace
  • display
  • view
  • image
exposure0.0
gamma1.00
channelRGBA
looks_override
looks_override_enabledfalse

ACES IO - Viewer is the node that answers the most common complaint in this whole pack: "I loaded a proper EXR and it looks flat, grey, and wrong." Nothing is broken - your image is stored in scene-linear ACEScg, which is meant to hold raw light values, not to look like a picture. The Viewer is the Nuke-style monitor you put at the end of the chain that does the display transform (scene-linear → sRGB) so what you're looking at is what a colourist would see. Nuke users will recognize it instantly: it's built on OCIO's LegacyViewingPipeline, the same machinery as the actual Nuke Viewer.

What it actually does

The Viewer doesn't just cram a gamma curve on top. It runs the full viewing pipeline: your input_colorspace (default ACEScg) → exposure → channel swizzle → display view transform → display-space gamma. Two of those knobs are the ones you'll actually touch, and they mirror Nuke's Viewer E and G knobs:

  • exposure (−10 to +10 stops) - applied in scene-linear space, i.e. before the display transform. This is a true exposure offset on light values, exactly the "E" knob.
  • gamma (0.1 to 4.0) - applied after the display transform, in display-referred space, like the "G" knob. Bump it when the monitor preview feels dark, not when the scene itself is underexposed.

Then there's display (default sRGB - Display) and view (default ACES 2.0 - SDR 100 nits (Rec.709)), and a channel dropdown that lets you inspect single channels - R, G, B, A, or Luminance - which is invaluable when you're checking whether your alpha actually survived an EXR roundtrip. The optional looks_override / looks_override_enabled pair lets you force a look (say, a gamut compression) into the view, bypassing what the view transform itself declares.

The output is a single image, so unlike a pure preview node this thing can sit mid-graph and feed a saver. But realistically you'll hang it off the end of your chain: EXR Loader → ColorSpace → [your nodes] → Viewer → Preview, and use the exposure slider as your "is this lighting actually good?" check.

Install

It ships in the BISAM20/ComfyUI-ACES-IO pack. ComfyUI Manager → Install Custom Nodes → search ComfyUI-ACES-IO, or:

cd ComfyUI/custom_nodes
git clone https://github.com/BISAM20/ComfyUI-ACES-IO
cd ComfyUI-ACES-IO
pip install -r requirements.txt

The one dependency that actually matters is PyOpenColorIO - note the Python package is named opencolorio (PyOpenColorIO isn't on PyPI under its own name). Install via Manager and it handles this automatically; manually, pip install opencolorio>=2.3.0 or conda install -c conda-forge opencolorio. No model downloads - ACES 2.0/1.3 configs ship inside OCIO itself.

Where people get burned

  • Stale previews. This pack deliberately makes every node re-execute on every run (it returns nan from IS_CHANGED), so your exposure changes always apply. That's a feature - colorspace nodes caching wrong is the usual pain elsewhere.
  • Wrong display/view after switching configs. If you change the config in the Config Loader and the saved display/view no longer exist in it, the node silently falls back to the new config's defaults instead of crashing. If your preview suddenly looks different, check that.
  • Don't use the Viewer as a final transform. It's a monitor. When you want to bake the display transform into pixels - e.g. to save an sRGB file - reach for the ACES IO - Display Transform node instead. That's the difference between looking and committing.
CategoryACES IO/Viewer

Inputs (10)

NameTypeDefaultDescription
imageIMAGE
ocio_configOCIO_CONFIG
input_colorspaceACES_COLORSPACEACEScg
displayACES_DISPLAYsRGB - Display
viewACES_VIEWACES 2.0 - SDR 100 nits (Rec.709)
exposureFLOAT0.0-10–10Exposure offset in stops (linearCC, scene-linear space)
gammaFLOAT1.000.1–4Display gamma correction (displayCC, after display transform)
channelCOMBORGBA6 options: RGBA, R, G, B, A, Luminance
looks_overrideoptSTRING
looks_override_enabledoptBOOLEANfalse

Outputs (1)

NameTypeDescription
imageIMAGE