Nodes/Atlas Camera/Atlas Outpaint Depth πŸͺŸ
ComfyUI Node

Atlas Outpaint Depth πŸͺŸ

Give the outpainted ring a real surface underneath

By mikejamesvfxΒ·Created 3 months agoΒ·Updated a day agoΒ· 1
Atlas Outpaint Depth πŸͺŸ
  • depth
  • widened_image
  • solve
  • depth
  • ring_mask
  • report
  • widened_solve
β—„depth_modeldepth-anything/Depth-Anything-V2-Metric-Outdoor-Large-hfβ–Ί
β—„deviceautoβ–Ί
β—„feather_px0β–Ί
β—„pad_overrideβ–Ί

Outpainting widens your plate - the model invents plausible pixels beyond the original frame. The problem is that your depth map still ends at the old frame edge, and the widened ring is edge-replicated smear with nothing under it. Push the camera into that ring and there's no surface to project onto. Atlas Outpaint Depth is the node that extends the depth map to match the outpainted plate - geometry for the ring, not just colour. It's the πŸͺŸ in Atlas/03 Β· Depth.

The pack's own docs call the frame-edge reveal "the binding constraint on wide scenes." This node is the workaround that makes wide scenes work: outpaint the colour, then extend the depth so the projection has somewhere to land.

How it works

You feed it the depth for the original, un-widened plate plus the widened image, and it derives the padding from the size difference. Then it runs the chosen depth model on the widened image and reconciles the two depth maps: the new depth fills the ring outside the original frame, while the original's measured pixels stay untouched. The two maps are in different scales and characters by nature, so the node affine-fits the new depth to the old before blending - which is why the depth_model tooltip insists you use the same model that produced the input depth. A different model changes both scale and character, and the affine fit can only absorb the scale.

Outputs include a widened_solve - but only when you wire in the solve for the original plate, which the tooltip describes as strongly recommended. Without it there's no widened solve, and every geometry node reads width/cx/cy from the solve rather than the depth map - so widened depth on the original camera misregisters the new ring while looking entirely plausible. That's the kind of bug that costs you a day.

Inputs and outputs

  • depth (required) - depth for the original, un-widened plate.
  • widened_image (required) - the plate after outpainting, larger than the original.
  • depth_model - same model as the input depth; default DA-V2-Metric-Outdoor.
  • device - auto/cuda/mps/cpu.
  • solve - the solve for the original plate; unlocks widened_solve.
  • feather_px - blend the new depth into the original across this many pixels inside the frame edge. 0 keeps every measured pixel exactly and takes new depth only outside. Raise it only if a residual step shows at the boundary - it trades real measurement for a smoother join.
  • pad_override - explicit "left,top,right,bottom" padding; empty splits the size difference evenly.

Outputs: depth (extended), ring_mask (the new ring), report, and widened_solve (when solve is wired).

Installing it

Needs a depth model upstream, but the node itself is core:

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

Restart, find it in Atlas/03 Β· Depth (ComfyUI Manager: "atlas-camera"). DA-V2-Metric-Outdoor needs nothing extra - it's transformers-only.

Common issues

Wire the solve. Seriously - the tooltip's warning is the single most useful sentence in this node: without it, the widened depth misregisters against the original camera and looks completely plausible while being wrong. A day of camera moves on a subtly-off ring is exactly how you discover it.

And keep the depth model consistent. Mixing DA-V2 for the original with MoGe for the ring doesn't just change scale - it changes the character of the depth, and the affine fit can't fix that. Same model in, same model out. feather_px stays at 0 until you actually see a step at the boundary; every feather pixel replaces a measured pixel with a blend.

CategoryAtlas/03 Β· Depth

Inputs (7)

NameTypeDefaultDescription
depthATLAS_DEPTH_MAPDepth for the ORIGINAL, un-widened plate.
widened_imageIMAGEThe plate AFTER outpainting β€” larger than the original. The padding is derived from the size difference.
depth_modeloptCOMBOdepth-anything/Depth-Anything-V2-Metric-Outdoor-Large-hfUse the SAME model that produced the input depth. A different one changes both scale and character, and the affine fit can only absorb the scale.
deviceoptCOMBOauto4 options: auto, cuda, mps, cpu
solveoptATLAS_SOLVEThe solve for the ORIGINAL plate. Strongly recommended β€” without it there is no `widened_solve` output, and every geometry node reads width/cx/cy from the SOLVE rather than the depth map, so widened depth on the original camera misregisters the new ring while looking entirely plausible.
feather_pxoptINT00–512Blend the new depth into the original across this many pixels INSIDE the frame edge. 0 keeps every measured pixel exactly and takes new depth only outside the frame. Raise it only if a residual step is visible at the boundary β€” it trades real measurement for a smoother join.
pad_overrideoptSTRINGExplicit 'left,top,right,bottom' padding in pixels. Leave empty to split the size difference evenly, which is what a symmetric outpaint produces.

Outputs (4)

NameTypeDescription
depthATLAS_DEPTH_MAPβ€”
ring_maskMASKβ€”
reportSTRINGβ€”
widened_solveATLAS_SOLVEβ€”