ComfyUI Node

Gaussian Export

Shrink a 225 MB splat to 25 MB without re-training

By PozzettiAndrea·Created 4 months ago·Updated 8 days ago· 6
Gaussian Export
    • out_path
    ply_path
    formatply_no_sh
    output_filenameexported

    A trained 3D Gaussian Splatting scene is a huge, weird file. A 1M-splat scene with full SH3 coefficients lands around 225 MB as a lossless PLY - great for fidelity, miserable for previewing over a web UI, uploading, or archiving. GaussianExport is the node that turns that raw trainer output into something reasonable, without touching the scene itself. No re-training, no re-optimization, just a smarter container.

    It's one of the quieter nodes in the GaussianPack family (the repo goes by ComfyUI-TurntableGSViewer on GitHub but self-identifies as "GaussianPack" everywhere else, more on that below), and it slots in anywhere you already have a PLY path lying around.

    The three formats

    The format dropdown gives you three targets, and they're worth understanding because the trade-off is real:

    • ply - a passthrough copy under your chosen filename. Zero loss, zero cleverness. Useful mostly as a rename/organize tool.
    • ply_no_sh (default) - strips the view-dependent spherical-harmonic coefficients (f_rest_*) and keeps the base color (f_dc_*), plus position, scale, rotation, opacity. Result is a valid SH0 PLY about 3–5x smaller. The catch: specular highlights go away, because highlights are exactly what SH1–3 encode. Great for diffuse scenes, wrong for shiny ones.
    • spz - converts to SPZ v2, the gzipped format the PlayCanvas/Three.js splat viewers read natively. Roughly 9x smaller, with SH quantized to 4 bits per coefficient. That's the "25 MB instead of 225 MB" option.

    The implementation is honest about its limits: ply_no_sh is pure Python via plyfile (no GPU needed), while spz shells out to the vendored ply_to_spz.mjs script and requires Node.js on your PATH. If Node isn't installed you get a clear error, not a silent failure - install Node and retry.

    Inputs and output

    • ply_path - path to a Gaussian Splatting PLY. Wire it straight from a load, merge, or transform node.
    • format - ply / ply_no_sh / spz.
    • output_filename - basename for the output (no extension). The .ply or .spz extension is added for you.

    The single output, out_path, is the absolute path to the produced file - the sort of thing you'd feed back into a preview node or save to disk for upload.

    Installing it

    Standard for this pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/PozzettiAndrea/ComfyUI-TurntableGSViewer.git
    cd ComfyUI-TurntableGSViewer
    pip install -r requirements.txt --upgrade
    python install.py
    

    Restart ComfyUI after. ComfyUI Manager users: search "GaussianPack". Watch out for the experimental comfy-env dependency - first install pulls the pixi package manager, which is surprising if you weren't warned. No model weights involved.

    When to reach for it

    If you're shipping splats to a viewer over a slow connection, spz is the one. If you're prepping a diffuse scene for a download pack and SH fidelity doesn't matter, ply_no_sh gets you most of the win with no Node requirement. If the scene is a showcase with glass and reflections you care about, keep the full PLY - this node is exactly the tool for being deliberate about that choice.

    Categoryviewer

    Inputs (3)

    NameTypeDefaultDescription
    ply_pathSTRINGPath to a Gaussian Splatting PLY to re-export
    formatCOMBOply_no_shply - passthrough copy. ply_no_sh - drop view-dependent SH (f_rest_*); keep base color (f_dc_*). ~3-5x smaller but loses specular highlights. spz - SPZ v2 (gzipped). ~9x smaller; SH coefficients quantize to 4 bits each. Requires Node.js on PATH.
    output_filenameSTRINGexportedBasename for the output file (no extension).

    Outputs (1)

    NameTypeDescription
    out_pathSTRING