Nodes/ComfyUI-JurdnsFrequencySplitNodes/Jurdns Frequency Combine
ComfyUI Node

Jurdns Frequency Combine

Jurdns Frequency Combine — where you actually dial in the detail

By jurdnf·Created about a year ago·Updated about a year ago· 1
Jurdns Frequency Combine
  • low_freq
  • mid_freq
  • high_freq
  • LATENT
methodweighted_blend
low_weight0.4
mid_weight0.3
high_weight0.3

Jurdns Frequency Split is the flashy half of this pack - it carves a latent into low, mid, and high frequency bands, which is a neat trick on its own. But the split is only useful because of its quiet sibling. This node is the return trip: it takes the three bands and stitches them back into one latent, and the stitching is where the real control lives. The split gives you the ingredients; the combine decides how much of each goes into the pot.

It's a two-node pack and you'll use both, so install-wise you're done the moment you've grabbed one of them. That's the whole story: no models, no dependencies beyond torch, Apache-2.0, one small source file. Manager users search "Jurdns", everyone else clones:

cd ComfyUI/custom_nodes
git clone https://github.com/jurdnf/Jurdns-Frequency-Split-Nodes
# restart ComfyUI

How it works

Three inputs - low_freq, mid_freq, high_freq - and a method dropdown with two choices. frequency_domain just adds the three latents together, sample by sample. That's the natural inverse of the split, and it gives you an approximate reconstruction of what you started with. weighted_blend, the default, is a weighted sum where you get to choose how loud each band is.

That's the whole mechanism, and honestly the weights are the point. low_weight defaults to 0.4, mid_weight and high_weight to 0.3 each. They're normalized - the node divides by their total - so they don't need to add up to 1, and a quick way to think about them is "how much does each band get heard." Zero total weights falls back to a plain average, which is a nice touch for a node this small.

What to do with it

The pattern that makes this pair worth having is the detail rescue, borrowed from the IC-Light frequency-separation playbook but done in latent space. Encode a reference image, split it, then blend its high-frequency band with the low/mid bands of whatever you're actually working on. Result: the coarse content of image B with the fine texture of image A, all before the sampler ever runs. For relight-style work that's the classic move - keep the original's detail, take the new scene's lighting.

Two more easy wins with the same graph:

  • Sharpen / soften. Boost high_weight to push detail, drop it to smooth skin or soften. Because the blend happens in latent space, it interacts with the sampler differently than pixel sharpening - you're changing what the model samples from, not post-processing the result.
  • Round-trip check. Split a latent and recombine with frequency_domain (or equal weights) to confirm your bands reconstruct sanely before you start tuning. There's a small seam loss at the band boundaries because the split's masks don't sum to exactly 1 - close, but not a perfect identity - so don't be alarmed by a hair of difference.

Gotchas

  • frequency_domain assumes you're feeding it actual split bands. If you wire in three unrelated latents, the plain sum is garbage. It's a reconstruction mode, not a mixing mode - mixing is what weighted_blend is for.
  • Latent bands aren't pixel bands. A "high frequency" latent band doesn't map cleanly to sharpness you can see; it's frequency in the compressed latent, so results shift when you change checkpoint or VAE. Tune by eye, per model.
  • It's a niche pack. No community chatter, essentially zero impressions. The source is a single readable file, so when behavior surprises you, the fix is reading ~80 lines rather than hunting a forum thread.

For the fully battle-tested version of frequency separation you'd want the pixel-space IC-Light workflows instead. This one is for when the manipulation needs to happen in the latent, before the first sampling step - and for that, it's the only real game in town.

Categorylatent/frequency

Inputs (7)

NameTypeDefaultDescription
low_freqLATENT
mid_freqLATENT
high_freqLATENT
methodCOMBOweighted_blend2 options: frequency_domain, weighted_blend
low_weightFLOAT0.40–1
mid_weightFLOAT0.30–1
high_weightFLOAT0.30–1

Outputs (1)

NameTypeDescription
LATENTLATENT