Latent Swirl Noise
A vortex warp that melts your latent around, well, vortices
- latent
- mask
- LATENT
The name says "noise" but this node is a liar in the best way: it's a spatial deformation, not additive noise. Latent Swirl Noise picks one or more vortex centers, places them in your latent, and rotates nearby pixels around them with a falloff. What you get is a creamy, twisting melt - the "drawn by a distracted barista" look. No static is involved; the pixels themselves get pushed in circles.
This is the perturbation you reach for when you want movement rather than texture: hair blowing into a spiral, water being stirred, fabric twisting, or the classic surreal melting-clock vibe. Because it deforms instead of adding, it composes well with the channel transforms in this pack - a mild swirl plus a channel rotation is a great one-two for "dreamlike but not broken." It's also deterministic per seed, which makes it a nice exploration tool: dial the seed, watch the vortex drift.
The inputs that matter
vortices(default 1) - how many independent vortex centers spawn per latent. One gives a focused twist; 3–4 gives a storm of conflicting rotations.strength(0.75) - peak swirl rotation in radians near the vortex center. 0.75 is a solid visible twist; this maxes at 6.28 (a full 360°).radius(0.5) - normalized radius of influence. Higher = the vortex's pull reaches further; lower = a tight, violent core.center_spread(0.25) - how far the vortex origin drifts from the latent center. Crank it and the whirlpool stops being center-screen and starts wandering.direction_bias-1biases counter-clockwise,-1biases clockwise,0is ambivalent. Set it and the whole frame spins the same way.channel_mode-globalshares one swirl grid across all channels (clean twist),per_channelgives each channel its own grid (glitchy, chromatic-breakup swirls).channel_fraction- the fraction of channels that actually get swirled; the subset is picked randomly per sample. Drop it below 1 to swirl only part of the feature space.
Plus seed, mix (0 = original latent, 1 = fully swirled), and an optional mask. Single LATENT output.
Installing and using it
Part of Skoogeer-Noise. Install via ComfyUI Manager (search "Skoogeer-Noise") or:
cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
Restart ComfyUI. No model downloads; deps are torch, numpy, einops, pyyaml - already in ComfyUI.
Common issues
Two things catch people. First: because it's a deformation with no strength-relative-to-std calibration, the effect is resolution-sensitive - a radius that's gentle at 1024×1024 is a tiny violent core at smaller latent sizes, so re-tune radius when you change resolution. Second: with vortices at 1 and the default center_spread, the swirl is dead-center, which reads as a lens-bulge. Most people prefer center_spread ~0.5–0.7 so the vortex lands off-center and feels like motion rather than a filter. If your swirl is coming out as noise-like breakup instead of a smooth twist, you've got channel_mode on per_channel and it's fighting you - switch to global. On Flux.2, wrap with Unpatchify Flux.2 Latent / Patchify Flux.2 Latent as usual.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | Latent to deform with vortex-style warps. | |
| seed | INT | 00–18446744073709550000 | Seed for vortex placement and direction randomness. |
| vortices | INT | 11–16 | Number of independent vortex centres to spawn per latent. |
| channel_mode | COMBO | global | Use a shared swirl grid for all channels or generate unique grids per affected channel. |
| channel_fraction | FLOAT | 1.000–1 | Fraction of channels to swirl. The subset is randomly selected per sample. |
| strength | FLOAT | 0.750–6.28 | Peak swirl rotation in radians near the vortex center. |
| radius | FLOAT | 0.500.05–2 | Normalized radius controlling how far the vortex influence extends. |
| center_spread | FLOAT | 0.250–1 | How far the vortex origin drifts from the latent center. |
| direction_bias | FLOAT | 0.00-1–1 | Bias toward counter-clockwise (1) or clockwise (-1) swirl. |
| mix | FLOAT | 1.000–1 | Blend between original latent (0) and fully swirled result (1). |
| maskopt | MASK | Optional mask (often image-sized) to limit the swirl to masked areas. The mask is resized to latent resolution (bicubic when downscaling). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |