ComfyUI Node

HT Image Adjuster

Photoshop-style color grading without leaving ComfyUI

By ArtHommage·Created 2 years ago·Updated about a year ago· 4
HT Image Adjuster
  • image
  • adjusted_image
use_cpufalse
exposure0.00
brightness0.00
contrast0.00
gamma1.00
hue0.00
saturation0.00
vibrance0.00
sharpness0.0
shadows0.00
highlights0.00
red0.00
green0.00
blue0.00

You've finished a generation and it's just... slightly off. Too flat, too warm, highlights blown. Normally that means exporting, opening an editor, adjusting, re-importing. HT Image Adjuster is the node that keeps that pass inside the graph: one IMAGE in, a row of Photoshop-style sliders, one IMAGE out. It's the finishing-touch node you'll reach for when a render is 95% there and you don't want to break the workflow to fix the last 5%.

What it covers

The adjustment set maps almost one-to-one to a raw photo editor:

  • exposure (−2 to 2) - multiplicative light scaling, the "everything's a bit dark" fix.
  • brightness and contrast (−1 to 1 each) - the straightforward pair.
  • gamma (0.1 to 5) - midtone curve; 1.0 is neutral.
  • hue, saturation, vibrance (−1 to 1) - color adjustments. Vibrance is the gentler sibling of saturation; it saturates the muted areas first, which is why skin tones survive it.
  • shadows and highlights (−1 to 1) - lift the darks or pull back the brights independently. This is what rescues a blown-out sky or a crushed black.
  • sharpness (0 to 5) - a post-blur unsharp-style pass; leave at 0 unless the image is soft.
  • Optional red, green, blue (−1 to 1) - per-channel tint corrections, for white balance drift.

Every adjustment is optional and additive: leave a slider at its default (0, or 1 for gamma) and it does nothing. The one field that isn't a slider is use_cpu - the math runs on GPU by default, and you flip it to CPU if you're feeding this enormous batches and want to keep VRAM for the sampler. The single output, adjusted_image, drops straight into a preview or save node.

How it works

It's all PyTorch tensor math - no OpenCV, no numpy round-trip - operating in BHWC, which is the format ComfyUI actually uses, so there's no format conversion cost. The hue/saturation work happens in HSV space (convert → adjust → convert back), shadows/highlights use a luminance-weighted curve, and everything clamps to the 0–1 range at the end. The pack's README makes a point of its tensor handling being careful, and this is the node that shows it - batches of images process in one call rather than one at a time.

Installing

Standard HommageTools install:

cd ComfyUI/custom_nodes
git clone https://github.com/ArtHommage/HommageTools.git
cd HommageTools && pip install -r requirements.txt

restart, or use Manager and search "HommageTools for ComfyUI". No model downloads, no extra dependencies beyond what the pack ships.

Where it fits

Good spots: after a VAE decode and before the save node to grade a final render, in front of a comparison node so you can A/B the grade, or upstream of a ControlNet/tile pass where you want a consistent-brightness input. Where it won't help: it's global, not masked - if you want to adjust only one region, put a mask-crop node in front of it or use a local-editing node instead. And as with everything in this pack, it's flagged experimental alpha, so the exact curve shapes may shift between versions - don't pin a workflow's entire look to it without testing after updates.

CategoryHommageTools/Image

Inputs (15)

NameTypeDefaultDescription
imageIMAGE
use_cpuBOOLEANfalse
exposureFLOAT0.00-2–2
brightnessFLOAT0.00-1–1
contrastFLOAT0.00-1–1
gammaFLOAT1.000.1–5
hueFLOAT0.00-1–1
saturationFLOAT0.00-1–1
vibranceFLOAT0.00-1–1
sharpnessFLOAT0.00–5
shadowsFLOAT0.00-1–1
highlightsFLOAT0.00-1–1
redoptFLOAT0.00-1–1
greenoptFLOAT0.00-1–1
blueoptFLOAT0.00-1–1

Outputs (1)

NameTypeDescription
adjusted_imageIMAGE