Nodes/Atlas Camera/Atlas Equirect Multi-View 🌐
ComfyUI Node

Atlas Equirect Multi-View 🌐

A full 360Β° panorama becomes one solvable multi-camera scene

By mikejamesvfxΒ·Created 3 months agoΒ·Updated a day agoΒ· 1
Atlas Equirect Multi-View 🌐
  • equirect
  • solve
  • all_views
  • report
β—„n_views4β–Ί
β—„fov_deg90β–Ί
β—„size1024β–Ί
β—„depth_modelRuicheng/moge-2-vitl-normalβ–Ί
β—„height_samples4β–Ί
β—„pitch_deg0β–Ί
β—„yaw_offset_deg0β–Ί
β—„relief_grid256β–Ί
β—„deviceautoβ–Ί
β—„max_side0β–Ί

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_model defaults 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.

CategoryAtlas/01 Β· Input & Camera

Inputs (11)

NameTypeDefaultDescription
equirectIMAGEEquirectangular 360x180 panorama, normally 2:1.
n_viewsoptINT42–32Cameras 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_degoptFLOAT9020–150β€”
sizeoptINT1024128–4096β€”
depth_modeloptCOMBORuicheng/moge-2-vitl-normalMoGe. V2-Metric-Outdoor mis-scales panorama crops ~4.4x (measured on two 8K plates), so it is deliberately not offered here.
height_samplesoptINT41–32Views 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_degoptFLOAT0-80–80Ring 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_degoptFLOAT0-360–360Rotate the whole ring β€” moves a seam off your subject.
relief_gridoptINT25632–1024β€”
deviceoptCOMBOauto4 options: auto, cuda, mps, cpu
max_sideoptINT00–16384Cap 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)

NameTypeDescription
solveATLAS_SOLVEβ€”
all_viewsIMAGEβ€”
reportSTRINGβ€”