Pepe Equirectangular Preview
Spin your 360° panorama around without leaving ComfyUI
- image
- image
- view
You generate an equirectangular panorama - a flat 2:1 image that wraps onto a sphere - and then you stare at the warped flat version and have no idea whether it's actually good. The horizon is a curve, the top and bottom are mush, and "looks right" is a guess. Pepe Equirectangular Preview is the viewport that fixes that: it renders your Lat-Long image as a proper perspective view inside the node, so you can look around the scene the way the person in the sphere would. It's a drop-in upgrade for the normal Preview Image node, specifically for 360 work.
The whole 360-with-ComfyUI scene is small but real - VR180/SBS generation, depth-into-3D panoramas, that kind of thing - and this is the missing eyeball on the output. Rather than exporting and loading the pano into some other viewer, you inspect it right on the canvas.
How it works
The node is built on ComfyUI's PreviewImage, so it inherits the standard preview plumbing - but instead of a flat thumbnail, the frontend shows a WebGL 2 viewer. Drag to rotate horizontally and vertically, use the mouse wheel to zoom the field of view, hit the fullscreen button to blow it up, and Reset to snap the camera back to default. If you feed it a batch of images, navigation buttons appear so you can flip through them.
Here's the clever part: the camera you're playing with isn't cosmetic. The hidden view_yaw, view_pitch, and view_fov values track the interactive view, and the view output re-renders the current perspective at whatever resolution you set. The projection math uses torch grid sampling on the GPU, so it's effectively the same camera as the browser viewer. The viewer state is stored with the node in the workflow, so what you were looking at survives a save and reload.
Inputs and outputs that matter
image- your equirectangular input. Should normally be 2:1 for correct spherical proportions.view_width/view_height- the render resolution of theviewoutput (default 1024, from 64 to 8192).view_yaw,view_pitch,view_fov- the camera. These are written by your mouse in the viewer, but they're normal inputs, so you can drive them from another node too. Want a slow turntable of the scene? Animate yaw.
Outputs: image - the exact input, passed through untouched (rotating and zooming never alters it). view - the rendered perspective frame from the current camera position.
One thing worth knowing: the perspective render is skipped entirely when view isn't connected. The source checks the graph for a connection before doing the work, so if you just want a fancy preview and don't need the rendered frame, leave view unwired and save yourself the compute.
Installing it
This ships in the ComfyUI-PepeUtils pack, so install it once and you get this plus the other Pepe utilities. Easiest route is ComfyUI Manager - search for ComfyUI-PepeUtils - or:
cd ComfyUI/custom_nodes
git clone https://github.com/Pepehoschi/ComfyUI-PepeUtils.git
Then restart ComfyUI. No extra dependencies: it runs on torch and the image libraries ComfyUI already ships, so there's nothing extra to pip install.
Gotchas
- If your input isn't 2:1, the sphere will look squashed. Fix the aspect ratio upstream.
- The preview is written to ComfyUI's temp image directory, not saved persistently. If you want the rendered
viewframe kept, route it into a Save Image node. - Since the
viewoutput is a fresh render each run, expect the node to re-execute when you change camera values - that's the feature, not a bug.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| view_width | INT | 102464–8192 | — |
| view_height | INT | 102464–8192 | — |
| view_yaw | FLOAT | 0.0-180–180 | — |
| view_pitch | FLOAT | 0.0-89.4–89.4 | — |
| view_fov | FLOAT | 75.025–110 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| view | IMAGE | — |