Nodes/Skoogeer-Noise/Image Swirl Noise
ComfyUI Node

Image Swirl Noise

Liquify your image with vortex warps, not pixel static

By ttulttul·Created 9 months ago·Updated 3 months ago· 14
Image Swirl Noise
  • image
  • mask
  • IMAGE
seed0
vortices1
channel_modeglobal
channel_fraction1.00
strength0.75
radius0.50
center_spread0.25
direction_bias0.00
mix1.00

Don't let the name fool you: Image Swirl Noise doesn't add a speck of noise. It's a spatial warp. The node spawns a handful of vortex centers and physically swirls the pixels around each one, like a liquify tool got loose on your image. That's a fundamentally different category of effect from the rest of the noise nodes in the pack, and it's worth knowing before you wire it up expecting grain.

So what's it for? Melting, spinning, folding. One gentle vortex in the middle of a portrait gives you that dreamy "face dissolving into a spiral" look. A few weak vortices spread across a landscape reads like heat-haze or a subtle lens warp. Crank strength and everything starts looking like a Van Gogh painting left in the rain. It's the stylization node of the set, not the texture node.

How it works

Each vortex is a point in the image around which pixels rotate by strength radians (the default 0.75 is about 43° of twist at the center). The rotation falls off as you move away from the center, and radius (normalized, so 0.5 means half the image) controls how far that influence reaches. center_spread lets the vortex origin drift off the true center - the default 0.25 keeps vortices near-ish the middle; push it to 1.0 and they scatter toward the edges. direction_bias nudges all vortices to spin clockwise or counterclockwise; at 0 each picks its own direction from the seed.

Three controls shape the effect in practice:

  • vortices - how many independent centers to spawn (1–16). One is a clean swirl; several overlap into turbulent mess, which is sometimes exactly what you want.
  • strength - peak rotation in radians. This is your main intensity dial.
  • mix - blend between the original image (0) and the fully swirled result (1). The one control beginners skip and then wonder why the effect is too strong. 0.3–0.5 with a high strength gives a subtle organic warp instead of a tornado.

channel_mode global swirls all channels with the same grid, keeping colors aligned; per_channel gives each channel its own grid and produces chromatic-aberration-style color fringing. channel_fraction picks a random subset of channels to affect per sample, which is a lighter-weight way to get that same glitchy fringe without full per-channel grids.

The optional mask input localizes the swirl to masked areas - great for swirling only a sky or only a face. The output is a single IMAGE, ready for preview, save, or further processing.

Installing it

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

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

Only standard dependencies (torch, numpy, einops, pyyaml), no model files, no downloads.

Gotchas

  • It looks like an acid trip and you wanted subtle. Your strength and radius are both high, and mix is still at 1. Drop mix first - it's the least destructive way to tame the effect.
  • "Nothing happened." strength of 0 or mix of 0 short-circuits the node and passes the image through untouched. Check those two before blaming the seed.
  • Fringing you didn't ask for. You're in per_channel mode. Switch to global unless you're chasing the aberration look.
  • There's a LatentSwirlNoise sibling for latent-space warping if you're working before the VAE - same idea, applied to the compressed representation.
CategoryImage/Noise

Inputs (11)

NameTypeDefaultDescription
imageIMAGEImage to deform with vortex-style warps.
seedINT00–18446744073709550000Seed for vortex placement and direction randomness.
vorticesINT11–16Number of independent vortex centres to spawn per image.
channel_modeCOMBOglobalUse a shared swirl grid for all channels or generate unique grids per affected channel.
channel_fractionFLOAT1.000–1Fraction of channels to swirl. The subset is randomly selected per sample.
strengthFLOAT0.750–6.28Peak swirl rotation in radians near the vortex center.
radiusFLOAT0.500.05–2Normalized radius controlling how far the vortex influence extends.
center_spreadFLOAT0.250–1How far the vortex origin drifts from the image center.
direction_biasFLOAT0.00-1–1Bias toward counter-clockwise (1) or clockwise (-1) swirl.
mixFLOAT1.000–1Blend between original image (0) and fully swirled result (1).
maskoptMASKOptional mask (often image-sized) to limit the swirl to masked areas. The mask is resized to the image resolution (bicubic when downscaling).

Outputs (1)

NameTypeDescription
IMAGEIMAGE