Nodes/ComfyUI-Dream-Interpreter/Panorama Camera View
ComfyUI Node

Panorama Camera View

Drag a virtual camera through your 360° panorama

By gokayfem·Created 2 years ago·Updated about a month ago· 85
Panorama Camera View
  • panorama
  • perspective_view
yaw0
pitch0
roll0
field_of_view80
width1024
height768

An equirectangular panorama is a weird thing to look at directly - a flat 2:1 image where the whole world is squashed onto one canvas. What you actually want, most of the time, is a normal-looking camera frame pointing at some part of that world. That's exactly what Panorama Camera View (the DreamEquirectToPerspective node) does: it renders a rectilinear perspective view from any direction inside your 360° image. You pick a direction, it hands you a flat photo-like frame.

It's the node you reach for when you want to turn a generated or photographed panorama into something you can feed to img2img, grab a thumbnail, or pull a clean reference frame out of a scene. It's the static, bake-it-into-a-png sibling of the pack's interactive WebGL viewer - same projection math, but you get a real IMAGE you can wire anywhere.

How it works

The mechanism is old-school computer graphics, done deterministically on CPU with numpy. For every output pixel it builds a ray, rotates that ray by your yaw/pitch/roll, converts the result to longitude/latitude, and bilinear-samples the source panorama (wrapping horizontally so the world is seamless). There's no model, no network call, no GPU involved - run it a thousand times and you get the same frame every time. That determinism makes it safe to batch: render a sweep of frames and animate them.

The inputs that matter

  • yaw (−180…180) - look left and right around the horizon. Animating this is how you do a virtual camera pan or turntable sweep.
  • pitch (−89…89) - look up and down. Note the clamp: you can't stare straight at the poles, which is a sensible guard because equirectangular tops and bottoms are heavily compressed.
  • field_of_view (20…150, default 80) - your lens. Low values zoom in like a telephoto, high values get wide and bendy. The default reads like a normal-ish camera lens.
  • width / height (128…4096, step 64, default 1024×768) - output size. Keep these in the source image's ballpark; the projection only reuses existing pixels, it doesn't invent detail.

The output is a single IMAGE called perspective_view - wire it into a Preview, a Save Image, an img2img pass, or whatever else eats an image.

Installing it

Install the whole pack once (all seven nodes come together):

cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI-Dream-Interpreter.git
python -m pip install -r requirements.txt

Restart ComfyUI. Or just use ComfyUI Manager and search for ComfyUI-Dream-Interpreter. The only Python dependencies are numpy and Pillow - no model downloads, no API keys, nothing to fetch. The node appears under panorama/dream toolkit.

Where people get burned

The biggest trap is feeding it a panorama that isn't a real 2:1 equirect. If the image is the wrong shape or the horizon is tilted, your "camera view" looks wrong in ways the projection can't fix - it faithfully shows whatever was in the source. Run the pack's Validate Dream Panorama node upstream and Repair Panorama Seam if the seam energy is high. And remember the poles: pitch near ±89 and low source resolution will smear and blur, because there simply isn't much data up there. If your view looks mushy, the fix isn't more zoom - it's a higher-resolution source panorama.

Categorypanorama/dream toolkit

Inputs (7)

NameTypeDefaultDescription
panoramaIMAGE
yawFLOAT0-180–180
pitchFLOAT0-89–89
rollFLOAT0-180–180
field_of_viewFLOAT8020–150
widthINT1024128–4096
heightINT768128–4096

Outputs (1)

NameTypeDescription
perspective_viewIMAGE