Nodes/radiance/◎ Radiance ACES 2.0 Output Transform
ComfyUI Node

◎ Radiance ACES 2.0 Output Transform

ACES 2.0 output transforms, done properly

By fxtdstudios·Created 7 months ago·Updated 9 days ago· 242
◎ Radiance ACES 2.0 Output Transform
  • image
  • output_image
  • transform_info
input_colorspaceACEScg
output_transformACES 2.0 SDR (sRGB/Rec.709)
peak_luminance100
surroundDim
creative_white_scale1.00
exposure_adjust0.0
gamut_compress1.00

Most ComfyUI output is sRGB-shaped, which is fine until you actually care what the highlights do. If you're delivering an HDR10 file, a Dolby Vision master, or anything that will sit on a theatrical timeline, "just save the image" stops being an option - you need a display transform that knows the difference between a monitor and a projector. That's the whole job of the Radiance ACES 2.0 Output Transform node.

The pack frames it as "ACES 2.0 Output - Professional ACES 2.0 Display/View transforms," and the name is honest. This is the end of an ACES pipeline: it takes scene-linear data in an ACES working space, runs it through a display rendering transform (the DRT), and lands you in the exact color space and transfer function your target wants - sRGB/Rec.709 for web, PQ at 1000/2000/4000 nits or HLG for HDR, DCI-P3 D60/D65 gamma 2.6 for a cinema screen.

How it works

Think of the pipeline in three stages. First it normalizes your input into ACEScg (AP1) - if you feed it ACES2065-1, linear sRGB, or linear Rec.2020, it matrix-converts to AP1. Then comes the DRT: a tone scale that preserves highlight headroom (the is_hdr flag keeps the curve from crushing above-white), with gamut compression applied beforehand so out-of-gamut colors fold in instead of clipping. Finally it converts to the target primaries and applies the right electro-optical transfer function - PQ encoding for HDR10, HLG for broadcast, gamma 2.6 for DCI, sRGB gamma for SDR.

The order matters and the source is explicit about it: exposure → working-space conversion → creative white scale → gamut compression → tone map → primaries → EOTF. That's real color science, not a Saturation slider.

The inputs that matter

  • input_colorspace - where your data lives. ACEScg is the sensible default if you've been working in a Radiance chain; Linear_sRGB if you're feeding it straight from a VAE decode.
  • output_transform - the 8-way menu of destinations. The HDR PQ options are the headline feature; pick the peak-nits variant that matches your display or delivery spec.
  • peak_luminance (optional) - SDR white point in nits, default 100. Leave it unless you're grading for a dim theatrical room.
  • surround - Dark (cinema) / Dim (home theater, default) / Average (office). This nudges the DRT's perceptual surround adaptation. The reddit crowd mostly ignores it; colorists don't.
  • gamut_compress (1.0 = standard) - bump it if saturated colors are hard-clipping on the way down to a narrower gamut.
  • exposure_adjust (in stops) and creative_white_scale - your "look before the curve" controls.

It outputs output_image and a transform_info string (input → output, peak nits, surround) - wire that to a ShowText node if you want the delivery metadata visible.

The honest caveats

ACES 2.0 is overkill for a quick Discord upload. It exists so the same linear image can become an SDR web copy, an HDR10 master, and a DCI-P3 theatrical file without re-grading. If that's not your life, the simpler HDR Tone Map node gets you 90% of the look with less ceremony. And remember the pack's standing warning: this preserves the dynamic range that's already in your data - if you feed it an 8-bit source, it can't invent highlights that were clipped before they ever reached it.

Install

ComfyUI Manager → search Radiance → Install, or:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt   # or requirements_windows/linux/mac_silicon.txt

On Linux, install libopenexr-dev first. Then restart ComfyUI. If Manager refuses the pack on security-level grounds, the manual clone above is the fallback the README gives.

CategoryFXTD Studios/Radiance/Color

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
input_colorspaceCOMBOACEScgInput color space. ACEScg = ACES working space (AP1). Linear_sRGB = standard linear.
output_transformCOMBOACES 2.0 SDR (sRGB/Rec.709)Target output. SDR for web/broadcast, HDR for HDR10/Dolby Vision, Cinema for theatrical.
peak_luminanceoptFLOAT10048–10000SDR peak luminance in nits. Standard SDR = 100.
surroundoptCOMBODimViewing surround. Dark = cinema, Dim = home theater, Average = office.
creative_white_scaleoptFLOAT1.000.5–1.5Creative exposure adjustment before tone mapping.
exposure_adjustoptFLOAT0.0-4–4Exposure adjustment in stops.
gamut_compressoptFLOAT1.000–2Gamut compression strength. 1.0 = standard. Higher = more compression.

Outputs (2)

NameTypeDescription
output_imageIMAGE
transform_infoSTRING