Nodes/DJZ-Nodes/Fish Eye Effect
ComfyUI Node

Fish Eye Effect

Doing fisheye distortion right

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 80
Fish Eye Effect
  • images
  • IMAGE
distortion_strength0.200
barrel_vs_pincushion0.00
radial_falloff2.0
edge_softness0.10
zoom1.00
spherical_aberration0.00
chromatic_aberration0.000

Most "fisheye" filters are just a rounded black mask and a barrel bulge. FishEyeEffect is not that. It's a proper lens model - polar-coordinate distortion with control over barrel vs pincushion, radial falloff, zoom, spherical aberration, and per-channel chromatic aberration - which means it produces the curved, organic wide-angle look you'd get from an actual lens rather than a cheap warp. If your shot needs to feel like it was captured through glass, this is one of the better lens-simulation nodes in the DJZ pack.

The inputs that matter

  • distortion_strength (0–1, default 0.2) - the overall amount of distortion. The default was deliberately dropped to 0.2 because the old default was too strong; for a gentle wide-angle feel stay in the 0.05–0.15 range, and only push toward 0.4+ for a true fisheye.
  • barrel_vs_pincushion (-1 to 1) - negative pulls edges inward (pincushion), positive pushes them outward (barrel). Most of what you'll want is barrel, i.e. positive.
  • radial_falloff (1–4, default 2) - how quickly the distortion ramps from the center to the edges. Higher = stronger edge behavior, the signature fisheye bend.
  • zoom (0.5–2) - below 1 pulls back so you see more of the scene, above 1 crops in. This is how you hide the empty corners a barrel distortion leaves behind - crank zoom up a touch and the image fills the frame again.
  • spherical_aberration (-0.5 to 0.5) and chromatic_aberration (0–0.02) - the two "character" knobs. Spherical aberration bends the image subtly inward or outward beyond the main distortion; chromatic aberration separates the color channels for that telltale color fringing at the edges. Tiny values (0.003–0.005) sell realism; big values turn everything into a rainbow-edged mess, on purpose if you want.

How it works

It remaps the image through a polar-coordinate transform - each output pixel samples a nonlinearly-scaled radius from the input - using scipy's map_coordinates for high-quality sampling, and it can sample each RGB channel separately when chromatic aberration is on. The whole batch is processed in one go, so it works just as happily on a video frame sequence as on a single still. Deterministic, no seeds.

Where it fits

Reach for it in two scenarios. One: subtle wide-angle correction or a light lens character on a shot that's too flat - a touch of barrel plus a hair of chromatic aberration reads as "shot on glass." Two: full fisheye goofiness on a subject, usually combined with a vignette or film grain to sell the look. Since it's pure geometry it composes cleanly with the rest of DJZ's film effects (grain, halation, weave) - you can stack the whole vintage-lens kit.

The caveats: at strong distortion, edges get soft and stretched - that's physics, not a bug. And the node imports scipy internally, which isn't in the pack's requirements.txt; it's normally present in a ComfyUI env, but if the node won't load after install, pip install scipy is the fix.

Categoryimage/effects

Inputs (8)

NameTypeDefaultDescription
imagesIMAGE
distortion_strengthFLOAT0.2000–1
barrel_vs_pincushionFLOAT0.00-1–1
radial_falloffFLOAT2.01–4
edge_softnessFLOAT0.100–1
zoomFLOAT1.000.5–2
spherical_aberrationFLOAT0.00-0.5–0.5
chromatic_aberrationFLOAT0.0000–0.02

Outputs (1)

NameTypeDescription
IMAGEIMAGE