Nodes/MachinePainting Nodes/πŸ‘Ύ Color Adjust Blend
ComfyUI Node

πŸ‘Ύ Color Adjust Blend

Color balance in shadows, midtones, and highlights β€” with optional reference matching

By machinepaintingΒ·Created 10 months agoΒ·Updated 4 months agoΒ· 9
πŸ‘Ύ Color Adjust Blend
  • image
  • color_reference
  • IMAGE
β—„reference_strength0.75β–Ί
β—„blend_modecolorβ–Ί
β—„r_shadows0β–Ί
β—„g_shadows0β–Ί
β—„b_shadows0β–Ί
β—„r_midtones0β–Ί
β—„g_midtones0β–Ί
β—„b_midtones0β–Ί
β—„r_highlights0β–Ί
β—„g_highlights0β–Ί
β—„b_highlights0β–Ί

Every photo editor has "color balance," and it's always the same three zones: shadows, midtones, highlights, each with R/G/B sliders. Color Adjust Blend brings that to ComfyUI, then adds a genuinely useful extra - an optional reference image whose colors get matched onto yours before the balance runs. It's the node you reach for when a render is "almost there" but the skin tones are cold, or when you want one image's palette pulled from another.

How it works

Two stages, and both are optional on their own:

  1. Reference matching (only if you connect color_reference): your image is matched to the reference in LAB color space using a statistical transfer, controlled by reference_strength (default 0.75), then applied through a blend_mode (default color, so luminance stays yours).
  2. RGB color balance: nine sliders - r/g/b_shadows, r/g/b_midtones, r/g/b_highlights - each βˆ’100 to 100, applied per zone using a Photoshop-style shadow/midtone/highlight split.

Leave the reference disconnected and you get a plain, perfectly capable color-balance node. Connect one and you get reference-matched color plus local correction on top. That dual personality is the whole point: it works standalone, and it levels up when it doesn't have to.

The inputs you'll actually touch

  • image (required) - your render.
  • color_reference - optional palette source. The 0–1 reference_strength fades the match in and out; blend_mode decides how the matched color lands (color keeps your luminance, luminosity does the reverse - try overlay for a punchier grade).
  • The nine zone sliders - this is the real meat for most users. Want warmer skin without torching the whole frame? Nudge r_midtones up and maybe pull b_highlights down a touch.

Output is a single IMAGE. No mask input here - if you need zone-specific area control, that's Curves Adjust Pro's mask or a mask blend upstream.

Install

MachinePainting Nodes, standard:

cd ComfyUI/custom_nodes
git clone https://github.com/machinepainting/ComfyUI-MachinePaintingNodes.git
pip install -r requirements.txt

or ComfyUI Manager β†’ "MachinePaintingNodes" β†’ install β†’ restart.

Troubleshooting

The number one confusion is expecting the reference to do everything and the balance sliders to do nothing - check reference_strength is above 0, because at 0 the reference match is a no-op and all you're left with is your (also neutral) balance sliders. Also, statistical color matching homogenizes: if two very different references produce suspiciously similar results, that's the known behavior of LAB mean/std transfer (same family as Color Match Blend's statistical method), not a bug - that's when you switch to a different approach or lean on the zone sliders instead. And the classic one: matching against a reference with a strong tint (like an orange-teal grade) will push that tint onto your whole image, so match against a neutral reference and do the creative tint yourself.

CategoryMachinePaintingNodes/Color

Inputs (13)

NameTypeDefaultDescription
imageIMAGEβ€”
color_referenceoptIMAGEβ€”
reference_strengthoptFLOAT0.750–1β€”
blend_modeoptCOMBOcolor10 options: normal, overlay, multiply, screen, soft_light, hard_light, +4
r_shadowsoptFLOAT0-100–100β€”
g_shadowsoptFLOAT0-100–100β€”
b_shadowsoptFLOAT0-100–100β€”
r_midtonesoptFLOAT0-100–100β€”
g_midtonesoptFLOAT0-100–100β€”
b_midtonesoptFLOAT0-100–100β€”
r_highlightsoptFLOAT0-100–100β€”
g_highlightsoptFLOAT0-100–100β€”
b_highlightsoptFLOAT0-100–100β€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”