π§© Splat Patch POC
π§© Render a splat, find the holes, prep them for repair
- 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
Every feed-forward splat has holes - spots no source camera saw, so the reconstruction is empty there. VNCCS_SplatPatchPOC (proof of concept) is the pack's attempt to close the loop: render the splat from new angles, detect the missing regions, and hand you ready-to-repair images and masks. It's the "find the gaps and prep them" stage of the splat-repair pipeline.
The name says experimental, and it means it - this node has an enormous optional input list (roughly two dozen knobs) because it's a workbench for a problem that isn't solved. But the core flow is simple: give it your ply_data (from a reconstruction or LoadPLYFile) and source_images, it renders new views along a trajectory, compares them against what the source cameras saw, and outputs where the scene is missing.
What comes out
repair_images- new renders, ready to be passed through an edit/inpaint model to fill the holes.hole_masks- masks marking exactly the missing regions, for inpaint conditioning.repair_camera_poses/repair_camera_intrinsics- so whatever you generate can be projected back into 3D.combined_images+ combined cameras - repair and source views merged into one batch (controlled bycombine_with_source).hole_images- the holes alone, for quick inspection.
The knobs that matter (of the many)
trajectory_preset-custom,orbit_sideways,orbit_center,room_corners_upper_lower,wall_midpoints,floor_ceiling_orbit,diagonal_cross. This is where most of the quality lives: pick a camera path that actually looks at the missing parts.mask_mode- how "missing" is detected:alpha_pixels,black_pixels,dark_regions,source_support, and combinations. Defaultalpha_pixelsis a fine start;dark_regionscatches the shadowy voids that fool alpha checks.coverage_threshold,support_angle_deg,min_hole_area_ratio- the three dials for "how big does a gap have to be to matter." Start with defaults, tune downmin_hole_area_ratioif you want to patch small flecks.inpaint_mode+mask_dilate- the pack does a built-in OpenCV inpaint pass (telea,navier_stokes,median) on the holes; you can set it tononeand do the filling yourself in an edit model.mask_dilategrows the mask so seams blend.view_count,width,height,fov- render budget. Fewer views + lower res = fast iteration.use_gsplat/max_render_points- rendering performance and point budget.
Reality check
This is genuinely experimental - expect fiddly results and a learning curve on the mask modes. The practical approach: render a few views with trajectory_preset, inspect hole_images, tune the mask settings until the holes are right, then send repair_images + hole_masks through your image-edit model of choice. The SplatPatchAssemble node is the intended next step to stitch your repairs back in.
Install
Standard for this pack (Manager β HY-World 2.0, or the clone + pip install -r requirements.txt + python install.py ritual). The gsplat fork from install.py matters here - use_gsplat is on by default and it's the fast path.
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 | β |