Nodes/Muffins Flat 2 Panoramic/Fisheye Lens Warp Only
ComfyUI Node

Fisheye Lens Warp Only

A fisheye warp that adds nothing — no padding, no resize, just distortion

By Ragamuffin20·Created 6 months ago·Updated 2 months ago· 20
Fisheye Lens Warp Only
  • images
  • fisheye_images
  • info
◄strength0.70►
◄rectilinear_fov150.0►
◄zoom1.00►
◄center_x0.500►
◄center_y0.500►
◄lens_radius0.98►
◄edge_fade0.08►
◄vignette0.28►

The name is a promise this node actually keeps: it only warps. No new padding, no resize, no projection to a different shape. You give it an image or video-frame batch and it bends the pixels into a fisheye-style view, same dimensions out as in. That narrow scope is the point - it's a refinement pass for the middle of an outpainting pipeline, not a converter.

Here's the context it slots into. In the Muffins-Flat-2-Panoramic workflow you first outpaint a flat frame onto a larger panoramic canvas (Pano Outpaint Canvas handles that), then you run a second pass to push the result toward the lens look your viewer expects. FisheyeLensWarpOnly is that second pass when you want the appearance of a fisheye - curved horizon, barrel distortion - without committing to a full circular projection. It's the "make it look like the lens" step, while its sibling FisheyeProjectionOnly is the "reproject it into a different frame shape" step.

The knobs that matter

The warp is a remap: every output pixel looks up a source pixel, with a strength blend between the flat image and a fisheye-distorted version of itself. Most of the inputs follow from that.

  • strength (default 0.7) - how much fisheye vs. flat. 0 does nothing; 1 is full fisheye.
  • rectilinear_fov (default 150) - the field of view the distortion pretends the lens has. Higher = more bend at the edges.
  • lens_radius (default 0.98) - where the lens circle sits relative to the frame edge.
  • center_x / center_y - shift the lens center if your shot isn't centered.
  • zoom - magnify after warping.
  • edge_fade (default 0.08) and vignette (default 0.28) - the two cosmetic controls. edge_fade darkens pixels beyond the lens circle; vignette adds a soft darkening toward the edges inside it, which sells the "real lens" look.

You'll mostly live on strength, rectilinear_fov, and maybe vignette. The others are there for when a frame is off-center or you want a harsher falloff.

Output

One output that matters: fisheye_images, an IMAGE batch the same size as your input. There's also an info string that logs every setting, handy when you're A/B testing and want to remember which combo produced which frame.

Installing it

Same pack as the rest of the Muffins nodes, and it's about as light as a dependency gets - the requirements file is just numpy. Via ComfyUI Manager, search "Muffins-Flat-2-Panoramic-node", or:

cd ComfyUI/custom_nodes
git clone https://github.com/Ragamuffin20/Muffins-Flat-2-Panoramic-node.git
cd Muffins-Flat-2-Panoramic-node
python -m pip install -r requirements.txt

Restart ComfyUI and the node appears under the video/utils category.

Gotchas

Because edge_fade darkens everything outside the lens circle, a frame with edge_fade left at the default will show dimmed corners even where there's real content - if you want the full frame visible, set it to 0. And keep in mind what this node is not: it won't produce a viewable equirectangular output on its own. It shapes the pixels for the final panoramic step; run it, then feed the result into the pack's apply panoramic / Convert To VR node. And since it warps in place, batch-processing a video clip gives you a consistent lens look frame to frame - which is exactly what you want from a second pass.

Categoryvideo/utils

Inputs (9)

NameTypeDefaultDescription
imagesIMAGE—
strengthFLOAT0.700–1—
rectilinear_fovFLOAT150.060–178—
zoomFLOAT1.000.25–3—
center_xFLOAT0.5000–1—
center_yFLOAT0.5000–1—
lens_radiusFLOAT0.980.25–1.5—
edge_fadeFLOAT0.080–0.5—
vignetteFLOAT0.280–1—

Outputs (2)

NameTypeDescription
fisheye_imagesIMAGE—
infoSTRING—