Image Contrast
A simple contrast dial for your images
- image
- IMAGE
This is a plain contrast adjustment, the kind of slider you'd find in any photo app, dropped into ComfyUI as a node. One image in, one factor, one image out with the contrast pushed up or pulled down. No curves, no channels, no fuss.
You'd reach for it as a small post-processing touch-up - a generation came out a bit flat and washed, so you nudge the contrast up before saving; or an image is too harsh and crunchy, so you pull it down. It's also useful before a step that cares about tonal range, like feeding a cleaner-contrast image into a ControlNet preprocessor. It's not a grading suite. It's the one knob, and sometimes the one knob is all you need.
How it works
It scales the difference between each pixel and mid-gray by your factor. That's the standard contrast operation (the same behavior as PIL's contrast enhancer, if you've used that): at factor 1 nothing changes, above 1 the darks get darker and the lights get lighter, below 1 everything squeezes toward gray.
Inputs and outputs
- image - the image (or batch) to adjust.
- factor - a float from 0 to 2, default 1. 1 leaves the image untouched. Below 1 flattens contrast (0 collapses toward a flat gray). Above 1 boosts it. The step is fine (0.01), so you can make small, tasteful moves rather than sledgehammer ones.
Output is the adjusted IMAGE.
Installing it
It's in the pack's comfyui_color_ops file. Install via ComfyUI Manager (search Various ComfyUI Nodes by Type / comfyui-various) or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/jamesWalker55/comfyui-various
Restart ComfyUI. No model files, no extra Python packages.
Common issues
The main thing is that the range is capped at 2, which is a gentle ceiling - this is a nudge tool, not a dramatic one. If you crank it to 2 and still want more punch, you've probably outgrown this node; reach for a proper Levels or curves adjustment (the pack even has a JWImageLevels for exactly that) instead of stacking two contrast nodes and fighting it.
The other easy mistake is forgetting that 1 is the neutral value, not 0. Set factor to 0 expecting "no change" and you'll get a flat gray mush, because 0 means zero contrast. Neutral is 1; think of the range as 0 (gray) → 1 (original) → 2 (punchy).
Adjustment applies across the whole batch uniformly, which is what you want for a video sequence - every frame gets the same treatment, so the look stays consistent frame to frame.
If the node shows up red as missing when you load a workflow, the pack just isn't installed - run Manager's "Install Missing Custom Nodes" or clone the repo above and restart.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| factor | FLOAT | 1.000–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |