Nodes/Jovimetrix/COLOR MATCH (JOV) πŸ’ž
ComfyUI Node

COLOR MATCH (JOV) πŸ’ž

Steal the color grade from any image

By AmoranoΒ·Created 3 years agoΒ·Updated 12 months agoΒ· 397
COLOR MATCH (JOV) πŸ’ž
  • πŸ‘ΎA
  • πŸ‘ΎB
  • πŸ–ΌοΈ
  • 😷
β—„πŸ‡ΈπŸ‡¨NONEβ–Ί
β—„πŸ“‰0.00β–Ί
β—„BLUR13β–Ί
β—„πŸ™ƒfalseβ–Ί
β—„πŸ”³0.00β–Ί

COLOR MATCH (JOV) πŸ’ž does exactly what the name says: it takes the color palette of one image and projects it onto another. You've got a render that's flat and dull, you've got a reference image with a gorgeous grade, and this node makes the render adopt the reference's tonal character. It's the Jovimetrix node for people who want their images to look consistent - matching shots in a batch, keeping a character consistent across frames, or just fixing that one output that came out green.

The README frames it as "COLOR MATCH against existing images or create a custom LUT," which is the two sides of the feature: match to a reference image, or remap through one of the built-in color maps.

What it does

Two images in, a grade out:

  • πŸ‘ΎA - the source image (the one whose colors you're changing).
  • πŸ‘ΎB - the reference (the one whose colors you want).
  • πŸ‡ΈπŸ‡¨ (COLORMAP) - the built-in LUT to use instead of (or on top of) the reference. 23 options including the classic OpenCV colormaps - JET, AUTUMN, BONE, WINTER, RAINBOW, OCEAN, HSV, PINK and more. Set NONE to use pure image-to-image matching.
  • πŸ“‰ (FLOAT, 0–1, default 0) - the matching amount, i.e. how much of the reference's look gets applied. 0 = no change, 1 = full match. This is the "don't overcook it" dial.
  • BLUR (INT, default 13, min 3) - the blur radius used while sampling the color distribution. Higher = smoother, more averaged color transfer; lower = tighter, noisier match.
  • πŸ™ƒ - swap the two inputs, in case the source and reference are wired backwards.
  • πŸ”³ (FLOAT, 0–1) - blend the result back toward the original input.

Outputs are the graded image and its mask.

How it works

The mechanism is a color transfer: it analyzes the color distribution of the reference and remaps the source's pixels so its statistics line up - the same family of technique as Reinhard color transfer and histogram matching, with a blur step to keep the transfer stable instead of splotchy. The built-in colormaps are the alternative path: a fixed LUT applied like a filter, which is more predictable and better for batch consistency than eyeballing a reference.

Installing it

Part of Jovimetrix:

  • ComfyUI Manager - search "Jovimetrix", install.
  • Manual - git clone https://github.com/Amorano/Jovimetrix.git into custom_nodes/, then pip install -r requirements.txt.

No models. Dependencies: numpy, OpenCV (opencv-contrib-python), Pillow, matplotlib, cozy_comfyui. Needs ComfyUI 0.1.3+.

Where people get burned

The two settings that most often need touching are the BLUR and the πŸ“‰ amount. At default BLUR 13 with a high-contrast reference, results can look smeared; drop the blur and dial the amount toward 0.5 for a more natural transfer. And note the classic mistake: if your output looks like a negative or wildly off, check whether A and B got wired backward - the node even has the πŸ™ƒ swap so you don't have to re-plumb. It's a fiddly node, but there's no real competitor for "match this render to that reference" without reaching for a full color-grading suite.

CategoryJOVIMETRIX πŸ”ΊπŸŸ©πŸ”΅/ADJUST

Inputs (7)

NameTypeDefaultDescription
πŸ‘ΎAopt*β€”
πŸ‘ΎBopt*β€”
πŸ‡ΈπŸ‡¨optCOMBONONE23 options: NONE, AUTUMN, BONE, JET, WINTER, RAINBOW, +17
πŸ“‰optFLOAT0.000–1β€”
BLURoptINT13β€”
πŸ™ƒoptBOOLEANfalseβ€”
πŸ”³optFLOAT0.000–1β€”

Outputs (2)

NameTypeDescription
πŸ–ΌοΈIMAGEβ€”
😷MASKβ€”