ComfyUI Node

Olm Image Adjust

Real-time color grading inside ComfyUI — no re-runs, no bloat

By o-l-l-i·Created about a year ago·Updated 4 months ago· 48
Olm Image Adjust
  • image
  • IMAGE
versioninit
exposure0.00
brightness1.00
contrast1.00
gamma1.00
shadows0.00
midtones1.00
highlights1.00
hue0
saturation1.00
value1.00
vibrance1.00

The most annoying part of color grading in ComfyUI isn't the grading - it's the loop. Nudge a slider, hit run, wait for the whole graph to regenerate, squint at the output, repeat. Olm Image Adjust kills that loop. You drag the sliders and the node's built-in preview updates instantly, without re-running anything downstream. That's the whole pitch, and it's a good one.

It's a small, standalone node by Olli Sorjonen (o-l-l-i on GitHub, imlo2 on r/comfyui), part of his little "Olm" family of color tools that also includes a curve editor and a LUT node. Deliberately not part of a mega-pack. It uses only Pillow, NumPy, and torch - no models, no hidden weights, no server to spin up, nothing to download. On release it got a warm reception on r/comfyui, with one commenter summing it up as "Photoshop functionality... FINALLY."

How it works

First you run the graph once. That single run pushes a copy of the incoming image into a per-workflow, per-node cache. From then on, dragging a slider POSTs your current values to a small local endpoint (/olm/api/imageadjust/update) baked into the node, which re-applies the adjustments to the cached thumbnail and returns an updated preview. No queue, no recompute of your sampler.

The math underneath is plain torch and old-school: exposure is a power-of-two multiply (like stops), brightness is linear, contrast pivots around 0.5, gamma and midtones are pow curves, shadows lifts the low end, highlights multiplies the top. Then it drops into HSV for hue rotation, saturation, and value, and finishes with a vibrance pass. Order matters, and the author's honest about the one soft spot: vibrance is his own interpretation and "may produce inconsistent results on edge cases." Fair enough.

The inputs that matter

Eleven sliders, but you'll live on a handful of them:

  • exposure (−4 to 4, default 0) - your light intensity, in stops.
  • contrast (0 to 3, default 1) and gamma (0 to 5, default 1) - the two you'll reach for constantly.
  • hue (−180 to 180) - rotate the whole color wheel; a little goes a long way.
  • saturation (0 to 2) and vibrance (0 to 2) - saturation hits everything, vibrance only the muted colors, so it's usually the safer one for a filmic push.

There's also brightness, shadows (0 to 0.99 - lift the blacks), midtones, highlights, and value (the HSV channel, distinct from the linear brightness). Ignore the version input - it's an internal string the author uses to invalidate the preview cache. The single IMAGE output is just your adjusted tensor, so it plugs into anything that takes an image: save it, feed it to an upscaler, use it as a conditioning image, whatever.

Install

Straightforward, since there are no dependencies. ComfyUI Manager → search "Olm Image Adjust" → install, or:

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

Restart ComfyUI and you're done. No requirements.txt, no model files, no extra installs.

Gotchas

  • Run the graph once before the sliders do anything. The node needs that first execution to grab the image and show a preview. If the preview looks frozen or the sliders seem dead, that's it.
  • Keep it updated after frontend updates. A ComfyUI frontend release (1.24.4) briefly broke the sliders - dragging them dragged the whole node instead. The author fixed it in 1.0.1.1 by chaining the original mouse event handlers. If sliders ever stop responding, check for a pack update via Manager.
  • Check the license before you fork it. This one is source-available, not open-source - you can use and experiment freely, but redistribution or rebranding requires written permission.
  • It's early and experimental. The author says so himself: expect quirks, back up your workflows. For a pure, in-graph color pass it's genuinely nicer than round-tripping to a photo editor - but don't install it expecting production-grade stability.

Where people get burned with this node: they wire it up, drag a slider, see nothing, and assume it's broken. It's not - it just hasn't cached the image yet. Run once, then adjust freely.

Categoryimage/color

Inputs (13)

NameTypeDefaultDescription
versionSTRINGinit
imageIMAGE
exposureFLOAT0.00-4–4
brightnessFLOAT1.000–2
contrastFLOAT1.000–3
gammaFLOAT1.000–5
shadowsFLOAT0.000–0.99
midtonesFLOAT1.000.1–3
highlightsFLOAT1.000–2
hueFLOAT0-180–180
saturationFLOAT1.000–2
valueFLOAT1.000–2
vibranceFLOAT1.000–2

Outputs (1)

NameTypeDescription
IMAGEIMAGE