Nodes/ComfyUI-UniversalToolkit/Imitation Hue Node (UTK)
ComfyUI Node

Imitation Hue Node (UTK)

Steal one image's look without turning the people in it orange

By whmc76·Created about a year ago·Updated 2 months ago· 72
Imitation Hue Node (UTK)
  • target_image
  • imitation_image
  • mask
  • image
strength1.0
skin_protection0.2
auto_brightnesstrue
brightness_range0.5
auto_contrastfalse
contrast_range0.5
auto_saturationfalse
saturation_range0.5
auto_tonefalse
tone_strength0.5

"Make my photo look like this photo" - the classic color-transfer ask. Generic implementations just match the mean and standard deviation of the color channels, which works great on landscapes and turns skin a horrifying shade of orange the moment a person is in frame. Imitation Hue Node (UTK) is the version with a skin-protection pass bolted on, and it's why it beats the naive approach for anything with humans.

It's part of ComfyUI-UniversalToolkit, and the changelog shows the author iterating on this exact thing - the v1.1.5 release is specifically "optimized skin protection to better preserve skin tone." That's the feature to remember: color transfer with skin preservation, not color transfer full-stop.

How it works

Under the hood it does statistics-based color transfer - it computes the mean and standard deviation of the color channels in the reference (imitation_image) and applies that shift to your target_image. The clever part is the skin detection: it converts the image to LAB color space and flags pixels that fall in the characteristic skin/lips range (specific L, A, B thresholds), then protects those regions from the full-strength transfer. The skin_protection slider (0–1, default 0.2) controls how much of the look applies to skin pixels - 0.2 keeps most of the grade while sparing flesh tones from going wonky.

Beyond the base transfer, there's a stack of auto_* adjustments, each with a range control: auto_brightness/brightness_range (HSV value scaling), auto_contrast, auto_saturation (HSV saturation), and auto_tone. They default to mostly off except brightness, so you can add them one at a time instead of fighting six dials. strength is the master amount of the transfer (0.1–1, default 1). The optional mask input lets you restrict the whole operation to a region, which is how you recolor a background without touching the subject at all.

Inputs and outputs that matter

  • target_image - what gets recolored.
  • imitation_image - the look you're copying.
  • strength and skin_protection - the two you'll actually tune.
  • auto_brightness - the one auto-tweak that's on by default.

Single output: image (IMAGE), the recolored result.

Install and gotchas

Install via ComfyUI Manager (search "ComfyUI-UniversalToolkit") or:

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

Restart ComfyUI. No models, no keys - this runs on OpenCV and numpy, both in the requirements.

Where people get burned: skin detection is threshold-based, so extreme skin tones - very dark or heavily made-up skin - can slip outside the LAB window and get recolored anyway. Dial skin_protection up to 1 if you see it, and if that's still not enough, draw a mask over the face and feed it into the optional mask input. Also, this transfers color statistics, not the lighting structure of the reference; if the reference has dramatically different lighting, no amount of slider work will fully imitate it - that's what relighting models are for. For the "same scene, different grade" case, though, it's fast and shockingly good.

CategoryUniversalToolkit/Image

Inputs (13)

NameTypeDefaultDescription
target_imageIMAGE
imitation_imageIMAGE
strengthFLOAT1.00.1–1
skin_protectionFLOAT0.20–1
auto_brightnessBOOLEANtrue
brightness_rangeFLOAT0.50.1–1
auto_contrastBOOLEANfalse
contrast_rangeFLOAT0.50.1–1
auto_saturationBOOLEANfalse
saturation_rangeFLOAT0.50.1–1
auto_toneBOOLEANfalse
tone_strengthFLOAT0.50.1–1
maskoptMASK

Outputs (1)

NameTypeDescription
imageIMAGE