Load PLY File
Bring a saved .ply back into the graph with its cameras
- ply_path
- camera_poses
- camera_intrinsics
- info
The mirror image of SavePLY. VNCCS_LoadPLYFile reads a Gaussian splat .ply off disk and hands it back to the graph - but with a twist that makes it genuinely useful: it also tries to restore the camera poses and intrinsics that went with that scene.
That camera restoration is the whole point. A splat file alone is just a blob of points; it renders, but you can't re-project views or do camera-aware repair without knowing where the cameras were. This node looks for a trainer_cameras.json beside your PLY, or accepts one explicitly via the camera_json input. If it finds one, you get tensors you can plug straight into VNCCS_PLYSceneRenderer, VNCCS_SplatRefiner, or the WorldGen nodes.
Inputs and outputs
ply_path(required) - absolute path to a.plyfile.camera_json(optional) - path to a camera JSON. Leave empty to auto-findtrainer_cameras.jsonnext to the PLY. This is the field that matters; it's how you rescue camera data you thought was lost.
Outputs: ply_path (echoed), camera_poses and camera_intrinsics (TENSORs - may be empty if no camera file was found, so don't assume), and info (a string with diagnostics about what loaded).
Where this shines
The realistic workflow: you reconstructed a room, saved it with SavePLY, closed ComfyUI, came back days later wanting to refine or re-render it. Reload the PLY + cameras with this node and the whole post-processing stack (SplatRefiner, PLYSceneRenderer, the splat patch nodes) works as if you'd just generated it. It's also how you point the pack at someone else's .ply - the splat-patching experimental nodes eat this node's output all day.
Gotchas
- If
camera_posescomes out empty, the node didn't find a camera file. Either the JSON isn't next to the PLY, or the pack didn't write one - double-check whereSavePLY/the reconstruction put it. - The node expects the pack's PLY/Gaussian format. Loading an arbitrary photogrammetry PLY usually works for the point data but won't have matching cameras, and the gsplat render path expects the Gaussian attributes the pack writes.
- Watch the
infooutput - it tells you what it actually found, and it's the fastest way to diagnose a "cameras disappeared" mystery.
Install
Same pack, same ritual:
cd ComfyUI/custom_nodes
git clone https://github.com/AHEKOT/ComfyUI_HYWorld2
cd ComfyUI_HYWorld2
pip install -r requirements.txt
python install.py
Or search HY-World 2.0 in ComfyUI Manager. install.py compiles the vendored gsplat_maskgaussian CUDA fork under the gsplat name - keep upstream gsplat out of the environment or the render path breaks.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_path | STRING | Absolute path to a .ply file. | |
| camera_jsonopt | STRING | Optional camera JSON. If empty, tries trainer_cameras.json near the PLY. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| ply_path | STRING | — |
| camera_poses | TENSOR | — |
| camera_intrinsics | TENSOR | — |
| info | STRING | — |