Merge Gaussians (PLY Files)
Combining multiple PLY files into one point cloud
- ply_paths
- merged_ply_path
- field_ply_path
- num_gaussians
This is the assembly step at the end of a multi-view SHARP pipeline. If you've generated separate .ply files - one per panorama face from SharpPredictGaussiansFromMetricDepth, or several iterative captures of a scene - this node reads all of them out of a folder, applies a couple of basic quality filters, and writes out one combined point cloud.
How it works
Point it at ply_folder and it loads every PLY inside, applies whatever depth/opacity thresholds you've set, concatenates what survives, and saves the result. Nothing fancier than that - no ICP registration, no blending across overlapping regions, no deduplication of Gaussians that landed in the same spot from two different faces. It trusts that your per-file Gaussians are already correctly placed (i.e. that the extrinsics/intrinsics feeding each source PLY were consistent), which is exactly what the rest of the panorama pipeline - AlignDepthMaps, ProjectDepthToPanorama, SharpRayToPlanarDepth - exists to guarantee before this node ever runs.
The inputs and outputs that matter
- ply_folder (required, STRING) - path to the folder of PLY files to merge.
- output_prefix (optional, default
merged). - max_depth (optional, default 0 = no filter) - drop Gaussians beyond this distance from camera. Useful for trimming stray or hallucinated far-field points that SHARP sometimes produces at silhouette edges.
- min_opacity (optional, default 0 = no filter) - drop near-invisible Gaussians. A cheap way to shrink the merged file without visibly changing the result.
Outputs: ply_paths (the individual files that went into the merge - a manifest, essentially), merged_ply_path (the combined result - this is what you open in a viewer), field_ply_path (a separate PLY export; the node doesn't spell out exactly how it differs from merged_ply_path beyond the name, so treat it as a bonus export worth inspecting rather than assume its exact contents), and num_gaussians (INT) - the final count in the merged result.
Installing it
Manager: search "Sharp," install highest (nightly if that build misbehaves). Or Manager → Git URL: https://github.com/PozzettiAndrea/ComfyUI-Sharp.git. Manual: clone, pip install -r requirements.txt --upgrade, python install.py, restart.
To actually view merged_ply_path, install ComfyUI-GeometryPack separately, or drop the file into superspl.at/editor - a free browser-based viewer that also handles the "can't screenshot" gap the built-in preview has.
Common issues
num_gaussians is your first diagnostic if a merge "looks empty" once you view it - if it's near zero, check that ply_folder actually points at the right directory and has files in it before you start tweaking max_depth/min_opacity, since an empty or wrong folder produces the same visual result as filters set too aggressively.
If the merged result has visible seams where per-face Gaussians should meet, that's not something this node can fix on its own - it's a symptom of the upstream depth-alignment steps, or of skipping edge_crop on SharpPredictGaussiansFromMetricDepth, which exists specifically to trim the low-quality edge Gaussians that cause seams like this.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_folder | STRING | Path to folder containing PLY files to merge | |
| output_prefixopt | STRING | merged | Prefix for output merged PLY file |
| max_depthopt | FLOAT | 0.00–1000 | Filter out Gaussians beyond this depth (0 = no filter) |
| min_opacityopt | FLOAT | 0.000–1 | Filter out Gaussians with opacity below this (0 = no filter) |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| ply_paths | STRING | — |
| merged_ply_path | STRING | — |
| field_ply_path | STRING | — |
| num_gaussians | INT | — |