Image Preview
A preview that knows when your image is linear light
- images
- profile
- images
A preview node is usually the least interesting thing in a workflow - until the picture you're looking at is lying to you. Ordinary ComfyUI previews read every image as sRGB picture codes. That's correct for what a sampler and a PNG produce, and catastrophically wrong for linear-light frames out of HDR Reconstruct, EXR Load or Linear Light: they hold values above 1.0, and an sRGB preview draws them far too dark and too contrasty. If you've ever tuned an HDR workflow against a view that looks crushed and then got a result that looks nothing like it, that's the bug WAS Image Preview is here to name.
It does three things, all about honesty. First, encoding tells it what the numbers mean: sRGB for ordinary picture codes, linear light for the HDR side of the suite. Tell it the truth and it draws the picture the way the numbers intend, not the way a naive preview misreads them. Second, exposure applies stops before drawing - -2.0 brings a highlight that reached 4.0 back into view, +1.0 opens up a shadow - without touching the data passed on. Third, mark_clipping is the useful paranoia: with it on, every sample that will clip paints red (over white) or blue (under black), so you can dial exposure until nothing is marked and know the view isn't hiding anything.
There's also an optional profile input for a colour profile from Image Load - it only changes the picture when the loader was set to keep the file's own colour space, in which case the numbers are read through that profile so the view matches the file. If you loaded with conversion to sRGB, the profile changes nothing, because the data already is sRGB.
Here's the design detail that makes it safe to leave in a chain: the node passes images through untouched, exactly as they arrived. It's an output node that doesn't modify anything. So you drop it anywhere - mid-graph, off a side tap, on the final wire before a save - purely to look, and the data continues unchanged to wherever it was going. That's genuinely handy when the thing you're checking (is this highlight recoverable?) is the thing you'd otherwise have to guess about from a crushed thumbnail.
When would you actually use it? Only when your pipeline crosses the sRGB/linear boundary - the HDR Reconstruct → grade → tone-map chain, or any EXR work. Within a plain sRGB generation graph it's a heavier version of the built-in preview that changes nothing. The color-management corner of ComfyUI is exactly the specialist place the KB notes you either need all of or none of; if you've committed to carrying light above white, this node is the "look" part of that commitment, because otherwise you're flying blind.
Install
In WAS Node Suite v3 - ComfyUI Manager, search "WAS Node Suite", or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui
Restart after. Requires ComfyUI 0.14.0+ and Python 3.10+. No packages, no model downloads. (v3 installs nothing by itself - the old v2 pack's pip baggage is gone.)
Common issues
- Image still looks dark even with
linear lightselected. If the source is HDR you also need to check where it entered the graph - a node upstream may already have baked it to sRGB, in which case it is sRGB and you should select that. - Blown whites with no detail and you can't tell how bad. Turn on
mark_clippingand read the red patches, then pullexposuredown until they clear. - Node changes my output? It can't - images pass through byte-identical. If the downstream result changed, you wired it into the path when you meant to tap a preview off it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The images to look at. They are passed on untouched, so this can sit anywhere in a chain. | |
| encoding | COMBO | 'sRGB' = ordinary picture codes, what a sampler and a PNG carry; 'linear light' = what HDR Reconstruct, EXR Load and Linear Light answer with. Reading light as sRGB is what makes a preview look too dark and too contrasty. | |
| exposure | FLOAT | 0.0-16–16 | Stops applied before the picture is drawn. 0.0 shows it as it is, -2.0 brings a highlight that reached 4.0 into view, +1.0 opens up a shadow. The images handed on are not changed by it. |
| mark_clipping | BOOLEAN | false | 'true' paints every sample over white red and every sample under black blue, so the exposure can be dialled until nothing is marked; 'false' draws the picture alone. |
| profileopt | WAS_COLOUR_PROFILE | A colour profile from Image Load. It only changes the picture where the loader was set to keep the file's own space, in which case the numbers are read through that profile so the view matches the file. A profile from a converted load is already sRGB and draws the same either way. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The images exactly as they arrived, so this can sit in a chain. |