Tonemap (Reinhard)
The photographic default that usually just works
- image
- IMAGE
Reinhard tonemapping is the classic photographic operator - the one behind the "global" HDR look that dominated the 2000s HDR photography boom, and the default people usually reach for first. This node wraps OpenCV's createTonemapReinhard with the same mult addition the rest of the pack has, and it's the tonemap I'd hand a beginner first: predictable, gentle, and much less likely to nuke your image than Mantiuk or Drago.
Feed it the HDR image that came out of Create HDR image (or Load Image (HDR)) and it compresses the range back to [0, 1] - which is exactly what you need before the image gets anywhere near a VAE or sampler.
The inputs that matter
gamma(default 1.0) - post-tonemap gamma. The main "make it look right" knob.intensity(default 0.0) - how strongly the global compression darkens things. Zero is the neutral default; crank it positive to pull bright areas down. This one can go negative, which reduces the compression effect.light_adapt(default 1.0) andcolor_adapt(default 1.0) - these control how the eye-adaptation model behaves: how much local brightness and color information influence the result. At the defaults the effect is "full adaptation," which is the safe place to start. Lowering them changes the character of the mapping.mult(default 1.0) - the pack's non-standard brightness multiplier. For HDR input, try 2–3, per the README.imagein, one IMAGE out.
Installing
Part of the ColorMod pack, needs OpenCV:
cd ComfyUI/custom_nodes
git clone https://github.com/city96/ComfyUI_ColorMod
cd ComfyUI_ColorMod
pip install -r requirements.txt
Restart, or install via ComfyUI Manager ("ComfyUI_ColorMod"). If the node is missing, opencv isn't installed - check the console for "Can't find opencv!" at startup.
How to actually tune it
The README warns all the tonemap nodes "require some testing," and Reinhard is no exception, but the good news is the knobs mostly do what they sound like. My usual order: leave light_adapt and color_adapt at 1, set mult to 2–3 for HDR, and adjust gamma for midtone brightness. Only touch intensity if the result is too dark or too flat overall - and remember the whole thing is guesswork because generated images don't have real exposure values to ground it.
Also worth knowing: this node (like the rest of the tonemap family) behaves a little differently for HDR vs SDR input. For a normal [0, 1] image you don't really need it - save the tonemaps for the HDR pipeline and keep SDR images on the ColorMod curve nodes instead.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| gamma | FLOAT | 1.000–8 | — |
| intensity | FLOAT | 0.00-8–8 | — |
| light_adapt | FLOAT | 1.000–1.6 | — |
| color_adapt | FLOAT | 1.000–1.6 | — |
| mult | FLOAT | 1.000–8 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |