Nodes/atlas-camera/Atlas Add Patch View (multi-angle) 🩹
ComfyUI Node

Atlas Add Patch View (multi-angle) 🩹

A ComfyUI node in Atlas/06 Β· Patch & Repair with 28 inputs and 2 outputs.

By mikejamesvfxΒ·Created 2 months agoΒ·Updated about 23 hours agoΒ· 1
Atlas Add Patch View (multi-angle) 🩹
  • solve
  • patch_image
  • plate_ref
  • primary_depth
  • exclude_mask
  • patch_mask
  • primary_image
  • solve
  • report
β—„patch_azimuth_viewfront-right quarter viewβ–Ί
β—„patch_elevation_vieweye-level shotβ–Ί
β—„patch_distancemedium shotβ–Ί
β—„source_azimuth_viewfront viewβ–Ί
β—„source_elevation_vieweye-level shotβ–Ί
β—„flip_azimuthfalseβ–Ί
β—„namepatchβ–Ί
β—„depth_modeldepth-anything/Depth-Anything-V2-Metric-Outdoor-Large-hfβ–Ί
β—„relief_grid96β–Ί
β—„priority1β–Ί
β—„deviceautoβ–Ί
β—„patch_view_overrideβ€”β–Ί
β—„exact_view_overrideβ€”β–Ί
β—„mask_unseen_onlytrueβ–Ί
β—„unseen_dilate_px16β–Ί
β—„geometry_sourcereuse_sceneβ–Ί
β—„camera_sourcedeclared_orbitβ–Ί
β—„registration_min_inliers40β–Ί
β—„registration_max_residual_m0.35β–Ί
β—„registration_max_deviation_deg25β–Ί
β—„auto_flip_azimuthtrueβ–Ί
CategoryAtlas/06 Β· Patch & Repair

Inputs (28)

