WorldGen Build GS Data From WorldMirror
Assemble a native 3DGS training dataset from your reconstruction
- ply_data
- images
- camera_poses
- camera_intrinsics
- depth_maps
- normal_maps
- raw_splats
- gs_data_dir
- info
WorldMirror's splats are feed-forward - fast, but rough. The proper fix is to take your reconstruction's images and cameras and train a real Gaussian splatting scene, the way the 3DGS literature does it. VNCCS_WorldGenBuildGSDataFromWorldMirror is the bridge: it takes your ply_data, images, and cameras, and writes out a gs_data folder in the standard native-3DGS trainer format - images, aligned point cloud, camera poses and intrinsics - that the pack's trainer (and the vendored gsplat fork) can consume.
Required inputs: ply_data, images, camera_poses, camera_intrinsics - all straight off a reconstruction node. Optional: a workspace_dir from WorldGenExportBankFromPLY (omit it and a default workspace is created), plus depth_maps, normal_maps, and raw_splats if you have them.
The inputs that matter
out_name(defaultgs_data) - the subfolder inside the workspace where the trainer dataset lands. Connect this node'sgs_data_diroutput to whatever trainer node follows.camera_bundle- the honest knob. Default ismodel_predicted_when_input_zero: when your connected cameras have zero translation (e.g. you only fed the model a single view or rotation-only panoramas), it swaps in WorldMirror's predicted cameras/geometry instead. The tooltip says why in one line: "Native 3DGS needs camera baseline; rotation-only cameras collapse depth." If your source cameras genuinely have translation, set it toconnected_inputs.points_max(default 3M) - cap on the point cloud written for the trainer. Lower = smaller/faster, less detail.write_normals(default true) - writes normal data if available; some trainers use it.deep_logging- verbose diagnostics to the console.
Outputs: gs_data_dir (a string path - wire it onward) and info.
Where this fits
This is the "do it properly" path: WorldMirror gives you a rough splat, this node packages the raw material for a native 3DGS refinement that actually converges. The KB's lesson applies directly - a trained 3DGS scene is the right deliverable for an explorable scene, and forcing it to a mesh throws the quality away. Expect the training step itself to be slow and VRAM-hungry (it's a real optimization loop); that's the price of clean geometry, and the fork-only rasterization arguments (distloss, gauss_masks) are exactly why this pack insists its vendored gsplat be the only one installed.
Install
Pack standard - Manager → HY-World 2.0, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AHEKOT/ComfyUI_HYWorld2
cd ComfyUI_HYWorld2
pip install -r requirements.txt
python install.py
The install.py step (build the vendored gsplat_maskgaussian CUDA fork) is non-negotiable here - this node's whole downstream is gsplat.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_data | PLY_DATA | — | |
| images | IMAGE | — | |
| camera_poses | TENSOR | — | |
| camera_intrinsics | TENSOR | — | |
| workspace_diropt | STRING | Optional workspace_dir from WorldGen Export Generation Bank. If omitted, a default output workspace is created. | |
| depth_mapsopt | IMAGE | — | |
| normal_mapsopt | IMAGE | — | |
| raw_splatsopt | VNCCS_SPLAT | — | |
| out_nameopt | STRING | gs_data | Subfolder inside workspace_dir where the trainer dataset is written. |
| camera_bundleopt | COMBO | model_predicted_when_input_zero | Use WorldMirror predicted cameras/geometry when connected cameras have zero translation. Native 3DGS needs camera baseline; rotation-only cameras collapse depth. |
| points_maxopt | INT | 30000000–50000000 | — |
| write_normalsopt | BOOLEAN | true | — |
| deep_loggingopt | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| gs_data_dir | STRING | — |
| info | STRING | — |