Nodes/WtlNodes/Contrast
ComfyUI Node

Contrast

Pivot-point adjustment instead of a crude multiply

By Scorpiosis0·Created 10 months ago·Updated 2 months ago· 3
Contrast
  • image
  • IMAGE
contrast0
apply_type

Contrast is the most abused slider in image editing, because a naive implementation just multiplies pixel values - which also shifts brightness and pushes everything toward black or white. WtlNodes' Contrast node does it properly: it pivots around a fixed 0.5 midpoint, so increasing contrast spreads pixels away from mid-gray symmetrically, and decreasing it pulls them toward mid-gray. That's the difference between "punchy" and "muddy."

It's a small node with one job, but it's the difference between a final render that looks flat and one that pops. The pack's framing is accurate: these color nodes use real color science rather than RGB hacks, and this is the simplest example of it.

The inputs

  • image - anything, batch included.
  • contrast - −100 to 100, default 0. Negative softens (useful for pulling back an over-punchy generator output), positive adds punch. In the ±20–40 range is where most photo-real work lives; +100 is a hard "stylized" look.
  • apply_type - the pack-wide live-preview dropdown. none pauses and lets you scrub the slider against a live preview before hitting Apply.

One IMAGE out. That's the node.

Why you'd bother

Because AI images come out of the box with contrast baked in, and it's rarely what you want at export. A ±20 contrast pass after a generation is the single most common finishing tweak in workflows that care about output quality, right next to a touch of exposure and a highlight/shadow rescue. The pivot-point math matters here: it means boosting contrast doesn't nuke your shadows into black, which is exactly what happens with a naive multiply on a dark AI render.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Scorpiosis0/ComfyUI-WtlNodes.git

Restart ComfyUI, or grab the pack via ComfyUI Manager (search "WtlNodes"). No models, no heavy deps - this one is pure per-pixel math.

Gotchas

  • It's per-pixel, not "smart." It doesn't know a face from a sky. If you want local contrast control, pair it with the pack's Highlight & Shadow node rather than leaning on one global dial.
  • Defaults are deliberately neutral. The node does nothing until you move the slider - that's the point, but people sometimes load it and think it's broken.
  • apply_type = none pauses the workflow. If a run stalls at this node waiting for a click, that's the dropdown, not a crash.
CategoryWtlNodes/image

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
contrastFLOAT0-100–100
apply_typeCOMBO3 options: none, auto_apply, apply_all

Outputs (1)

NameTypeDescription
IMAGEIMAGE