Nodes/Steaked-nodes/Image Distortion
ComfyUI Node

Image Distortion

Twelve ways to break an image on purpose, none of them AI

By StealthNinja1O1·Created 11 months ago·Updated 5 months ago· 0
Image Distortion
  • image
  • IMAGE
◄distortion_typewave►
◄intensity50►
◄frequency10►
◄offset_x0.0►
◄offset_y0.0►

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. For wave and ripple this controls the wavelength; for mosaic it'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.

CategorySteaked-nodes/tools

Inputs (6)

NameTypeDefaultDescription
imageIMAGE—
distortion_typeCOMBOwave12 options: wave, swirl, kaleidoscope, pixelSort, displacement, fisheye, +6
intensityFLOAT500–100—
frequencyFLOAT100–100—
offset_xFLOAT0.0-50–50—
offset_yFLOAT0.0-50–50—

Outputs (1)

NameTypeDescription
IMAGEIMAGE—