Nodes/Skoogeer-Noise/Latent Frequency Split
ComfyUI Node

Latent Frequency Split

Separate a latent's detail from its shapes

By ttulttul·Created 9 months ago·Updated 3 months ago· 14
Latent Frequency Split
  • latent
  • mask
  • low_pass
  • high_pass
sigma1.5

Every image has two halves: the broad, soft stuff (lighting, large shapes, composition) and the fine stuff (texture, edges, grain). Latent Frequency Split pulls those apart in latent space, handing you a low_pass band containing the first half and a high_pass band containing the second. Once they're separated, you can treat them differently - and that's where all the interesting workflows come from.

Sharpening is the classic example: boost the high-pass band on the way back in, and edges snap without the whole image getting crunchy. Denoising is the reverse - attenuate the high band and keep the structure. But the more creative use is cross-latent surgery: take the low-pass from latent A and the high-pass from latent B, recombine, and get "A's shapes with B's texture." That's a genuinely latent-space-only move; in pixel space you'd call it frequency-domain compositing and it'd cost a lot more than this does.

How it works

The mechanism is one Gaussian blur and one subtraction:

  • low_pass = Gaussian-blur the latent with sigma as the radius.
  • high_pass = latent - low_pass.

Set sigma to the frequency cutoff you care about. Higher sigma = a heavier blur = more detail gets pushed into the high band (because the low band keeps less of it). At sigma <= 0 the node short-circuits: low_pass is the input and high_pass is zeros, which is a clean way to check your wiring. It handles 4D and 5D latents the same way the pack's other filters do.

The outputs are two LATENT values, low_pass and high_pass, and here's the important part: the split is lossless in the sense that low_pass + high_pass reconstructs the original exactly. So you can split, do nothing, and merge - you get your latent back bit for bit. Every edit happens in the gap between.

Installing it

Part of the Skoogeer-Noise pack. ComfyUI Manager: search "Skoogeer-Noise", install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
# restart ComfyUI

Standard deps, no downloads.

Gotchas

  • LatentFrequencySplitLatentFrequencyMerge should be identity. If you're not getting your original back, one of the gains in the merge node isn't at 1.0, or you edited a band in between.
  • The high band looks like nothing. It's supposed to - a high-pass of an image is mostly invisible gray with edges. Judge it by what it does when recombined, not by how it previews.
  • Don't confuse this with the conditioning frequency split also in the pack. That one separates text-embedding tokens; this one works on latents. Different data, different workflow.
  • Flux.2 users: patchified latents are 2x2-blocked, so the Gaussian blur smears across patch blocks. Unpatchify → split → patchify, per the pack README, if you're on Flux.2.
CategoryLatent/Filter

Inputs (3)

NameTypeDefaultDescription
latentLATENTLatent to decompose into low/high frequency bands.
sigmaFLOAT1.50–20Radius of the Gaussian used for the low-pass. Higher values move detail into the high band.
maskoptMASKOptional mask (often image-sized) to limit the split to masked areas. The mask is resized to latent resolution (bicubic when downscaling).

Outputs (2)

NameTypeDescription
low_passLATENT
high_passLATENT