Panorama Cutout
Take a normal photo from inside your 360° panorama
- erp_image
- audio
- rect_image
- sticker_state
- mask
A 360° equirectangular image - that squished 2:1 rectangle where the whole world is wrapped around the middle - is genuinely hard to judge flat. You can't tell what a given direction actually looks like, where the horizon sits, or whether the geometry holds up. Panorama Cutout is the node that fixes that by letting you "take a photo" from inside the panorama: you point a camera at whatever direction you like, and it extracts a normal perspective frame you can actually look at, edit, and use.
It's one of four nodes in nomadoor's ComfyUI-Panorama-Stickers pack, which was built around the author's FLUX.2 Klein 360° ERP outpaint LoRA. That pack treats "make a panorama" as an outpainting problem - and the whole reason outpainting is usable is that you can step inside the result and pull out clean views. Cutout is the "step inside" half of the loop. The other half is Panorama Stickers, which drops images back into the sphere. The two feed each other.
How it works
The node samples the equirectangular image at a given direction - yaw, pitch, and a horizontal/vertical field of view - using a bilinear sampling map that inverts the ERP projection. Open the node and you get an interactive modal editor (WebGL-rendered since v1.1.0) where you drag to look around and frame your shot. Since v1.4.0 the Frame view is an interactive crop-style camera editor with direct framing, aspect-ratio, and roll controls. It also handles video: feed it a batch of ERP frames and it renders each one, with preview playback at the fps you set.
The inputs and outputs that matter
You mostly touch three things:
erp_image- your 2:1 equirectangular input. If it's a video batch, every frame gets cut out.coverage-360(full sphere, the default) or180for half-sphere panoramas added in v1.3.0.output_megapixels- default 1.0. This sets how big the extracted frame is. Bump it toward 4+ megapixels for a sharp export; drop it for quick drafts. The node caps at 4096 on the long side.
state_json carries your camera shot out of the modal editor - you normally never touch it by hand. fps and audio only matter when the input is video.
The outputs are where this node earns its keep:
rect_image- the extracted perspective frame.sticker_state- the JSON position of that shot in 360° space. This is the clever bit: feed this back into Panorama Stickers along withrect_image, and the image gets placed back exactly where it came from. The author calls this "frame stitch back," and it's how you take a frame, fix it in a normal editor or inpaint pass, and drop the result into the sphere without re-painting anything.mask- a mask of the frame, useful if you painted or edited part of it and want to composite selectively.
Installing it
Same story as every node in this pack: install via ComfyUI Manager (search "Panorama Stickers"), or clone it in:
cd ComfyUI/custom_nodes
git clone https://github.com/nomadoor/ComfyUI-Panorama-Stickers
Then restart ComfyUI. The pack has no model files of its own and no heavy Python deps - it runs on numpy/PIL/torch that ComfyUI already ships. The one optional extra is PyAV or similar encoders, only needed if you want mp4 preview playback for video inputs.
Where people get burned
The most common confusion: if you haven't actually configured a shot in the editor, the node does a pure passthrough - it returns your input image unchanged (plus an empty mask) rather than erroring. If you see the raw equirectangular coming out of rect_image, you haven't set a camera view.
Also worth knowing: this node extracts, it doesn't fix. If your panorama has a visible seam at the wrap point, the cutout will happily show it to you. That's a job for Panorama Seam Prep before you export, or a seam-inpaint pass after.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| erp_image | IMAGE | — | |
| coverage | COMBO | 360 | 2 options: 360, 180 |
| state_json | STRING | — | |
| output_megapixels | FLOAT | 1.00 | — |
| fps | FLOAT | 241–120 | Preview playback framerate. |
| audioopt | AUDIO | Optional audio for preview playback. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| rect_image | IMAGE | — |
| sticker_state | STRING | — |
| mask | MASK | — |