NameTypeDefaultDescription
solveATLAS_SOLVEβ€”
patch_imageIMAGEβ€”
patch_azimuth_viewoptCOMBOfront-right quarter viewThe LoRA azimuth the patch was generated at β€” MUST match the Qwen Multiangle Camera node. Absolute about the subject's front.
patch_elevation_viewoptCOMBOeye-level shotThe LoRA elevation the patch was generated at (match the LoRA node).
patch_distanceoptCOMBOmedium shotThe LoRA distance the patch was generated at (match the LoRA node).
source_azimuth_viewoptCOMBOfront viewWhich view your SOURCE photo already is, in the LoRA's absolute frame. Orbit applied = patch βˆ’ source. Leave 'front view' for a straight-on source.
source_elevation_viewoptCOMBOeye-level shotElevation of the SOURCE photo in the LoRA's frame.
flip_azimuthoptBOOLEANfalseFlip left/right if the patch lands on the wrong side (recovered-camera handedness) β€” a calibration convenience.
nameoptSTRINGpatchβ€”
depth_modeloptCOMBOdepth-anything/Depth-Anything-V2-Metric-Outdoor-Large-hf10 options: depth-anything/Depth-Anything-V2-Metric-Outdoor-Large-hf, depth-anything/Depth-Anything-V2-Metric-Indoor-Large-hf, depth-anything/DA3METRIC-LARGE, depth-anything/DA3MONO-LARGE, depth-anything/DA3NESTED-GIANT-LARGE-1.1, Ruicheng/moge-2-vitl-normal, +4
relief_gridoptINT9616–4096Patch relief-mesh density (long-edge grid columns).
priorityoptFLOAT10–100Blend priority among patches (higher wins). The primary photo is always highest; patches only fill where it can't see.
plate_refoptATLAS_PLATE_REFOptional registered final plate reference. Browser still uses image_b64 preview; exporters use this for EXR/float-safe handoff.
deviceoptCOMBOauto4 options: auto, cuda, mps, cpu
patch_view_overrideoptSTRINGOptional: wire AtlasBlockoutViewport's patch_prompt output here (the '<sks> [azimuth] [elevation] [distance]' string from πŸ“ Extract Angle) β€” when connected it OVERRIDES the three patch_* dropdowns above, so the extracted angle drives both the Qwen generation and this node identically with one wire. (A single STRING socket because ComfyUI's backend rejects STRING links into combo dropdowns.) Errors loudly if the string doesn't parse, rather than silently patching at the wrong angle.
exact_view_overrideoptSTRINGOptional: wire AtlasBlockoutViewport's patch_exact output here ('azimuth_deg=.. elevation_deg=.. distance_scale=..' β€” πŸ“'s RAW measured orbit, before named-view snapping β€” or AtlasCameraMovePreset's exact_view, which appends 'pivot=x,y,z' so its scene-depth pivot is reproduced instead of the default ground-ray pivot). When connected it WINS over patch_view_override AND the dropdowns, and flip_azimuth is ignored (the raw delta is already in orbit_camera's own convention). This is the render-conditioned patch loop's channel: a frame baked at the artist's real orbit (then repaired by AtlasRenderFix) must project back from the IDENTICAL pose β€” the 45Β° named-view grid would misregister it. Errors loudly if unparseable.
mask_unseen_onlyoptBOOLEANtrueEmbed an UNSEEN-AREAS matte on the patch (ProjectionSource.mask_b64): the patch only paints where the PRIMARY camera's projection is invalid at the patch view (behind-camera, out-of-frame, and β€” when primary_depth is wired β€” hidden behind nearer geometry, the true MPTK depth-shadow test). Everywhere the primary CAN see keeps the primary's real pixels; the AI patch fills only genuine gaps. Also rides into the Nuke/Maya exports as the patch plate's alpha.
unseen_dilate_pxoptINT160–200Dilate the unseen matte so the patch slightly overlaps the primary's coverage edge (hides hairline seams at the boundary).
primary_depthoptATLAS_DEPTH_MAPSTRONGLY RECOMMENDED: the shared AtlasDepthMap of the SOURCE photo. Enables (1) overlap-based scale REGISTRATION β€” the patch mesh's metric scale is solved by matching its depth against the primary's in the mutually-visible region, so the patch actually sits in the primary's world instead of trusting an independent (and fragile, on AI-generated views) ground fit; and (2) the true depth-shadow term in the unseen matte.
exclude_maskoptMASKSegmentation of the PATCH image's sky (run SAM3Segment on the generated novel view, prompt 'sky'). In reuse_scene mode it keeps the patch from painting sky onto scene geometry; in own_depth mode it REPLACES the internal sky heuristic during meshing (hallucinated near-depth sky otherwise triangulates into geometry bulging toward the camera).
geometry_sourceoptCOMBOreuse_scenereuse_scene (recommended): the patch derives NO geometry of its own β€” it becomes a pure texture projector onto copies of the geometry already in the solve (sky dome, band meshes, derived proxies), exactly how a DMP artist projects new paint from a second camera onto the SAME geo in Nuke. The scale/registration problem dissolves: that geometry is in the primary's world by construction, and Qwen scene mismatch shows only as texture misalignment, never floating geometry. No depth model runs. own_depth: the previous behavior (Depth Anything on the patch + overlap registration) β€” for patches revealing genuinely NEW terrain no existing geometry covers. Auto-falls back to own_depth when the solve carries no geometry to reuse.
patch_maskoptMASKOptional REGION-OF-INTEREST matte in the patch image's own frame: the patch only ever paints INSIDE it (ANDed with the unseen matte, both sides sharing unseen_dilate_px of overlap). The occlusion-fill loop wires the FILLED hole pixels here so a repaired end frame contributes exactly its fills β€” not a second full-frame copy of the scene, and never the sentinel still marking holes that were NOT filled.
camera_sourceoptCOMBOdeclared_orbitdeclared_orbit: place the patch by the named-view difference (the LoRA angle you asked for; flip_azimuth by eye). register_to_primary: MEASURE the patch camera β€” MoGe pointmap on the patch + SIFT matches to the primary photo -> RANSAC similarity (s,R,t) against the primary's metric depth. Needs primary_depth (metric) and the primary image. Resolves flip_azimuth automatically and reports inliers / residual / deviation from the declared orbit. Falls back to the declared orbit (with the numbers) when the gates fail. Generated pixels register TO the measured world; the primary never moves. The pose inherits primary_depth's SCALE (metric when that is; always consistent with the geometry the patch projects onto).
primary_imageoptIMAGEThe SOURCE photo (same image the solve came from), for feature matching in register_to_primary. If not wired the node tries solve.image_path.
registration_min_inliersoptINT406–5000Reject the measured camera below this many RANSAC inliers.
registration_max_residual_moptFLOAT0.350.01–50RANSAC inlier threshold AND accept ceiling on the 3D RMS residual, in metres of the primary's world.
registration_max_deviation_degoptFLOAT250–180Reject when the measured camera's forward axis deviates more than this from the closest declared orbit (flip or no flip). Catches a LoRA that ignored the requested angle.
auto_flip_azimuthoptBOOLEANtrueregister_to_primary: accept whichever handedness (flip on/off) the measurement lands on and record it. Off = a closer FLIPPED pose counts as a disagreement with your flip_azimuth.

Outputs (2)

NameTypeDescription
solveATLAS_SOLVEβ€”
reportSTRINGβ€”