π§© Splat Patch POC v2
π§© Splat Patch POC v2 β same job, revised knobs
- ply_data
- source_images
- source_camera_poses
- source_camera_intrinsics
- repair_images
- hole_masks
- repair_camera_poses
- repair_camera_intrinsics
- combined_images
- combined_camera_poses
- combined_camera_intrinsics
- hole_images
VNCCS_SplatPatchPOC_v2 is the revised edition of the splat-hole-finding node, and in the source it's literally a subclass of the original VNCCS_SplatPatchPOC - same inputs, same outputs, tweaked internals. If you're comparing them, think "v2 = the author's current attempt at the same problem," not "a different tool." The inputs and outputs are near-identical to the base version, so everything in the POC article applies.
The clue to what changed is in the optional list: source_pitch_filter and source_pitch_tolerance_deg are front and center. v2 filters which source cameras count based on their pitch (keeps only near-zero-pitch views by default), which matters for rooms where the original photos were shot at odd angles - a tilted source camera sees a wall at an angle and the hole detector gets confused about what's actually missing. v2 is the iteration that tries to stop that confusion at the source.
Inputs and outputs, briefly
Required: ply_data and source_images (the v1-only source_camera_poses/intrinsics are still optional). Everything else is the same parade of trajectory presets, mask modes, offset/pattern controls, and the mask_dilate/inpaint_mode pair. Outputs are the eight you'd expect: repair_images, hole_masks, repair cameras, combined_images + cameras, and hole_images.
When to reach for it
Same workflow as the base node - render new views, detect holes, get masks, send the repair images through an edit model, reassemble. The pitch filtering is the reason you'd prefer v2: if your source images come from a panorama-to-views extraction or a handheld shoot with tilted frames, the zero_pitch filter (default on, 5Β° tolerance) removes the worst offenders from the coverage math.
Fair warning applies identically: this is a POC, the mask modes are a tuning rabbit hole, and there's no magic - holes that no camera could see still need an edit model to invent content. Expect to iterate on trajectory_preset and mask_mode before the masks look right.
Install
Same pack, same ritual:
cd ComfyUI/custom_nodes
git clone https://github.com/AHEKOT/ComfyUI_HYWorld2
cd ComfyUI_HYWorld2
pip install -r requirements.txt
python install.py
Or ComfyUI Manager β HY-World 2.0. As with all the splat-patch nodes, use_gsplat defaults on and leans on the vendored gsplat_maskgaussian fork - keep upstream gsplat out of the environment.
Inputs (31)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_data | PLY_DATA | β | |
| source_images | IMAGE | β | |
| source_camera_posesopt | TENSOR | β | |
| source_camera_intrinsicsopt | TENSOR | β | |
| view_countopt | INT | 81β64 | β |
| widthopt | INT | 1022252β2048 | β |
| heightopt | INT | 1022252β2048 | β |
| fovopt | FLOAT | 9030β130 | β |
| trajectory_presetopt | COMBO | custom | 7 options: custom, orbit_sideways, orbit_center, room_corners_upper_lower, wall_midpoints, floor_ceiling_orbit, +1 |
| source_pitch_filteropt | COMBO | zero_pitch | 2 options: zero_pitch, all |
| source_pitch_tolerance_degopt | FLOAT | 5.00β45 | β |
| offset_modeopt | COMBO | scene_fraction | 2 options: scene_fraction, world_units |
| side_offsetopt | FLOAT | 0.12-2β2 | β |
| dual_side_offsetsopt | BOOLEAN | false | β |
| forward_offsetopt | FLOAT | 0.03-2β2 | β |
| patternopt | COMBO | left_right_forward | 2 options: alternate_left_right, left_right_forward |
| clamp_to_splat_boundsopt | BOOLEAN | true | β |
| bounds_margin_fractionopt | FLOAT | 0.080β0.45 | β |
| mask_modeopt | COMBO | alpha_pixels | 8 options: alpha_pixels, black_pixels, dark_regions, dark_regions_with_support_gate, source_support, alpha, +2 |
| coverage_thresholdopt | FLOAT | 0.080β1 | β |
| support_angle_degopt | FLOAT | 750β180 | β |
| min_hole_area_ratioopt | FLOAT | 0.0050β0.5 | β |
| dark_thresholdopt | FLOAT | 0.0450β0.5 | β |
| dark_max_alphaopt | FLOAT | 0.550β1 | β |
| dark_min_area_ratioopt | FLOAT | 0.00050β0.1 | β |
| dark_mask_dilateopt | INT | 30β51 | β |
| inpaint_modeopt | COMBO | telea | 4 options: telea, navier_stokes, median, none |
| mask_dilateopt | INT | 90β101 | β |
| combine_with_sourceopt | BOOLEAN | true | β |
| use_gsplatopt | BOOLEAN | true | β |
| max_render_pointsopt | INT | 12000000β20000000 | β |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| repair_images | IMAGE | β |
| hole_masks | MASK | β |
| repair_camera_poses | TENSOR | β |
| repair_camera_intrinsics | TENSOR | β |
| combined_images | IMAGE | β |
| combined_camera_poses | TENSOR | β |
| combined_camera_intrinsics | TENSOR | β |
| hole_images | IMAGE | β |