Panorama Stickers
The node that turns 'make a panorama' into an outpainting problem
- bg_erp
- sticker_image
- audio
- cond_erp
- mask
Panorama Stickers is the flagship of nomadoor's ComfyUI-Panorama-Stickers pack, and the node everything else orbits. Its job: let you place, scale, and rotate images onto a 2:1 equirectangular (ERP) canvas - inside an interactive 360° editor, not on a flat rectangle - and output a composited conditioning image for outpainting. If you've ever wanted to control exactly where things appear in a 360° panorama, this is how you do it.
The mental model is the author's own, and it's worth stealing. He treats "make a panorama" as an outpainting problem: start with an empty ERP canvas, paste your reference images onto it like a rough collage (those are the "stickers"), and let the model fill in everything else. To make that work, the node exports the canvas with the empty areas painted a specific background color - green by default, #00ff00 - and his FLUX.2 Klein 360° ERP outpaint LoRA is trained to interpret that green as "fill me in." So the workflow is: place stickers, export the green-screened control image, and the KSampler outpaints the green.
How it works
Everything lives in a modal editor rendered in your browser (WebGL since v1.1.0). You add images, then drag them around in panorama space - yaw, pitch, scale, roll - while a live sphere view shows you where they actually land relative to the 360° world. The node serializes that layout into state_json, then renders the composited ERP: your stickers over the background color. It also produces a mask of everything you placed, so the green gap is cleanly separable.
The inputs and outputs that matter
output_preset-1024,2048,4096, orauto, default2048. This sets the output canvas width (the height is half that for 360 coverage). The author recommends 2048×1024 as the practical size for the LoRA, and honestly it's still not super high-res for a full panorama - that's what post-upscaling is for.autosizes the output to matchbg_erpif it's connected, and falls back to 2048 otherwise.coverage-360(full sphere) or180(half-sphere, added in v1.3.0).bg_color- the background the model will outpaint. Default#00ff00green, and that default is load-bearing: it's the green-screen convention the LoRA expects. Don't change it for fun, or the LoRA won't know what to fill.state_json- the sticker layout, normally written by the editor. Leave it alone unless you're scripting.bg_erp- optional background ERP to composite under the stickers instead of a flat color.sticker_image+sticker_state- optional inputs that make the "stitch back" loop work: pass therect_image/sticker_stateoutputs of Panorama Cutout in here and an edited frame gets dropped back at exactly the right position in the sphere.fps/audio- preview playback for video inputs. Irrelevant for stills.
Outputs are cond_erp - the composited conditioning panorama - and mask of the placed stickers. cond_erp is not your final image; it's the control image you feed into the outpaint step (the example workflows chain it into a LoraLoaderModelOnly + KSampler setup with the Klein LoRA).
Installing it
ComfyUI Manager, search "Panorama Stickers", or:
cd ComfyUI/custom_nodes
git clone https://github.com/nomadoor/ComfyUI-Panorama-Stickers
Restart ComfyUI. The pack ships no models - the LoRA itself is a separate download from the author's HuggingFace (there are 4B and 9B variants). Runtime deps are just numpy/PIL/torch, already in ComfyUI; PyAV is only needed for video preview encoding.
Where people get burned
The author's own warnings, worth repeating: the LoRAs don't behave on distilled Klein models - use the base FLUX.2 Klein. And seam matching at the wrap edges is still hard, so budget for a Panorama Seam Prep + upscale pass afterward. People also get confused when they plug a real-life screenshot in as a sticker and the panorama "doesn't make sense" - the green outpaint only fills around what you placed; garbage in, garbled world out. And if you change bg_color, understand you've broken the contract with the LoRA.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| output_preset | COMBO | 2048 | 4 options: 1024, 2048, 4096, auto |
| coverage | COMBO | 360 | 2 options: 360, 180 |
| bg_color | STRING | #00ff00 | — |
| state_json | STRING | — | |
| fps | FLOAT | 241–120 | Preview playback framerate. |
| bg_erpopt | IMAGE | — | |
| sticker_imageopt | IMAGE | — | |
| sticker_stateopt | STRING | — | |
| audioopt | AUDIO | Optional audio for preview playback. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| cond_erp | IMAGE | — |
| mask | MASK | — |