ComfyUI Node

360° Viewer

Actually Look Inside Your 360° Panorama, Not At Its Warped Flat Self

By pavel-zinchenko·Created 3 months ago·Updated 3 months ago· 0
360° Viewer
  • 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.

    Categoryimage

    Inputs (1)

    NameTypeDefaultDescription
    imageIMAGE

    Outputs (0)

    No outputs