ComfyUI Node

HYWorld2 Train 3DGS

The slow road to a beautiful splat — training 3D Gaussian Splatting

By AHEKOT·Created 6 months ago·Updated 3 months ago· 77
HYWorld2 Train 3DGS
  • gs_data
  • ply_path
  • camera_poses
  • camera_intrinsics
  • train_dir
  • info
◄train_sampling_presetstandard►
◄batch_size1►
◄patch_sizeFull►
◄max_steps8000►
◄save_steps8000►
◄eval_steps8000►
◄ply_steps8000►
◄downsample_pts_num1000000►
◄save_plytrue►
◄disable_videotrue►
◄disable_viewertrue►
◄depth_losstrue►
◄normal_losstrue►
◄sky_depth_from_pcdtrue►
◄use_scale_regularizationtrue►
◄use_mask_gaussiantrue►
◄mask_export_stochastictrue►
◄mask_export_anchor_protectionfalse►
◄use_anchor_protectiontrue►
◄do_prunefalse►
◄prune_opacity_threshold0.010►
◄antialiasedtrue►
◄normalize_world_spacetrue►
◄export_meshtrue►
◄strategy_refine_start_iter150►
◄strategy_refine_stop_iter750►
◄strategy_refine_every100►
◄strategy_refine_scale2d_stop_iter750►
◄strategy_reset_every99990►
◄strategy_grow_grad2d0.0001►
◄strategy_prune_scale3d0.10►
◄convert_ply_to_worldmirror_preview_basisfalse►

Everything before this node produced geometry fast. HYWorld2 Train 3DGS is where the pack switches from feed-forward reconstruction to actual optimization - training a proper 3D Gaussian Splat over thousands of steps until the scene looks good from every angle. It's the difference between a splat that's fine in a viewer and one you'd actually ship. It's also the node that will own your GPU for a while, because 3DGS training is exactly as expensive as it sounds.

It consumes the gs_data dataset from HYWorld2 GS Data and wraps the native HY-World world_gs_trainer.py. This is the payoff of the whole gaussian half of the pack - and per the KB's framing on 3D generation, gaussian splatting is the right output when your destination is a viewer or a rendered shot of a whole scene. Keep that in mind: a splat isn't mesh geometry, so don't force it into a game engine expecting to collide with things.

How it works

The node exposes the trainer's full control surface, grouped into things you'll touch and things you won't:

  • Scheduling: max_steps (default 8000), with comma-separated save_steps, eval_steps, ply_steps strings (default "8000").
  • Data: train_sampling_preset (standard / half-pano / random-pano variants), batch_size, patch_size (Full down to 256 - patch training fits smaller VRAM), downsample_pts_num (1M default).
  • Losses & quality: depth_loss, normal_loss, sky_depth_from_pcd, use_scale_regularization, use_mask_gaussian, mask_export_stochastic, use_anchor_protection, antialiased, normalize_world_space - all default on, and they're the fork-specific features the vendored gsplat exists for. do_prune (off by default) plus prune_opacity_threshold cleans floaters when you turn it on.
  • Refinement strategy: the strategy_refine_* / strategy_reset_every / strategy_grow_grad2d / strategy_prune_scale3d cluster are the density-control schedules. Leave them unless you're chasing specific artifacts.
  • Output: save_ply, disable_video, disable_viewer (both disable defaults - good, because the built-in viewer/nerfview stack is extra VRAM you don't need in a headless run), export_mesh (exports a mesh alongside the splat - on by default).

The inputs that matter

  • gs_data - required.
  • max_steps - the big dial. 8000 is a decent default; push toward 20k+ for quality, and watch save_steps to get intermediate PLYs.
  • patch_size and downsample_pts_num - the VRAM valves when you OOM.

Outputs

  • ply_path - the trained splat. This is your deliverable.
  • train_dir, info - where everything was written and status.
  • camera_poses, camera_intrinsics - exposed for feeding a preview node.

Install & troubleshooting

Shared install: ComfyUI Manager (search HY-World 2.0) or clone + pip install -r requirements.txt + python install.py. The gsplat_maskgaussian fork built by install.py is non-negotiable here - the trainer calls gsplat.rendering.rasterization with distloss=True and gauss_masks, which upstream gsplat doesn't support. If you see an argument error around distloss or gauss_masks, you've got the wrong gsplat installed.

Also note the trainer stack adds tyro, viser, nerfview, tensorboard, torchmetrics, and friends to your environment - a chunky install. VRAM is the practical limit: on 16 GB, use patch_size below Full and keep downsample_pts_num at 1M. And remember the author's honest framing: multi-camera scene assembly is where this pipeline is still rough, so a trained splat from a clean single-image or panorama input will look far better than one stitched from awkward multi-view captures.

CategoryVNCCS/HYWorld2

Inputs (33)

NameTypeDefaultDescription
gs_dataHYWORLD2_GS_DATA—
train_sampling_presetoptCOMBOstandard3 options: standard, half_pano_per_epoch, random_pano_50_per_epoch
batch_sizeoptINT11–16—
patch_sizeoptCOMBOFull4 options: Full, 712, 512, 256
max_stepsoptINT80001–100000—
save_stepsoptSTRING8000—
eval_stepsoptSTRING8000—
ply_stepsoptSTRING8000—
downsample_pts_numoptINT10000001–50000000—
save_plyoptBOOLEANtrue—
disable_videooptBOOLEANtrue—
disable_vieweroptBOOLEANtrue—
depth_lossoptBOOLEANtrue—
normal_lossoptBOOLEANtrue—
sky_depth_from_pcdoptBOOLEANtrue—
use_scale_regularizationoptBOOLEANtrue—
use_mask_gaussianoptBOOLEANtrue—
mask_export_stochasticoptBOOLEANtrue—
mask_export_anchor_protectionoptBOOLEANfalse—
use_anchor_protectionoptBOOLEANtrue—
do_pruneoptBOOLEANfalse—
prune_opacity_thresholdoptFLOAT0.0100–1—
antialiasedoptBOOLEANtrue—
normalize_world_spaceoptBOOLEANtrue—
export_meshoptBOOLEANtrue—
strategy_refine_start_iteroptINT1500–100000—
strategy_refine_stop_iteroptINT7500–100000—
strategy_refine_everyoptINT1001–100000—
strategy_refine_scale2d_stop_iteroptINT7500–100000—
strategy_reset_everyoptINT999901–1000000—
strategy_grow_grad2doptFLOAT0.00010–1—
strategy_prune_scale3doptFLOAT0.100–100—
convert_ply_to_worldmirror_preview_basisoptBOOLEANfalse—

Outputs (5)

NameTypeDescription
ply_pathSTRING—
camera_posesTENSOR—
camera_intrinsicsTENSOR—
train_dirSTRING—
infoSTRING—