ComfyUI Node

ACES Tone Map

Make HDR look like a picture (AgX is the good one)

By azhagurajpandians·Created 4 months ago·Updated about a month ago· 0
ACES Tone Map
  • image
  • IMAGE
exposure0.00
look
output

A float EXR can hold values up to hundreds of times brighter than white. That's the point - but it also means the image looks like a blown-out gray slab until you compress that range back into something a screen can show. ACES Tone Map is that compression step, with a choice of curves, and it's what sits between your HDR tensor and Preview Image when you don't want to do the whole OCIO transform song-and-dance.

It's the blunt instrument in the pack's color toolkit. Where ACES Color Transform moves you between specific color spaces, this node just takes the linear HDR values and maps them to 0–1 with a curve, then optionally encodes them to sRGB. You don't need to know what color space your EXR is in to use it - you feed it highlights that are way over 1.0 and it brings them back in.

How it works

The math is a multiplier plus a curve, applied to the float RGB before a final clip to 0–1:

  • ACES fitted - the "photographic" default; the classic fitted curve that rolls highlights off gently. Safe, familiar, slightly neutral.
  • Reinhard - x / (1 + x), the simplest possible rolloff. Fast and clean but it darkens your midtones, which makes images look flatter than the others.
  • AgX - the Blender-standard look and the one you'll actually reach for. It desaturates highlights the way film emulsions do and holds color better than the others at the bright end. If you only learn one look, learn this one.
  • Filmic (Blender) - Blender's older filmic curve, a bit punchier in the mids than AgX.
  • DaVinci - a log-ish curve that behaves more like a Resolve-style grade. Good when you want to push exposure around afterwards rather than bake the look in.

exposure (an EV slider, ±10) shifts brightness before the curve - dial it to -1 or -2 when a scene is still clipping. output picks sRGB (encodes the tone-mapped result for direct preview) or Linear sRGB (leaves it linear, for when you're feeding the result back into an HDR pipeline or a save).

The honest caveat: these are approximations of the real curves, not reference implementations. Fine for previews and delivery-looks; if you need a strict match with a VFX house's ACES pipeline, that's what ACES Color Transform with a real OCIO config is for.

The settings you'll touch

  • look - start with AgX, then ACES fitted as the safe fallback
  • exposure - the one knob that fixes "still too bright"
  • output - sRGB for preview, Linear sRGB if more processing follows

Install

From ComfyUI Manager search "ACES EXR Toolkit", or:

cd ComfyUI/custom_nodes
git clone https://github.com/azhagurajpandians/ComfyUI-ACES-EXR-Toolkit.git
python -m pip install -r ComfyUI-ACES-EXR-Toolkit/requirements.txt

Restart ComfyUI. The node is under image/ACES + EXR.

Where it fits

Typical graph: Load EXR From Path -> ACES Transform -> ACES Tone Map -> Preview Image. If the transform alone leaves the picture washed out, inserting the tone map is the README's own recommended fix. And don't tone-map before saving an HDR file - tone mapping is a display decision. Keep the float data for the file and tone map only the copy you're looking at.

Categoryimage/ACES + EXR

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
exposureFLOAT0.00-10–10
lookCOMBO5 options: ACES fitted, Reinhard, AgX, Filmic (Blender), DaVinci
outputCOMBO2 options: sRGB, Linear sRGB

Outputs (1)

NameTypeDescription
IMAGEIMAGE