Nodes/Muffins Flat 2 Panoramic/Fisheye Projection Only
ComfyUI Node

Fisheye Projection Only

Project a perspective frame into a fisheye view for a second outpaint pass

By Ragamuffin20·Created 5 months ago·Updated about a month ago· 19
Fisheye Projection Only
  • images
  • fisheye_images
  • info
roll0.00
pitch0.00
vfov100.00
use_input_sizetrue
output_side1024
fill_modeedge

This is the sibling of Fisheye Lens Warp Only, and the difference between the two is the whole story. Lens Warp bends pixels in place - same frame, more curvature. This node instead reprojects your frame into a square fisheye-shaped view: it builds a fresh square output canvas and maps your perspective image onto it like it's a scene captured by a fisheye lens. Different output shape, different job.

It's the "Projection" node for the pack's second-pass step. The Muffins pipeline works like this: outpaint a flat frame onto a panoramic canvas, then run a pass to make the result look like it came from a real lens before the final VR conversion. FisheyeProjectionOnly is the version you reach for when you want the output to be an actual square fisheye frame - the classic circular image with the horizon line curved through the middle - rather than just a warped version of what you had.

How it works

The mechanism is the standard perspective-to-fisheye projection. The node builds a grid of view directions across the square output canvas, applies your rotation, then shoots those directions back through a pinhole camera model of your input image: vfov sets the field of view, and the vertical FOV plus image height determines the effective focal length. Pixels that land outside the input image are handled by fill_mode.

The two fill_mode choices matter more than they look:

  • edge (default) - outside-lens pixels are clamped to the nearest edge pixel. No black padding gets baked in, so a downstream outpaint has something plausible to extend from rather than a hard black ring.
  • black - classic black circle around the fisheye. Pick this if you genuinely want the black padding to be part of the output.

Inputs you'll actually touch

  • vfov (default 100) - how much of the scene the fisheye captures. Higher = wider.
  • roll and pitch - rotate the view before projecting. Handy when your source horizon isn't level.
  • fill_mode - the edge-vs-black choice above.
  • use_input_size / output_side - square output size. With use_input_size on (default), the side is derived from your input's longest dimension; turn it off to set output_side explicitly (1024 default, up to 16384).

Everything else - center_x, center_y, lens_radius - that Lens Warp carries isn't here, because this node isn't pretending to be one specific lens; it's just projecting. The output is fisheye_images (the square IMAGE batch) plus an info string summarizing the projection parameters.

Install

Same pack, same trivial setup - requirements.txt is just numpy, no models to fetch. 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 it shows up under video/utils.

The one thing to remember

If your input is already a square fisheye image, don't run it through this node - you'd be re-projecting something already projected. This is for perspective/rectilinear source frames that need to become fisheye. And if all you want is mild curvature on a frame you're keeping square, Fisheye Lens Warp Only is the lighter touch; reach for this one when you want the honest square-fisheye frame to feed the final VR conversion.

Categoryvideo/utils

Inputs (7)

NameTypeDefaultDescription
imagesIMAGE
rollFLOAT0.00-180–180
pitchFLOAT0.00-89.9–89.9
vfovFLOAT100.001–179
use_input_sizeBOOLEANtrue
output_sideINT1024256–16384
fill_modeCOMBOedge2 options: edge, black

Outputs (2)

NameTypeDescription
fisheye_imagesIMAGE
infoSTRING