Nodes/ComfyUI_HYWorld2/🧩 Splat Patch POC 2
ComfyUI Node

🧩 Splat Patch POC 2

🧩 Splat Patch POC 2 β€” the triage node that scans the whole scene

By AHEKOTΒ·Created 4 months agoΒ·Updated about a month agoΒ· 74
🧩 Splat Patch POC 2
  • ply_data
  • source_camera_poses
  • triage_images
  • triage_masks
  • triage_camera_poses
  • triage_camera_intrinsics
  • triage_raw_images
β—„view_count8β–Ί
β—„width1022β–Ί
β—„height1022β–Ί
β—„fov90β–Ί
β—„scan_yaw_count24β–Ί
β—„scan_pitch_deg8β–Ί
β—„scan_size384β–Ί
β—„camera_radius_fraction0.08β–Ί
β—„central_weight_fraction0.82β–Ί
β—„coverage_threshold0.08β–Ί
β—„speckle_kernel9β–Ί
β—„min_bad_ratio0.03β–Ί
β—„max_missing_ratio0.65β–Ί
β—„min_yaw_separation_deg18β–Ί
β—„clamp_to_splat_boundstrueβ–Ί
β—„bounds_margin_fraction0.08β–Ί
β—„use_gsplattrueβ–Ί
β—„max_render_points1200000β–Ί

Different shape of the same problem. Where SplatPatchPOC picks a trajectory and renders targeted views, VNCCS_SplatPatchPOC2 does a systematic scan: it sweeps the splat from a grid of viewpoints (default 24 yaw positions at a low pitch), renders small 384px tiles, and triages every region as "has content," "missing," or "bad." The output is a map of the scene's health, not a single repair job.

That's why its required input is just ply_data - no source images needed. It doesn't know or care what your original photos were; it just scans the reconstruction itself and reports where the splat is thin or broken. The outputs tell the story: triage_images, triage_masks, triage_raw_images, plus triage_camera_poses/intrinsics for every scanned view.

The scan dials

  • scan_yaw_count (default 24, up to 96) - how many positions around the compass. More = finer coverage, slower.
  • scan_pitch_deg (default 8) - how far off horizontal the scan tilts. Rooms need a bit of up/down to see the floor and ceiling.
  • scan_size (default 384, 128–768) - per-view render size. Small and fast is the point; this is triage, not final renders.
  • camera_radius_fraction (default 0.08) - how far out the sweep sits from the scene center, as a fraction of scene size.
  • coverage_threshold, speckle_kernel, min_bad_ratio, max_missing_ratio - the classification rules. speckle_kernel (default 9) is the noise filter that decides what counts as "a bit of missing" vs "genuinely empty"; min_bad_ratio (0.03) and max_missing_ratio (0.65) set how much badness makes a view worth flagging.
  • min_yaw_separation_deg - dedupes near-duplicate scan angles so you don't triage the same wall 3 times.
  • use_gsplat / max_render_points - render backend and point budget.

What you do with a triage

The workflow intent: scan first, look at the triage_masks to find where the scene falls apart, then aim the targeted SplatPatchPOC / SplatPatchPOC_v2 at exactly those regions. Triage tells you what to fix; the POC nodes fix a specific view. Used together they stop you from rendering a 20-view repair pass over a scene that's fine except for one wall.

As ever with this experimental family: expect tuning. The threshold semantics (min_bad_ratio, max_missing_ratio) are the fiddliest part and worth two minutes of experimentation before you trust a triage map.

Install

The pack standard:

cd ComfyUI/custom_nodes
git clone https://github.com/AHEKOT/ComfyUI_HYWorld2
cd ComfyUI_HYWorld2
pip install -r requirements.txt
python install.py

Or Manager β†’ HY-World 2.0. use_gsplat on by default means the vendored fork matters here too.

CategoryVNCCS/3D/Experimental

Inputs (20)

NameTypeDefaultDescription
ply_dataPLY_DATAβ€”
source_camera_posesoptTENSORβ€”
view_countoptINT81–64β€”
widthoptINT1022252–2048β€”
heightoptINT1022252–2048β€”
fovoptFLOAT9045–130β€”
scan_yaw_countoptINT244–96β€”
scan_pitch_degoptFLOAT80–30β€”
scan_sizeoptINT384128–768β€”
camera_radius_fractionoptFLOAT0.080–0.35β€”
central_weight_fractionoptFLOAT0.820.25–1.25β€”
coverage_thresholdoptFLOAT0.080–1β€”
speckle_kerneloptINT91–41β€”
min_bad_ratiooptFLOAT0.030–0.95β€”
max_missing_ratiooptFLOAT0.650.05–1β€”
min_yaw_separation_degoptFLOAT180–90β€”
clamp_to_splat_boundsoptBOOLEANtrueβ€”
bounds_margin_fractionoptFLOAT0.080–0.45β€”
use_gsplatoptBOOLEANtrueβ€”
max_render_pointsoptINT12000000–20000000β€”

Outputs (5)

NameTypeDescription
triage_imagesIMAGEβ€”
triage_masksMASKβ€”
triage_camera_posesTENSORβ€”
triage_camera_intrinsicsTENSORβ€”
triage_raw_imagesIMAGEβ€”