Nodes/Mickmumpitz-Nodes/Pano Seam Roll
ComfyUI Node

Pano Seam Roll

The one node that fixes the wrap seam on a 360° pano

By mickmumpitz·Created 8 months ago·Updated 17 days ago· 48
Pano Seam Roll
  • image
  • rolled_image
  • seam_mask
seam_width0.06
feather0

Every equirectangular panorama has a lie baked into its left and right edges. The image wraps around 360°, but when you outpaint it the two ends rarely line up - the generated content on the far left won't match the far right, and the moment you view it as a full sphere you get a visible vertical seam exactly at that wrap point. This node is the standard fix, packaged into one call.

What it does

Pano Seam Roll rolls the pano by half its width so the wrap seam moves to the center of the frame, and emits a centered vertical seam mask for inpainting. You outpaint that masked center strip (where the seam now is), then run the node again on the result to roll everything back. Rolling by W/2 is its own inverse, so the same node both prepares and unrolls.

The clever bit: after the roll, the new left/right edges are former interior content, which is continuous by construction. Only the old seam (now the center strip) is a discontinuity, and it's the only thing you need to repaint. Roll back, and the freshly painted strip sits exactly where the wrap happens.

Inputs and outputs

  • image - the pano, on its way in or back out.
  • seam_width - width of the center seam mask as a fraction of pano width. 0.06 ≈ a 6% strip, wide enough to cover the wrap discontinuity. Start there.
  • feather - horizontal feather in pixels on the seam mask. Keep 0 for a hard binary mask (most inpainting samplers are happiest with hard edges); raise it if your model wants a soft mask.

Outputs are rolled_image (the rolled pano) and seam_mask (the center strip, ready for an inpainting sampler). On the unroll pass you can ignore the mask output.

How it fits the workflow

You've already warped your photo and outpainted the holes. Now, before calling it done: SeamRoll → inpaint the center strip with the same prompt/settings that generated the rest → SeamRoll again to roll back. If you'd rather keep the seam where it is and just mask it, Pano Seam Mask does the mask half alone, and Pano Roll Horizontal rolls by any fraction (not just half).

Install

It's part of Mickmumpitz-Nodes - MIT, no model downloads, dependencies are just numpy, Pillow and opencv-python. ComfyUI Manager, search "Mickmumpitz", or:

cd ComfyUI/custom_nodes && git clone https://github.com/mickmumpitz/ComfyUI-Mickmumpitz-Nodes.git

Restart and it's under Mickmumpitz/Panorama as "Pano Seam Roll". This is one of those nodes you'll reach for on every single pano, because the seam is the one artifact that never fails to show up.

CategoryMickmumpitz/Panorama

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
seam_widthFLOAT0.060.01–0.5Width of the centre seam mask as a fraction of the pano width. 0.06 ~= a 6% strip. Wide enough to cover the wrap discontinuity.
featherINT00–256Horizontal feather (px) on the seam mask. Keep 0 for a hard binary mask; raise for a soft-mask sampler.

Outputs (2)

NameTypeDescription
rolled_imageIMAGE
seam_maskMASK