Fisheye Lens Warp Only
A fisheye warp that adds nothing — no padding, no resize, just distortion
- images
- fisheye_images
- info
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) andvignette(default 0.28) - the two cosmetic controls.edge_fadedarkens pixels beyond the lens circle;vignetteadds 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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| strength | FLOAT | 0.700–1 | — |
| rectilinear_fov | FLOAT | 150.060–178 | — |
| zoom | FLOAT | 1.000.25–3 | — |
| center_x | FLOAT | 0.5000–1 | — |
| center_y | FLOAT | 0.5000–1 | — |
| lens_radius | FLOAT | 0.980.25–1.5 | — |
| edge_fade | FLOAT | 0.080–0.5 | — |
| vignette | FLOAT | 0.280–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| fisheye_images | IMAGE | — |
| info | STRING | — |