ComfyUI Node

Olm Histogram

Stop guessing why your render looks muddy — Olm Histogram shows you the pixels

By o-l-l-i·Created about a year ago·Updated about a year ago· 5
Olm Histogram
  • image
  • Histogram Data (JSON)
versioninit

Olm Histogram is a real-time histogram inspector you drop onto any image in ComfyUI to actually see what's going on with its color and exposure. The name is not a metaphor: it's a histogram, in a node, drawn live in your graph. It doesn't change a single pixel - it's a diagnostic tool, the ComfyUI equivalent of the scopes in DaVinci Resolve or Nuke, built by a color-nerd node author (Olli Sorjonen, aka @Olmirad) for compositing-style workflows.

Why reach for it? ComfyUI is famously short on decent image inspection. Your sampler output looks "flat" or "dull" and you don't know if it's a color cast, crushed shadows, or clipped highlights. Wire any image - from a Load Image, a VAE Decode, a LUT node, an upscaler - into this, run once, and you get a live preview plus per-channel luminance/RGB histograms with hover pixel sampling. It's the perfect before/after tool: drop one after your effects and one before, and compare the shape of the curves. The author suggests pairing it with an image comparison node like Rgthree's, and honestly that's the exact use case.

How it works

The heavy lifting happens server-side, which is why the UI stays fast. When the graph runs, the node caches your image tensor (keyed by workflow and node id, max 10 entries) and computes a 256-bin histogram for red, green, blue, and a perceptual luminance channel using classic Rec.601 weights (0.299/0.587/0.114). A custom endpoint on ComfyUI's built-in server (/olm/api/histogram/generate) then feeds the frontend widget a downscaled preview and the histogram data, and the widget does the interactive stuff: channel toggles, smoothing, linear/log scale, and the bin-highlighting as you hover.

Per channel it also computes stats: min, max, mean, median, mode, standard deviation, and dynamic range. If you've ever stared at a render wondering "is this actually clipped?", that max-vs-255 number answers it instantly.

The inputs that matter

The node is delightfully simple - two inputs, one output:

  • image - the IMAGE tensor you're inspecting. That's the whole point.
  • version - a hidden STRING input the author uses to force the widget to refresh. It's invisible in the UI; you never touch it.

The single output is Histogram Data (JSON), a STRING with the per-channel stats. Wire it downstream if you want to do something clever with the numbers; for most people the on-node display is the product.

One structural gotcha: this is an output node - it has to sit at the end of a branch. It can't feed a Save Image or anything after it. And the README is explicit that you need to run the graph once before the preview appears; that's a LiteGraph limitation, not a bug. Oh, and it only takes a single image - a batched input raises a clear error.

Installing it

The easy way is ComfyUI Manager: search "Olm Histogram" and install. Or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/o-l-l-i/ComfyUI-Olm-Histogram.git

Then restart ComfyUI. That's it - no requirements.txt, no model downloads, no API keys, no Python dependencies beyond what ComfyUI already ships. If you use subgraphs, make sure you're on 1.0.1.1 or newer, which fixed a conflict with the frontend's subgraph header buttons.

Where people get burned

  • Preview is blank until you run the graph. This catches everyone. Hit queue, then look.
  • The hover readout reflects the downscaled preview (512px), not the full-res original - fine for spotting casts, not for measuring a single pixel.
  • It's read-only and terminal. If you expected a grade or a "fix my image" button, that's not this node. No masking or region-based histograms yet, either.
  • Check the license. It's source-available, not OSI open source: free to use and experiment with, results are yours, but don't redistribute or rebrand it.

The node is young (first public release was mid-2025) so there's not much community chatter about it yet - but it's one of those quiet tools you'll find yourself leaving in every workflow once you've used it to diagnose a single washed-out render.

Categoryimage/analysis

Inputs (2)

NameTypeDefaultDescription
versionSTRINGinit
imageIMAGE

Outputs (1)

NameTypeDescription
Histogram Data (JSON)STRING