Nodes/Atlas Camera/Atlas Split Equirect 🌐
ComfyUI Node

Atlas Split Equirect 🌐

Atlas Split Equirect 🌐 β€” a 360Β° pano, cut into cameras Atlas can actually solve

By mikejamesvfxΒ·Created 3 months agoΒ·Updated 2 days agoΒ· 1
Atlas Split Equirect 🌐
  • equirect
  • view
  • exact_view
  • focal_mm
  • all_views
  • report
β—„n_views12β–Ί
β—„fov_deg90β–Ί
β—„size1024β–Ί
β—„view_index0β–Ί
β—„pitch_deg0β–Ί
β—„yaw_offset_deg0β–Ί

AtlasSplitEquirect takes a 360Β° equirectangular panorama (normally 2:1, like 4096Γ—2048) and cuts it into N perspective crops, each of which is already a valid Atlas pinhole camera. That sentence is doing more work than it looks like - Atlas is pinhole end to end: every solver, relief mesh and projection path assumes fx/fy/cx/cy intrinsics. An equirect is not a pinhole camera, so instead of modeling it as one, the pack just cuts it into perspective views that are. Twelve crops at 90Β° FOV is ComfyUI's default ring, and the tooltip explains why: overlap is what lets neighbouring depths agree where they meet.

Why bother? A single perspective plate has no data for what the camera never saw - which is the whole reason the pack's occlusion-graph, move-budget and guided-hole-repair machinery exists. A 360Β° capture supplies that coverage as real measured geometry instead of inventing it. This is the node that turns a panorama from "nice background" into "a full surrounding scene with real parallax."

Inputs that matter

  • equirect - the 2:1 panorama, one image per run.
  • n_views - crops around the ring (1–64, default 12).
  • fov_deg - horizontal/vertical FOV of each square crop (default 90). Wider = fewer views to cover the circle but more lens distortion for the solver to fit.
  • size - crop side length in pixels (default 1024).
  • view_index - which view leaves the single view/exact_view outputs (clamped to n_viewsβˆ’1); all_views always carries the batch.
  • pitch_deg - tilt of the whole ring. 0 keeps the horizon level, which is what the ground-plane scale fit wants.
  • yaw_offset_deg - rotate the ring, so you can move a seam off your subject.

Outputs: view (IMAGE), exact_view (STRING - the exact view descriptor), focal_mm (FLOAT), all_views (IMAGE batch), and a report. The README's wiring hint: view β†’ AtlasAddPatchView.patch_image, exact_view β†’ its exact_view_override.

The depth gotcha (read this one)

The node's own source carries a warning worth taking seriously: use MoGe for the depth, not V2-Metric-Outdoor. A 90Β° square crop is framing the DA2 V2-Metric-Outdoor model wasn't trained on, and it mis-scales badly - measured on two 8K panoramas, V2-Outdoor returned camera heights 4.3–4.6Γ— off where MoGe-2 returned plausible tripod heights. FOV stays exact either way; it's purely a metric-scale failure. So if your pano solves with believable focal but absurd height, the depth backend is the suspect. The pack supports [moge] (MoGe-2) and [neural-da3] as alternatives to the default Depth Anything V2 specifically because of this.

Install

The split itself is core and dependency-free:

cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git

Restart, or install via ComfyUI Manager ("atlas-camera"). It's under Atlas/01 Β· Input & Camera. If you're taking panoramas seriously, also install the [moge] backend (GitHub-only package - use the --no-deps route into ComfyUI's venv that INSTALL.md documents, since its own dependency list pulls gradio/matplotlib).

CategoryAtlas/01 Β· Input & Camera

Inputs (7)

NameTypeDefaultDescription
equirectIMAGEEquirectangular 360x180 panorama, normally 2:1 (e.g. 4096x2048). One image per run.
n_viewsoptINT121–64Crops around the ring. 12 at 90deg FOV is ComfyUI core's default and gives generous overlap β€” overlap is what lets neighbouring depths agree where they meet.
fov_degoptFLOAT9020–150Horizontal/vertical FOV of each square crop. Wider = fewer views to cover the circle, but more lens distortion for the solver to fit.
sizeoptINT102464–4096Crop side length in pixels.
view_indexoptINT00–63Which view leaves the `view`/`exact_view` outputs. Clamped to n_views-1. `all_views` always carries the batch.
pitch_degoptFLOAT0-80–80Tilt of the whole ring. 0 keeps the horizon level, which is what the ground-plane scale fit wants.
yaw_offset_degoptFLOAT0-360–360Rotate the ring β€” use it to move a seam off your subject.

Outputs (5)

NameTypeDescription
viewIMAGEβ€”
exact_viewSTRINGβ€”
focal_mmFLOATβ€”
all_viewsIMAGEβ€”
reportSTRINGβ€”