Load Gaussian PLY Enhance
The unglamorous node that finally gets your splat into ComfyUI
- ply_path
- extrinsics
- intrinsics
You've got a Gaussian Splat .ply - from SHARP, Trellis, a scan pipeline, whatever - and you want to actually look at it inside ComfyUI or wire it into a 3D workflow. This is the node you start with. Despite the "Enhance" in the name it enhances nothing: it's a plain file picker whose whole job is turning a .ply on disk into three clean outputs (a path plus two camera matrices) that the rest of the pack can chew on. Which is fine. That's what an input node is for.
Why the name lies to you. PlyPreview is a fork of the gaussian-splat GeometryPack, repackaged under PlyPreview* names so the two packs don't overwrite each other. The "Enhance" suffix is a collision-avoidance rename, not a feature bump. It's a useful lie - you can run this pack next to the original without the node registry fighting.
What it does
The ply_file dropdown is populated by scanning ComfyUI's input/, input/3d/, and output/ folders for .ply files. Drop a splat into input/3d/ and it appears in the list. See "No PLY files found" and that's just the dropdown telling you there's nothing in those folders yet.
Beyond picking the file, the node decides the camera that the preview will start from:
fov_degrees(10–180°, default 50) - horizontal field of view. Crank it wide for fisheye-style views; the tooltip genuinely supports up to 180°.auto_resolution(default enabled) - computes a square resolution from FOV andtarget_scale, rounds to 16-pixel alignment, applies a 0.8 calibration factor, and clamps to 256–8192. Leave it on unless you have a reason not to.image_width/image_height(default 512) - only used whenauto_resolutionis disabled, to build the intrinsics matrix by hand.
The camera itself is fake-but-consistent: extrinsics default to the identity matrix (camera at origin), and intrinsics are derived from FOV and resolution (fx = width / (2·tan(fov/2)), square pixels, centered principal point). This isn't photogrammetry-grade calibration - it's enough to make every preview start from the same sensible viewpoint.
There's also enable_opacity_filter + opacity_threshold (default 0.1): apply a sigmoid to the stored opacity and drop every Gaussian below the threshold, writing a new _opacity{threshold}.ply next to the source. Great for shaving background floaters off a noisy splat. It only runs if the file actually has an opacity field - otherwise it skips with a console warning, which is the kind of graceful failure more nodes should copy.
Outputs
All three outputs are strings/matrices you feed forward: ply_path (STRING) into Preview Gaussian Enhance, plus optional extrinsics (4×4) and intrinsics (3×3) as the initial view seed.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/XuanYu-github/comfyui-PlyPreview.git
Restart ComfyUI. Or search "comfyui-PlyPreview" in ComfyUI Manager. Dependencies are just numpy and plyfile - that's the entire story. No CUDA, no compiled C++ rasterizer. If you've been burned by 3DGS nodes that need nvcc and a matching CUDA toolkit, this pack is the relief: the rendering happens in your browser via the bundled gsplat.js, not in Python.
Common issues
- "No PLY files found" - the file isn't in
input/,input/3d/, oroutput/. Move it there. The pack also registers a/plypreview/filesendpoint so the dropdown can refresh without a ComfyUI restart. - Auto resolution silently overrides your width/height. If something downstream needs exact camera geometry, flip
auto_resolutionto disabled and setimage_width/image_heightexplicitly. - Preview comes up blank - the viewer pulls files through ComfyUI's
/viewendpoint for the output folder, so a splat living ininput/can 404 in the iframe. Copy it tooutput/. - If the console warns about
plyfilemissing,pip install plyfilein your ComfyUI environment.
None of this is glamorous. It's a loader. But it's the loader that stops the "how do I even open this file" part of a 3D workflow from being the hard part.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_file | COMBO | Select a .ply file from input or output folder, or upload one | |
| fov_degrees | FLOAT | 5010–180 | Horizontal field of view in degrees (10-180°, supports wide-angle and fisheye) |
| auto_resolution | COMBO | enabled | Auto-calculate optimal resolution based on FOV and target scale |
| target_scaleopt | FLOAT | 101–50 | Target gaussian scale in viewer (used when auto_resolution enabled) |
| image_widthopt | INT | 51264–8192 | Image width for camera intrinsics (used when auto_resolution disabled) |
| image_heightopt | INT | 51264–8192 | Image height for camera intrinsics (used when auto_resolution disabled) |
| enable_opacity_filteropt | COMBO | disabled | Filter out low-opacity Gaussians to reduce background noise |
| opacity_thresholdopt | FLOAT | 0.100–1 | Minimum opacity (0-1). Gaussians below this will be removed (used when filter enabled) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| ply_path | STRING | — |
| extrinsics | EXTRINSICS | — |
| intrinsics | INTRINSICS | — |