Image Distortion
Twelve ways to break an image on purpose, none of them AI
- image
- IMAGE
Image Distortion is the node you reach for when a render is too clean and you want it to look like it survived something. Twelve distortion effects, from a gentle sine wave to full pixel-sort glitch, all implemented as plain numpy pixel shuffling - no model involved, milliseconds of work, and every single one is reversible by just turning it off. Think of it as a bag of analog-lens and digital-failure tricks you can apply to any IMAGE.
The roster: wave (sinusoidal ripples), swirl and twist (rotational distortions), kaleidoscope (mirrored segments), pixelSort (sorting pixels by brightness, the vaporwave classic), displacement (noise-based offset), fisheye and spherize (lens curvature), ripple (concentric rings), glitch (digital artifacts), mosaic (tile it into oblivion), and warp (multi-octave noise warping). They all share the same three knobs - intensity, frequency, and the two offsets - which keeps it simple: pick an effect, dial in strength, adjust the center if the effect supports it. Internally the code walks the pixels and remaps source coordinates per effect, with offset_x/offset_y as percentages of the image size so your settings survive resolution changes.
The inputs that matter
distortion_type- the twelve-way picker. It's the star of the node.intensity(0–100) - how far pixels get moved. Zero is a no-op; 100 is usually "why did I do this."frequency(0–100) - how dense the pattern is. Forwaveandripplethis controls the wavelength; formosaicit's effectively the tile density.offset_x/offset_y(−50 to 50) - move the effect's center. The README calls out swirl, ripple and the offset-able effects as the ones that use these.
One image out, ready for a preview node.
Where it fits
This is the stylize corner of the post-processing layer. The honest take: a few of these (fisheye, swirl, mosaic) are one-liners you can get elsewhere, but the collection's real value is pixelSort and glitch, which are fiddly to hand-roll and look great layered under a film grain pass - that "camera was drunk in 1998" vibe the community keeps chasing for breaking the AI look. It's also a solid test-bench node: distorting a generated image and sending it back through img2img or a ControlNet depth pass can produce genuinely strange and useful material for compositing.
Install
Ships in Steaked-nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/StealthNinja1O1/Steaked-nodes
Restart ComfyUI, or find it in ComfyUI Manager ("Steaked-nodes"). Only torch/numpy/Pillow behind it, all already present.
Common issues
It expects RGB images - the source throws if you feed it a 4-channel or single-channel tensor, so convert first. intensity behaves differently per effect (wave's amplitude is intensity × 2 pixels, while others scale differently), so there's no universal "good" value - expect to dial each effect fresh. And remember it's destructive pixel shuffling: for pixelSort and glitch, results are highly input-dependent, so if you find a combo you like, note the seed of your workflow because the same effect on a different image can look entirely different.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| distortion_type | COMBO | wave | 12 options: wave, swirl, kaleidoscope, pixelSort, displacement, fisheye, +6 |
| intensity | FLOAT | 500–100 | — |
| frequency | FLOAT | 100–100 | — |
| offset_x | FLOAT | 0.0-50–50 | — |
| offset_y | FLOAT | 0.0-50–50 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |