Nodes/ComfyUI_HYWorld2/Load PLY File
ComfyUI Node

Load PLY File

Bring a saved .ply back into the graph with its cameras

By AHEKOT·Created 4 months ago·Updated about a month ago· 74
Load PLY File
    • ply_path
    • camera_poses
    • camera_intrinsics
    • info
    ply_path
    camera_json

    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 .ply file.
    • camera_json (optional) - path to a camera JSON. Leave empty to auto-find trainer_cameras.json next 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_poses comes 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 where SavePLY/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 info output - 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.

    CategoryVNCCS/3D

    Inputs (2)

    NameTypeDefaultDescription
    ply_pathSTRINGAbsolute path to a .ply file.
    camera_jsonoptSTRINGOptional camera JSON. If empty, tries trainer_cameras.json near the PLY.

    Outputs (4)

    NameTypeDescription
    ply_pathSTRING
    camera_posesTENSOR
    camera_intrinsicsTENSOR
    infoSTRING