ComfyUI Node
Atlas Add Patch View (multi-angle) π©Ή
A ComfyUI node in Atlas/06 Β· Patch & Repair with 28 inputs and 2 outputs.
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)
| Name | Type | Default | Description |
|---|---|---|---|
| solve | ATLAS_SOLVE | β | |
| patch_image | IMAGE | β | |
| patch_azimuth_viewopt | COMBO | front-right quarter view | The LoRA azimuth the patch was generated at β MUST match the Qwen Multiangle Camera node. Absolute about the subject's front. |
| patch_elevation_viewopt | COMBO | eye-level shot | The LoRA elevation the patch was generated at (match the LoRA node). |
| patch_distanceopt | COMBO | medium shot | The LoRA distance the patch was generated at (match the LoRA node). |
| source_azimuth_viewopt | COMBO | front view | Which 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_viewopt | COMBO | eye-level shot | Elevation of the SOURCE photo in the LoRA's frame. |
| flip_azimuthopt | BOOLEAN | false | Flip left/right if the patch lands on the wrong side (recovered-camera handedness) β a calibration convenience. |
| nameopt | STRING | patch | β |
| depth_modelopt | COMBO | depth-anything/Depth-Anything-V2-Metric-Outdoor-Large-hf | 10 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_gridopt | INT | 9616β4096 | Patch relief-mesh density (long-edge grid columns). |
| priorityopt | FLOAT | 10β100 | Blend priority among patches (higher wins). The primary photo is always highest; patches only fill where it can't see. |
| plate_refopt | ATLAS_PLATE_REF | Optional registered final plate reference. Browser still uses image_b64 preview; exporters use this for EXR/float-safe handoff. | |
| deviceopt | COMBO | auto | 4 options: auto, cuda, mps, cpu |
| patch_view_overrideopt | STRING | Optional: 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_overrideopt | STRING | Optional: 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_onlyopt | BOOLEAN | true | Embed 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_pxopt | INT | 160β200 | Dilate the unseen matte so the patch slightly overlaps the primary's coverage edge (hides hairline seams at the boundary). |
| primary_depthopt | ATLAS_DEPTH_MAP | STRONGLY 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_maskopt | MASK | Segmentation 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_sourceopt | COMBO | reuse_scene | reuse_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_maskopt | MASK | Optional 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_sourceopt | COMBO | declared_orbit | declared_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_imageopt | IMAGE | The 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_inliersopt | INT | 406β5000 | Reject the measured camera below this many RANSAC inliers. |
| registration_max_residual_mopt | FLOAT | 0.350.01β50 | RANSAC inlier threshold AND accept ceiling on the 3D RMS residual, in metres of the primary's world. |
| registration_max_deviation_degopt | FLOAT | 250β180 | Reject 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_azimuthopt | BOOLEAN | true | register_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)
| Name | Type | Description |
|---|---|---|
| solve | ATLAS_SOLVE | β |
| report | STRING | β |