Nodes/Dustin ComfyUI Nodes/Dustin Marble Pano 360 Viewer
ComfyUI Node

Dustin Marble Pano 360 Viewer

Look around your Marble world in 360°, right inside the node

By zihualiu1997·Created 4 months ago·Updated 4 months ago· 1
Dustin Marble Pano 360 Viewer
  • image
  • image
max_preview_width4096
asset_urls_json
image_url

This is the flashiest node in the pack, and the one that proves its author cared about the little things. Dustin Marble Pano 360 Viewer is an interactive equirectangular panorama viewer embedded directly in the node - after a world generates, you drag inside the node to look around the 360° view and use the mouse wheel to zoom, like a web-based 360 player. It's the difference between "here's a flat image of the world" and "here's the world, look around."

How it works

The interesting part is the mechanics, because this is the pack's one piece of real frontend engineering. The node is an output that downloads the panorama server-side (avoiding CORS issues with Marble's CDN), downscales it if needed, and writes a temp file. A DOM widget then loads an iframe running js/pano_embed.html, which renders the image with Pannellum - the open-source 360 viewer library - bundled locally under js/vendor/pannellum/, no CDN, so it works offline. The iframe wrapper is deliberate: it keeps pointer events from being stolen by the workflow canvas, and the author explicitly notes it works in both the Node 1.0 and Node 2.0 UIs - which, given how many custom nodes broke on the frontend rewrite, is a real compatibility flex. It also deliberately does not show the default flat ComfyUI image preview at the bottom, so the node stays a clean 360 player.

The inputs

You need at least one of three, and it accepts all of them:

  • asset_urls_json from a generate node (uses the pano_url) - the recommended wiring: Dustin Marble Generate World → asset_urls_json → Pano 360 Viewer.
  • image_url - a direct panorama URL.
  • image - an IMAGE tensor, if the panorama is already in your graph.

Then max_preview_width (default 4096) is the one knob: very large panoramas get downscaled to this width before preview to stay under WebGL texture limits. If a giant pano fails to render or the viewer behaves oddly, drop this number. It's a preview constraint, not a data loss - the image output tensor is what it is regardless.

The output

image is a plain IMAGE tensor, so despite being a viewer, it still hands the panorama downstream - wire it to Save Image and you can keep a copy. One quirk: this node is not flagged as an output node (the thumbnail and pano previews are), because the DOM widget handles its own display. If you notice the normal image preview missing, that's the design talking, not a bug.

When to use it

Use it whenever "did the world actually come together" demands more than a glance. The flat Preview Panorama is the fast check; this is the immersive one. There's a genuinely fun workflow here: generate, drag around the 360 view, get a real feel for the space, and decide whether to push the generation further or move on. The author's recommended pipeline - Generate World → asset_urls_json → this node - is exactly what I'd do too.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/zihualiu1997/dustin-comfyui-nodes

Restart ComfyUI, or install "dustin-comfyui-nodes" via ComfyUI Manager. The Pannellum files ship inside the pack, so there's nothing to download - the only requirement is requests (for the server-side download), and no API key is needed here, just a completed generation's JSON.

CategoryDustin Nodes/Marble

Inputs (4)

NameTypeDefaultDescription
max_preview_widthINT4096512–16384
asset_urls_jsonoptSTRING
image_urloptSTRING
imageoptIMAGE

Outputs (1)

NameTypeDescription
imageIMAGE