360° Viewer
Actually Look Inside Your 360° Panorama, Not At Its Warped Flat Self
- image
You've generated a 360° panorama - an equirectangular image, 2:1 aspect, the whole world smeared into one flat rectangle - and now you're stuck squinting at the default preview trying to figure out what the sides and the back actually look like. This is what View360 is for. It's a glorified preview node that wraps that flat panorama around the inside of a virtual sphere so you can drag to look around and scroll to zoom, right inside the ComfyUI graph. That's the entire job, and it does it without asking you for anything else.
It sits at the end of the pipeline as a terminal node, the same slot you'd drop a PreviewImage into. If your workflow is the two-stage "generate a 2:1 panorama, then treat it as a 360 environment" pattern (see the 3D generation notes in the KB for where that fits), this is the sanity-check step between the generator and whatever you do with the sphere next.
How it works
There's no ML here at all. The backend half is a few lines: it takes your IMAGE tensor, grabs the first frame of the batch, converts it to a PNG, and saves it to ComfyUI's temp directory. The frontend half, a custom node extension, then loads three.js (from the cdnjs CDN) and maps that PNG as a texture onto an inside-out sphere - scale -1 on the X axis, the classic equirectangular-to-sphere trick. Drag rotates your view, the scroll wheel zooms the camera FOV between 30° and 100°, and the renderer resizes along with the node. For a ten-line Python node, the mechanism is genuinely slick.
The inputs that matter
There's exactly one input:
image(IMAGE) - wire any image output into it. A torch tensor, so it works straight off a VAE decode.
That's it. No optional inputs, and - this catches people out - no outputs. It's a pure display node, OUTPUT_NODE = True, so it always runs and nothing can branch out of it. Don't expect to chain anything after it.
Installing it
Open ComfyUI Manager and search "360 Viewer", or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/pavel-zinchenko/comfyui-360-viewer
Restart ComfyUI. That's the whole install: no extra Python packages, no model files to download, nothing heavy. The one hidden dependency is that three.js is fetched from a CDN in your browser - which brings us to the gotchas.
Where people get burned
The name is a lie in the best way - it calls no API and needs no key, but it does need your browser to reach cdnjs. Run ComfyUI fully offline or behind a strict firewall and the sphere never appears; you just get the "Queue the node to load 360° view" placeholder forever.
Three more things worth knowing:
- Only the first frame shows.
image[0]. Feed it a batch of frames or a video and you'll preview exactly one of them, silently. For per-frame 360 video checking, this isn't the node. - It's a preview, not a save. It writes to
temp/, which ComfyUI clears. If you want the panorama kept, add a real SaveImage node to the same image - don't rely on View360 to preserve your work. - It won't fix a bad panorama. The image is wrapped 360° around the sphere no matter what, so a regular 16:9 image will look like you're standing inside a slightly-distorted cylinder. Feed it a proper 2:1 equirectangular and the geometry finally makes sense.
It's a tiny utility with one job, and it does that job well. If you generate panoramas, it's the difference between trusting the flat render and actually standing inside your scene.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — |
Outputs (0)
No outputs