Nodes/ComfyUI-FFT-2D/FFT Crossover (Low/High)
ComfyUI Node

FFT Crossover (Low/High)

Split your image into soft and sharp halves

By NobutakaKuroki·Created about a month ago·Updated about a month ago· 1
FFT Crossover (Low/High)
  • frequency
  • low_pass
  • high_pass
cutoff_radius0.30

FFT Crossover (Low/High) is the node that finally makes frequency separation feel like a one-step trick. Feed it one FREQUENCY spectrum and a single cutoff knob, and it hands you two spectrums back: low_pass (everything below the cutoff - the smooth lighting, broad color, the "bass") and high_pass (everything above - edges, texture, film grain, skin pores). It's named after an audio crossover because that's exactly what it is: a two-way splitter for images.

Why is that useful? Frequency separation is the oldest retouch trick that never died. Want to smooth skin without losing texture? Blur the low band, leave the high band alone, recombine. Want to sharpen without the whole image turning crunchy? Boost the high band, don't touch the low. Want to re-light a scene's broad tones without smearing the detail? That's all low-band work. The pack's docs even flag it as the tool for cleaning up skin-tone shifts under new lighting. One split, and you've got the soft layer and the detail layer as separate wires to do with as you please.

How it works

The cutoff is cutoff_radius, a float from 0 to 1 (default 0.3). It's a normalized radius: 1.0 reaches the middle of each edge, so on a square image it draws a circle and on a non-square one an ellipse that matches the aspect ratio. Everything inside the radius goes to low_pass, everything outside to high_pass.

Here's the detail that makes it pleasant to use: the two masks are exact complements - low + high equals 1 everywhere, which means low_pass + high_pass reconstructs your original perfectly. No energy is lost in the split, no ringing from a soft-edged filter. You can tweak one side, FFTAdd them back, and you know exactly what you changed. There's no blur in the low-pass output and no halo in the high-pass, because this is a hard frequency-domain cut, not a pixel-space Gaussian.

The one input that matters

Just frequency and cutoff_radius. The radius is the only thing you'll actually fiddle with: small (0.1–0.2) means "barely anything counts as low frequency," so the low band is a tiny, very smooth blob and the high band holds almost everything. Large (0.5+) flips it - the low band swallows most of the image and the high band is just the finest detail. Start at 0.3 and nudge.

The take

This is probably the pack's most reach-for-able node if you do portrait or product work, because it's frequency separation without learning Photoshop layer tricks. Two wires out, recombine with FFTAdd, done. Just don't expect magic on a photo that's already mushy - frequency separation can only work with the frequencies that are actually there. No highs in the source, no highs to boost.

How to install it

ComfyUI Manager → search ComfyUI-FFT-2D → install, or:

cd ComfyUI/custom_nodes
git clone https://github.com/NobutakaKuroki/ComfyUI-FFT-2D

Restart ComfyUI. No extra pip dependencies, no models. The lesson_workflows/4_LowHighSplit.json file wires the whole split-edit-recombine loop, and FFTMagnitudePreview is worth hanging off both outputs once so you can see what your cutoff is doing before you commit to it.

Categoryfft

Inputs (2)

NameTypeDefaultDescription
frequencyFREQUENCY
cutoff_radiusFLOAT0.300–1

Outputs (2)

NameTypeDescription
low_passFREQUENCY
high_passFREQUENCY