Nodes/ComfyUI PlyPreview/Load Gaussian PLY Enhance
ComfyUI Node

Load Gaussian PLY Enhance

The unglamorous node that finally gets your splat into ComfyUI

By XuanYu-github·Created 9 months ago·Updated 9 months ago· 6
Load Gaussian PLY Enhance
    • ply_path
    • extrinsics
    • intrinsics
    ply_file
    fov_degrees50
    auto_resolutionenabled
    target_scale10
    image_width512
    image_height512
    enable_opacity_filterdisabled
    opacity_threshold0.10

    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 and target_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 when auto_resolution is 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/, or output/. Move it there. The pack also registers a /plypreview/files endpoint 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_resolution to disabled and set image_width/image_height explicitly.
    • Preview comes up blank - the viewer pulls files through ComfyUI's /view endpoint for the output folder, so a splat living in input/ can 404 in the iframe. Copy it to output/.
    • If the console warns about plyfile missing, pip install plyfile in 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.

    CategoryPlyPreview

    Inputs (8)

    NameTypeDefaultDescription
    ply_fileCOMBOSelect a .ply file from input or output folder, or upload one
    fov_degreesFLOAT5010–180Horizontal field of view in degrees (10-180°, supports wide-angle and fisheye)
    auto_resolutionCOMBOenabledAuto-calculate optimal resolution based on FOV and target scale
    target_scaleoptFLOAT101–50Target gaussian scale in viewer (used when auto_resolution enabled)
    image_widthoptINT51264–8192Image width for camera intrinsics (used when auto_resolution disabled)
    image_heightoptINT51264–8192Image height for camera intrinsics (used when auto_resolution disabled)
    enable_opacity_filteroptCOMBOdisabledFilter out low-opacity Gaussians to reduce background noise
    opacity_thresholdoptFLOAT0.100–1Minimum opacity (0-1). Gaussians below this will be removed (used when filter enabled)

    Outputs (3)

    NameTypeDescription
    ply_pathSTRING
    extrinsicsEXTRINSICS
    intrinsicsINTRINSICS