Atlas Equirect Multi-View π
A full 360Β° panorama becomes one solvable multi-camera scene
- equirect
- solve
- all_views
- report
Most of this pack lives on the "one photograph" front door. AtlasEquirectMultiView is the day you have something better: an equirectangular 360Γ180 panorama. Where a single photo gives you one viewpoint and a horizon of holes behind you, this node cuts the panorama into a ring of perspective cameras, solves them together into one multi-camera solve sharing a single optical centre, and hands you a scene you can orbit a full 360Β° without the world falling apart.
It lives in the Atlas/01 Input & Camera folder because it is a solve source - not a geometry node. The output is an ATLAS_SOLVE (plus the crops for preview), ready to feed the same derive/viewport/export chain as a single-photo solve.
How it works
The equirect is sliced into n_views perspective cameras around a ring, each with fov_deg and size, and each view is solved independently. The unifying trick: all views share one optical centre, so the pack can establish one shared camera height by taking the median across the independently-solved views - the tooltip's point being that any spread between them is estimation noise, not geometry. Everything then locks into one metric world.
Two tooltips carry hard-won measurement, and they're the ones to remember:
n_views(default 4, 2β32): 4 is the measured sweet spot. Going 2β4 closes the Β±90Β° gap that makes a sideways dolly disocclude (the pack measured the safe z-dolly jump going 4.2Γ, from 0.233 m to 0.983 m) and the budget then plateaus. Beyond 4 you're buying projection coverage, not camera freedom - raise it only when projection quality matters more than runtime. Each view costs one depth pass.depth_modeldefaults to MoGe (Ruicheng/moge-2-vitl-normal), and V2 is deliberately not offered - the tooltip says it mis-scales panorama crops ~4.4Γ (measured on two 8K plates). Don't fight this; it's a real, measured reason.
Other inputs
pitch_deg(default 0) - the ring tilt, and the tooltip's advice is emphatic: keep it at 0. Tilting removes the horizon and the ground-plane fit stops working (measured: 0 of 6 views reached a measured scale at β20/β40/β60Β°).yaw_offset_deg- rotate the whole ring to move a seam off your subject. Cheap and useful.height_samples(default 4) - views solved independently to establish the one shared height.fov_deg(default 90),size(default 1024) - per-view crop camera.relief_grid(default 256),max_side(cap the long edge before depth inference - with N views the cost multiplies, so this matters more here than on a single plate),device.
Outputs: solve, all_views (the crops, for preview), and report.
Install
cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git
Restart (or Manager β "atlas-camera"). Needs the [neural] tier, and in practice the [moge] extra since MoGe is the default backend here. The kornia <0.8.3 cap protects LTXVideo; GitHub-only packages install best with --no-deps on portable ComfyUI. New pack, no community folklore - the measured notes in these tooltips (n_views plateau, pitch=0, MoGe-only) are exactly the kind of detail you'd normally have to rediscover by trial and error, so trust them.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| equirect | IMAGE | Equirectangular 360x180 panorama, normally 2:1. | |
| n_viewsopt | INT | 42β32 | Cameras around the ring; each costs one depth pass. 4 is the measured sweet spot β going 2->4 closes the +-90deg gap that makes a sideways dolly disocclude (safe z dolly jumps 4.2x, 0.233 -> 0.983 m) and the budget then PLATEAUS. Beyond 4 you are buying projection coverage, not camera freedom: torn frame keeps falling (11.7% at 4, 7.4% at 8, 5.5% at 12) while the move budget drifts slightly DOWN. Raise it when the projection quality matters more than the runtime. |
| fov_degopt | FLOAT | 9020β150 | β |
| sizeopt | INT | 1024128β4096 | β |
| depth_modelopt | COMBO | Ruicheng/moge-2-vitl-normal | MoGe. V2-Metric-Outdoor mis-scales panorama crops ~4.4x (measured on two 8K plates), so it is deliberately not offered here. |
| height_samplesopt | INT | 41β32 | Views solved independently to establish the ONE shared camera height, taken as their MEDIAN. They share an optical centre, so any spread between them is estimation noise, not geometry. |
| pitch_degopt | FLOAT | 0-80β80 | Ring tilt. KEEP AT 0 β tilting removes the horizon and the ground-plane fit stops working (measured: 0/6 views reached a measured scale at -20/-40/-60). |
| yaw_offset_degopt | FLOAT | 0-360β360 | Rotate the whole ring β moves a seam off your subject. |
| relief_gridopt | INT | 25632β1024 | β |
| deviceopt | COMBO | auto | 4 options: auto, cuda, mps, cpu |
| max_sideopt | INT | 00β16384 | Cap the longer edge before depth inference (0 = off). With N views the cost multiplies, so this matters more here than on a single plate. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| solve | ATLAS_SOLVE | β |
| all_views | IMAGE | β |
| report | STRING | β |