Nodes/Atlas Camera/Atlas Multi-View RAW Solve πŸ“·πŸ“·
ComfyUI Node

Atlas Multi-View RAW Solve πŸ“·πŸ“·

Two frames make the scale real

By mikejamesvfxΒ·Created 3 months agoΒ·Updated a day agoΒ· 1
Atlas Multi-View RAW Solve πŸ“·πŸ“·
  • image_1
  • image_2
  • image_3
  • raw_meta_1
  • raw_meta_2
  • raw_meta_3
  • plate_ref_1
  • plate_ref_2
  • plate_ref_3
  • solve
  • report
  • registration_json
  • match_overlays
β—„capture_modeautoβ–Ί
β—„camera_height_m0.00β–Ί
β—„match_qualitybalancedβ–Ί
β—„seed0β–Ί
β—„learned_anchor_fallbackfalseβ–Ί
β—„baseline_m0.00β–Ί
β—„learned_scale_fallbackfalseβ–Ί
β—„pair_topologyautoβ–Ί

The atlas-camera pack's single-photo solve is the front door, and it's good. But a single photo has a fundamental limitation: scale is inferred, not measured. The camera knows angles, not metres. Atlas Multi-View Solve is the upgrade for when you control the shoot - take two or three frames of the same scene from slightly different positions and the pack registers them into a calibrated rig, giving you the only path to a measured metric baseline rather than an inferred one.

It's the πŸ“·πŸ“· node in Atlas/01 Β· Input & Camera, and it's aimed squarely at the person who can walk around the subject before shooting. Same rig the burst node uses under the hood, just with explicit image inputs instead of a folder.

How it works

The node feeds each frame through the same registration engine, matches features across views, and recovers the relative camera poses - a calibrated rig. From there it solves the scene. The metric scale comes from actual parallax between the views: two frames of the same wall from two positions give real triangulation, not a learned guess at eye height. That's why the README calls it the upgrade "when you control the shoot."

Two inputs are meaningful for the result quality:

  • baseline_m - if you measured the distance between the two camera positions (a walking burst, a tape measure), type it in. That makes the rig genuinely metric instead of normalized-to-1.0. 0 = auto.
  • camera_height_m - the other scale anchor, used when translation baseline isn't available.
  • capture_mode - auto, translated, or rotation_only. Tell it what you actually did; a rotation-only capture genuinely can't measure scale, and the node behaves accordingly.
  • match_quality - balanced/conservative/permissive/salvage: how many matches it insists on before trusting a pair. Salvage is the last resort for hard frames.
  • learned_anchor_fallback and learned_scale_fallback - whether to drop back to a learned solver when the geometric path can't anchor or scale.
  • pair_topology - auto or anchor_star (every frame shares overlap with the anchor).

Inputs and outputs

Required: image_1 and image_2; image_3 optional. Wire raw_meta_1/2/3 from AtlasLoadRAW to feed measured intrinsics (this is the "RAW Solve" in the name) and plate_ref_1/2/3 for colour-managed plates.

Outputs: solve, report, registration_json (the rig description), and match_overlays - an image of the feature matches so you can see whether the node found real correspondence or guessed.

Installing it

Core + vision dependencies. A plain clone gets the node; the registration runs on numpy/OpenCV, which ComfyUI already ships:

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

Restart and it's in Atlas/01 Β· Input & Camera (ComfyUI Manager: "atlas-camera"). RAW metadata support wants the [raw] extra, but the solver itself doesn't need it.

Common issues

Two things will bite you. First, rotation-only captures can't measure scale - if you spin in place taking photos, there's no parallax to triangulate, so the scale comes from assumptions anyway and you've bought nothing. Actually translate between frames (the pack's docs call this the "walking burst" shape).

Second, check match_overlays before you trust the result. A clean registration is unambiguous; if the overlays show matches scattered on wrong features, that's your cue to switch match_quality or reshoot with more overlap. And if you have a real baseline measurement, spend the ten seconds typing it - baseline_m is the difference between "normalized to something" and "measured in metres."

CategoryAtlas/01 Β· Input & Camera

Inputs (17)

NameTypeDefaultDescription
image_1IMAGEβ€”
image_2IMAGEβ€”
image_3optIMAGEβ€”
raw_meta_1optATLAS_RAW_METAβ€”
raw_meta_2optATLAS_RAW_METAβ€”
raw_meta_3optATLAS_RAW_METAβ€”
plate_ref_1optATLAS_PLATE_REFβ€”
plate_ref_2optATLAS_PLATE_REFβ€”
plate_ref_3optATLAS_PLATE_REFβ€”
capture_modeoptCOMBOauto3 options: auto, translated, rotation_only
camera_height_moptFLOAT0.00β€”
match_qualityoptCOMBObalanced4 options: balanced, conservative, permissive, salvage
seedoptINT00–18446744073709550000β€”
learned_anchor_fallbackoptBOOLEANfalseβ€”
baseline_moptFLOAT0.00β€”
learned_scale_fallbackoptBOOLEANfalseβ€”
pair_topologyoptCOMBOauto2 options: auto, anchor_star

Outputs (4)

NameTypeDescription
solveATLAS_SOLVEβ€”
reportSTRINGβ€”
registration_jsonSTRINGβ€”
match_overlaysIMAGEβ€”