Nodes/ComfyUI-Color_Transfer/Palette Soft Transfer
ComfyUI Node

Palette Soft Transfer

Palette recoloring with soft edges and a real blend control

By 45uee·Created 2 years ago·Updated 5 months ago· 42
Palette Soft Transfer
  • image
  • target_colors
  • IMAGE
blend_modeOriginal
blend_ratio0.5
softness1.0

Yes, that's a typo in the class name - PalletteSoftTransfer has two L's in "Pallette". The author of this pack let the misspelling stick; it's correct in the display name ("Palette Soft Transfer") and wrong in the workflow JSON, so remember it when a downloaded workflow claims a missing node. Spelling aside, this is arguably the most usable palette recolor in the pack, because it fixes the two things that make hard cluster-mapping ugly: it blends between palette colors instead of snapping to one, and it gives you a real strength control.

The "soft" in the name

The main Palette Transfer node assigns each pixel to its single nearest palette color - which is why its output posterizes into flat bands. This node instead gives every palette color a vote for every pixel, weighted by how close the pixel is to that color. The weighting is an exponential falloff in LAB space, and the softness input (0–20, default 1) controls how steep that falloff is:

  • softness low (near 0) - every palette color votes almost equally everywhere. You get a soft, blended tint with lots of color mixing. It can go too soft and start washing into a gray-ish average if you bottom it out.
  • softness high - the nearest palette color wins hard, and you approach the posterized look of the cluster node, just smoother at the boundaries.

There's a hidden implementation note that tells you this was written with real images in mind: the distance computation runs in memory-chunked batches so a big image doesn't explode your RAM, and the whole thing works in LAB (perceptually uniform) rather than raw RGB. Both are choices that make results look better on photos.

The inputs that matter

  • image, target_colors - the family-standard IMAGE plus a COLOR_LIST from ColorPalette. Note this node requires at least 2 palette colors - a one-color palette raises a ValueError, which is sensible (one color isn't a blend).
  • softness (0–20, default 1) - the main creative dial. Sweep it per image; it interacts strongly with how spread-out your palette is.
  • blend_mode (Original / Grayscale) - blend the recolored result against the original image, or against a grayscale version of it. Grayscale + low ratio = "tint this photo toward the palette's mood while keeping its luminance."
  • blend_ratio (0–1, default 0.5) - how much of the recolor to keep. This is the control the Reinhard palette node conspicuously lacks, and it's the difference between a subtle grade and a full repaint.

When to reach for it

Reach for it when you want a palette look without the posterization - soft gradients in skies, smooth skin tones, a whole-scene tint you can dial up or down. It's the natural upgrade from PalleteTransferClustering (hard mapping) when the flatness bothers you, and the natural upgrade from PaletteTransferReinhard (all-or-nothing statistics) when you want a strength knob. If you only install one non-flagship palette node from this pack, this is the one.

Install

Standard pack install - ComfyUI Manager search "Color_Transfer", or:

cd ComfyUI/custom_nodes
git clone https://github.com/45uee/ComfyUI-Color_Transfer

Restart after. No models, no keys, runs on CPU. Dependencies: scikit-learn, opencv-python, POT, with scipy and scikit-image riding along with ComfyUI; the README's pip install scikit-learn is the usual import-error fix. Small solo-dev pack, but this is its most forgiving node - the blend ratio alone rescues most "this looks wrong" situations.

CategoryColor Transfer/Palette Transfer

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
target_colorsCOLOR_LIST
blend_modeCOMBOOriginal2 options: Original, Grayscale
blend_ratioFLOAT0.50–1
softnessFLOAT1.00–20

Outputs (1)

NameTypeDescription
IMAGEIMAGE