Nodes/ComfyUI_HYWorld2/πŸ”₯ Splat Refiner (Backprop)
ComfyUI Node

πŸ”₯ Splat Refiner (Backprop)

πŸ”₯ The backprop pass that cleans up your raw splats

By AHEKOTΒ·Created 4 months agoΒ·Updated about a month agoΒ· 74
πŸ”₯ Splat Refiner (Backprop)
  • raw_splats
  • images
  • ply_data
  • camera_poses
β—„iterations100β–Ί
β—„lr0.0010β–Ί
β—„optimize_meanstrueβ–Ί
β—„optimize_scalestrueβ–Ί
β—„optimize_opacitiestrueβ–Ί
β—„optimize_colorstrueβ–Ί
β—„consensus_bonus1.0β–Ί
β—„optimize_cameratrueβ–Ί
β—„geometry_sourcegaussiansβ–Ί

WorldMirror output is rough. Gaussians float in the wrong place, edges bleed, ghosted objects double up. VNCCS_SplatRefiner is the node that fixes it the honest way: it re-renders your splat and runs gradient descent on the splat's own parameters - positions, scales, opacities, colors - until the renders match your source images. It's a mini 3DGS training loop wrapped in a single node, the same idea as the optimization step in a real Gaussian splatting pipeline, dropped in after inference.

It takes raw_splats (the VNCCS_SPLAT output straight from a reconstruction node), plus your images so it has something to compare renders against. Two required numbers: iterations (default 100, up to 10,000) and lr (default 0.001). That's it for the must-haves; everything else is a toggle on what gets optimized.

The knobs that matter

  • optimize_means / optimize_scales / optimize_opacities / optimize_colors - the four splat attributes, all on by default. Turn off a channel to freeze it. If colors are drifting weird, freeze optimize_colors; if the scene's exploding, check optimize_scales.
  • optimize_camera - allows minor camera pose adjustments to fix ghosting (doubled objects). This is the V2-era addition and it's genuinely useful, but "minor" is the operative word - big camera changes will not save a bad reconstruction.
  • consensus_bonus - experimental penalty for points that wander too far from their consensus neighbors. Tooltip suggests 1.0–5.0 for V2. This is the knob to reach for when refinement creates floaters rather than removing them.
  • geometry_source - gaussians (use the splat positions as-is) or direct_pts3d (RE-SYNC to the raw 3D head). The tooltip spells out the use case: if projection failed and you have broken or ghosted objects, direct_pts3d resyncs geometry from the model's pointmap. Cheaper to try than it sounds.

Outputs: ply_data (ready for SavePLY) and camera_poses.

Expectations

Refinement costs real time - this is a GPU training loop, not a filter. Start at 100 iterations to sanity-check, then push up if it's helping. It's best at cleaning up the fringes: alignment wobble, edge flecks, the general mess of feed-forward splats. It will not conjure geometry that isn't there - holes stay holes, and the consensus/ghosting fixes work best when your source images overlap the bad regions. For true hole-filling you want the splat patch nodes or a re-render from PLYSceneRenderer.

Install

Same pack install as the rest: Manager β†’ HY-World 2.0, or clone + pip install -r requirements.txt + python install.py - the step that builds the vendored gsplat_maskgaussian CUDA fork. This node leans on that fork hard, so if refinement errors immediately, that's the first thing to verify.

CategoryVNCCS/3D

Inputs (11)

NameTypeDefaultDescription
raw_splatsVNCCS_SPLATβ€”
iterationsINT1001–10000β€”
lrFLOAT0.00100.0001–0.1β€”
imagesoptIMAGEβ€”
optimize_meansoptBOOLEANtrueβ€”
optimize_scalesoptBOOLEANtrueβ€”
optimize_opacitiesoptBOOLEANtrueβ€”
optimize_colorsoptBOOLEANtrueβ€”
consensus_bonusoptFLOAT1.00–10Experimental: Penalize points that move too far from their consensus neighbors. Range 1.0-5.0 recommended for V2.
optimize_cameraoptBOOLEANtrueV2+: Allow minor camera pose adjustments to fix ghosting (doubled objects).
geometry_sourceoptCOMBOgaussiansgaussians: use positions from input splats. direct_pts3d: RE-SYNC to raw 3D head (fixes broken/ghosted objects if projection failed).

Outputs (2)

NameTypeDescription
ply_dataPLY_DATAβ€”
camera_posesTENSORβ€”