◎ Radiance ACES 2.0 Output Transform
ACES 2.0 output transforms, done properly
- image
- output_image
- transform_info
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.
ACEScgis the sensible default if you've been working in a Radiance chain;Linear_sRGBif 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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| input_colorspace | COMBO | ACEScg | Input color space. ACEScg = ACES working space (AP1). Linear_sRGB = standard linear. |
| output_transform | COMBO | ACES 2.0 SDR (sRGB/Rec.709) | Target output. SDR for web/broadcast, HDR for HDR10/Dolby Vision, Cinema for theatrical. |
| peak_luminanceopt | FLOAT | 10048–10000 | SDR peak luminance in nits. Standard SDR = 100. |
| surroundopt | COMBO | Dim | Viewing surround. Dark = cinema, Dim = home theater, Average = office. |
| creative_white_scaleopt | FLOAT | 1.000.5–1.5 | Creative exposure adjustment before tone mapping. |
| exposure_adjustopt | FLOAT | 0.0-4–4 | Exposure adjustment in stops. |
| gamut_compressopt | FLOAT | 1.000–2 | Gamut compression strength. 1.0 = standard. Higher = more compression. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| output_image | IMAGE | — |
| transform_info | STRING | — |