Repair Panorama Seam
Kill the seam on your 360° image
- panorama
- seam_repaired
- seam_proof
- report
Every equirectangular image has a seam: the place where the left edge meets the right edge and wraps around the world. Generated panoramas usually have a visible discontinuity there - one row of pixels where the two ends don't line up. Repair Panorama Seam (DreamPanoramaSeamBlend) crossfades that seam so the wrap looks continuous, and it gives you a magnified proof strip so you can actually check the fix instead of trusting it. It's the polite cleanup step between generating a panorama and projecting it into a camera view, a little planet, or the interactive viewer.
How it works
Straightforward linear crossfade, done in numpy. It takes the first blend_width columns and the last blend_width columns and blends each mirrored pair together with a linear weight ramp, so the two edges dissolve into each other instead of abutting. The blend is capped at a quarter of the image width so you can't accidentally smear a huge chunk of the picture. Then it rolls the result so the (former) seam lands dead center, crops a strip about six times the blend width wide, and hands you that as seam_proof - a magnified look at exactly the region you care about. You also get a JSON report with the seam error before and after (mean absolute difference between the edge columns), so you can see the fix working in numbers.
This is a smoothing operation, not a content-aware repair. If the two edges genuinely show different content, blending softens the boundary but can't invent a seamless transition - that's a job for inpainting or regenerating with a proper 360 model. The README is upfront that repair tools can't create missing scene content.
Inputs and outputs
- panorama - your equirect IMAGE.
- blend_width (1…512, default 48) - how wide the crossfade zone is in pixels. Small seams want small values; a stubborn mismatch may want more. The sweet spot depends on your source resolution, which is why the proof strip exists.
Outputs: seam_repaired (the image to actually use downstream), seam_proof (the magnified proof strip - look at it), and report (the before/after JSON string).
Installing it
Part of the shared pack - ComfyUI Manager (search ComfyUI-Dream-Interpreter) or:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI-Dream-Interpreter.git
python -m pip install -r requirements.txt
Restart ComfyUI. Only numpy and Pillow required, no models to fetch. The node sits under panorama/dream toolkit.
Where people get burned
The classic mistake is cranking blend_width way up hoping to erase a bad seam, and ending up with a soft smeared blur on both edges - the cap at width/4 stops the worst of it, but the honest fix for a big mismatch is to sort the source out (inpaint the seam region, or generate with a 360-aware model). The other habit worth building: actually wire seam_proof to a preview. It's the entire reason the node hands it to you. If the proof strip looks clean, you're done; if not, adjust and re-run before you project anything. The proof is a centered strip after the roll, so it always shows you the seam zone at a readable scale.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| panorama | IMAGE | — | |
| blend_width | INT | 481–512 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| seam_repaired | IMAGE | — |
| seam_proof | IMAGE | — |
| report | STRING | — |