ComfyUI Node

Save PLY

Save PLY — the node that actually writes your gaussians to disk

By yichengup·Created 9 months ago·Updated 9 months ago· 15
Save PLY
  • gaussians
  • extrinsics
  • intrinsics
  • ply_path
ply_path
output_prefixgaussians

The node that actually writes your gaussians to disk

The moment you start playing with 3D gaussian splatting in ComfyUI, you hit a wall: SHARP Predict hands you a GAUSSIANS_3D object that exists only in memory for the duration of the graph. Close the workflow and it's gone. Fine for previewing in-graph, useless if you want the actual .ply - to open in a real viewer, upload somewhere, or hand to another tool.

Save PLY is the "put it on disk" step. It's the quiet sibling in the ComfyUI-gaussian_preview pack (the same small set as Preview Gaussian), and it does one thing well: give you a real PLY file path.

Two modes, one output

The node takes whichever input you happen to have:

  • ply_path (STRING) - if you already have a PLY file, feed its path and the node returns it unchanged. This is a pass-through: handy when a workflow just needs a guaranteed valid path in the graph.
  • gaussians (GAUSSIANS_3D) - a live object from SHARP Predict. This is the mode you'll actually use. The node converts it to a PLY and writes it to ComfyUI's output directory as {output_prefix}_{timestamp}.ply (default prefix gaussians), then returns the new path.

The conversion borrows save_ply from ComfyUI-Sharp, which is why ComfyUI-Sharp needs to be installed for this mode to work. It also pulls focal length and image size out of the optional intrinsics matrix so the saved file carries proper camera metadata - helpful when you load the .ply somewhere that respects it. Feed it neither input and it returns an empty string; there's no error popup, just nothing, so check the console.

One honest caveat: this pack's Preview Gaussian node also converts gaussians→PLY internally and drops its file in the same output directory. So if all you want is for a file to exist, Save PLY is the explicit, predictable route - clear naming, timestamped, in your output folder. If you only care about looking at the result, you may not need this node at all.

The gotchas

  • ply_path is a connectable input, not a text box. Both ply_path and gaussians are forceInput-style wires - you can't click and type a path straight into the node. Wire it from a string node.
  • ComfyUI-Sharp must be installed for the gaussians conversion. Without it you get an import error and an empty string back, and the failure message is easy to miss if you're not watching the console.
  • Files land in the output directory with the prefix you set, so output_prefix: gaussians gives you gaussians_1700000000000.ply. Running several saves in one workflow? Give each a distinct prefix so you can tell them apart.
  • Feed it a ply_path that doesn't exist and it logs a warning, then silently falls back to gaussians conversion if one's connected.

Install

Same as the rest of the pack: ComfyUI Manager, search "ComfyUI-gaussian_preview", install, restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/yichengup/ComfyUI-gaussian_preview

Restart ComfyUI. No Python dependencies, no model files. The only extra is ComfyUI-Sharp when you want to save GAUSSIANS_3D objects - which, realistically, is the reason this node exists.

Categorygaussian_preview

Inputs (5)

NameTypeDefaultDescription
ply_pathoptSTRINGPath to existing PLY file (if provided, returns this path directly)
gaussiansoptGAUSSIANS_3DGaussians3D object to save (alternative to ply_path input)
extrinsicsoptEXTRINSICSCamera extrinsics (optional, used to extract metadata when saving from gaussians)
intrinsicsoptINTRINSICSCamera intrinsics (optional, used to extract focal length and image size when saving from gaussians)
output_prefixoptSTRINGgaussiansPrefix for output PLY filename (only used when saving from gaussians object)

Outputs (1)

NameTypeDescription
ply_pathSTRING