Nodes/comfyUI_FrequencySeparation_RGB-HSV/Frequency Combination HSV Node
ComfyUI Node

Frequency Combination HSV Node

The other half of the IC-Light color trick — put the image back together

By risunobushi·Created 2 years ago·Updated 2 years ago· 43
Frequency Combination HSV Node
  • high_freq
  • low_freq
  • IMAGE

Frequency separation is a two-act play. First you split an image into a low-frequency color layer and a high-frequency detail layer (that's the FrequencySeparationHSV node). Then you edit one or both - color-match the low layer, blend the high layers, whatever your relight needs. And finally you have to glue it back together. That's this node's entire job, and it's a small, boring, important one.

It comes from the same pack as FrequencySeparationHSV, the "probably badly coded" one-person collection by Andrea Baioni (u/not5), a fashion photographer who built it for his IC-Light relight workflows. The recombine node is the half you don't think about until you realize your carefully color-matched low layer is just a smeary blur sitting in the graph with nowhere to go. This node is where it becomes a photograph again.

How it works

The node takes the high_freq and low_freq images from the HSV separation and rebuilds a single image. It converts the low layer back to HSV, keeps its H and S channels exactly as they are, and recombines the V channel with "linear light" blending:

v_combined = clip(2 * v_low + high_freq[...,0] - 1, 0, 1)

Two things worth knowing about that formula. First, it only reads the red channel ([...,0]) of the high layer - which is fine, because the separation node's high_freq is a grayscale-looking image with the same value stacked in all three channels. Second, it's not a mathematically perfect inverse of the split. The detail term comes back at roughly double strength, so a no-edit split→recombine comes back punchier than the source - and it's the same root cause as the oversharpening the author warns about when you split with a big blur_radius.

The inputs and output

Exactly two inputs and no settings, which makes this the simplest node in the pack:

  • high_freq - the detail layer, typically straight from FrequencySeparationHSV, or a blend of your original and relit high layers.
  • low_freq - the color layer, typically the color-matched or averaged version of your low layers.

The single output is a normal IMAGE - wire it to a PreviewImage, Save Image, or on to the rest of your graph. In the IC-Light flow this is the last node before output.

Keep the pair together: this node expects the HSV-family encoding, so feed it the outputs of FrequencySeparationHSV, not the RGB FrequencySeparation. The two families store the detail layer differently, and cross-wiring them gives washed-out or doubled results.

Install

Same as its siblings - the README's official path is a clone and there's nothing to pip install:

cd ComfyUI/custom_nodes
git clone https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV

Restart ComfyUI and the node appears under image/filters. No requirements.txt, no model download; OpenCV (cv2) is the only non-core dependency and ComfyUI ships it.

Gotchas

  • low_freq must be a three-channel image - the node raises if it isn't.
  • Don't expect a lossless round trip. Split and recombine with zero edits and the pixels won't match your source exactly. That's the encoding, not a bug in your graph.
  • If the result has halos or doubled edges, the blur_radius on your split was too high - drop it toward 3–5 and the recombine calms down.
Categoryimage/filters

Inputs (2)

NameTypeDefaultDescription
high_freqIMAGE
low_freqIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE