π¦ Decompose PLY Data
Pulling the cameras and point cloud out of a PLY_DATA bundle
- ply_data
- camera_pose
- camera_intrinsics
- pts3d
- pts3d_conf
The WorldMirror nodes hand you a PLY_DATA socket that bundles a surprising amount of stuff: camera poses, intrinsics, point clouds, confidence maps, splat parameters. That's convenient when you just want to preview, but a wall when you want to poke at the internals. VNCCS_DecomposePLYData is the pry-bar - it cracks that bundle open and hands you the individual tensors so you can inspect, rewire, or feed them into something else.
It's a utility node in the truest sense: nothing generative, nothing trained, just extraction. But it's genuinely useful, because the camera tensors are what you need when you want to drive a viewer, build a trajectory, or understand why a reconstruction looks the way it does.
How it works
Give it a ply_data (from any WorldMirror/WorldMirrorV2 reconstruction node or a saved PLY). It pulls out four pieces:
camera_pose- the camera-to-world pose for one view, shaped[4, 4].camera_intrinsics- the focal/projection matrix for that view.pts3d- the 3D point positions from the reconstruction.pts3d_conf- the per-point confidence values, which tell you which reconstructed points the model actually trusted.
The view_index input (default 0) selects which camera view's pose/intrinsics you extract - the pose tensor is stored as [B, S, 4, 4] (batch Γ views), and the node clamps your index into range. So it's the natural way to reach in and grab, say, camera 3's pose for a targeted render.
Inputs and outputs
One required input (ply_data), one optional (view_index). Four outputs: camera_pose, camera_intrinsics, pts3d, pts3d_conf - all TENSOR. Wire the camera tensors into preview nodes (VNCCS_BackgroundPreview takes optional camera poses/intrinsics to frame the viewer), or just read the point counts to sanity-check a reconstruction.
Install & troubleshooting
Same pack install as the rest: ComfyUI Manager (search HY-World 2.0) or clone + pip install -r requirements.txt + python install.py. No models, no downloads, no VRAM - extraction only, so it's instant.
The main gotcha is expectations about view_index: the default 0 gives you the first camera, not "the best" one. If a pose looks odd, it's probably just not the view you wanted - step through with view_index before suspecting the reconstruction. Also note the node reads whatever the reconstruction stuffed into the bundle; if you see zeros or missing tensors, the source node didn't populate that field (some reconstruction paths skip confidence maps), which is a source-node quirk, not this node's bug.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_data | PLY_DATA | β | |
| view_indexopt | INT | 00β100 | β |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| camera_pose | TENSOR | β |
| camera_intrinsics | TENSOR | β |
| pts3d | TENSOR | β |
| pts3d_conf | TENSOR | β |