Gaussian Splatting Formats: PLY, SPZ, SPLAT, KSPLAT, SOG
A practical comparison of 3DGS file formats: per-splat size, compression ratios, design goals, viewer support, and when to use each one.

If you have worked with 3D Gaussian Splatting (3DGS) for more than a day, you have probably collected a small pile of file extensions: .ply, .splat,.spz, .ksplat, .sog, and the compressed PLY variant. They are all “a Gaussian Splatting model,” but they are not interchangeable. Each was designed for a different point in the pipeline — training output, web delivery, editor interchange — and choosing the wrong one will cost you either quality, load time, or compatibility.
This article is a practical reference: where each format comes from, how it stores a splat, how small it gets, and when you should actually use it. The numbers below are based on the same source model exported to each format, which you can reproduce yourself in the 3DGS Viewer by loading a model and using the Export menu.
The export menu, at a glance
The 3DGS Viewer Export dialog exposes six targets. They are not all distinct “formats” in the strict sense — .ply and compressed .ply share an extension but pack data very differently. The five you will meet in the wild are covered in detail below.

Why there is more than one format
A trained 3DGS scene is, at its core, a list of Gaussians. Each Gaussian needs a position, a size and rotation (its 3D covariance), a color, and an opacity. The original 3D Gaussian Splatting paper (Kerbl et al., 2023) stores each primitive with 48 floating-point values for directional color plus scale, rotation, and opacity. That is roughly 236 bytes per splat in the reference PLY output.
For a half-million-Gaussian scene — not unusual for an outdoor capture — that is around 118 MB. The same scene becomes 11–16 MB once it is converted for web delivery. The formats below exist because that 10× reduction is achieved in different ways, with different trade-offs.
The file sizes in the table are for a representative ~500K-Gaussian scene (a common benchmark used across the community). Your numbers will vary with splat count, spherical harmonics degree, and how aggressive the encoder is, but the ratios between formats are stable.
Format-by-format breakdown
PLY — the training output and interchange format
PLY (Polygon File Format) is the baseline. The original 3DGS training code writes its output as a PLY with full single-precision floats, 3rd-degree spherical harmonics (SH3), and explicit scale/quaternion fields. Every other format can be derived from a PLY.
- Per-splat size: ~236 bytes (with SH3)
- Compression: None (uncompressed floats)
- Editable: Yes — it is plain text or binary PLY, widely parsed
- Use it when: You are at the training/output stage, you need maximum fidelity, or you are feeding a tool that only reads PLY.
The downside is size. A PLY is the wrong choice for web embedding or sharing, but it is the right choice as your archival master. Keep your PLY even after you convert to a smaller delivery format.
Compressed PLY — smaller, still PLY
Compressed PLY keeps the PLY container but drops spherical harmonics down (or removes them) and packs the remaining fields more tightly. It is a middle ground: viewers that read PLY will usually read it, and it is meaningfully smaller than the full version.
- Per-splat size: varies, typically 80–140 bytes depending on SH retention
- Compression: lossy (via SH degree reduction and quantization)
- Use it when: You want a smaller file but must stay in the PLY ecosystem.
SPLAT — the web-native baseline
The .splat format, popularized by the early PlayCanvas web demos, strips each Gaussian down to the essentials: position, color (as a packed RGBA-ish block), and a simplified scale/rotation. Spherical harmonics are dropped or heavily reduced.
- Per-splat size: ~32 bytes
- Compression vs PLY: roughly 7–8× smaller
- Use it when: You need the simplest possible web delivery and can accept some view-dependent color loss.
SPZ — “JPG for Gaussian Splatting”
.spzis an open-source format explicitly designed as a compact delivery format. It applies structured quantization to position, scale, rotation, color, and opacity, and stores spherical harmonics at a selectable degree. The community shorthand — “JPG for 3DGS” — captures the intent: a strong default that most web viewers accept.
- Per-splat size: ~64 bytes (at default SH level)
- Compression vs PLY: up to ~10× smaller (around 90% reduction)
- Use it when: You want a strong general-purpose web/delivery format with good viewer support and a reasonable quality/size balance.
KSPLAT — the Luma / Kerras ecosystem
.ksplatis the native format for the Luma AI / Kerras viewer ecosystem. It is also compact (roughly 10× smaller than PLY) and is the right choice when you are publishing into a Luma-powered experience or sharing with someone using their tooling.
- Per-splat size: similar order to SPZ (~11 MB for a 500K scene)
- Compression vs PLY: ~10× smaller
- Use it when: Your target is a Luma/Kerras viewer, or a collaborator expects
.ksplat.
SOG — spatially ordered, GPU-streaming friendly
.sog (Spatially Ordered Gaussians) re-thinks the layout for GPU streaming. Rather than compressing each splat in isolation, it organizes Gaussians spatially so that the renderer can load only what the camera needs. The conversion in 3DGS Viewer can use WebGPU k-means acceleration when available, falling back to CPU otherwise. This makes SOG particularly well suited to larger scenes that need to start rendering before the whole file is downloaded.
- Per-splat size: varies; organized for streaming rather than pure minimum size
- Strength: fast first-frame render on large scenes via spatial ordering
- Use it when: You have a large scene and care about time-to-first-frame on the web, or your target runtime explicitly prefers SOG.
The comparison table
Putting it all together for a representative ~500K-Gaussian scene:
| Format | Per-splat | Typical size | vs PLY | Best for |
|---|---|---|---|---|
| PLY | ~236 B | ~118 MB | baseline | Training output, archival, max fidelity |
| Compressed PLY | ~80–140 B | ~40–70 MB | ~2–3× | Smaller PLY-compatible interchange |
| SPLAT | ~32 B | ~16 MB | ~7× | Simple web delivery, some color loss OK |
| SPZ | ~64 B | ~11–12 MB | ~10× | General-purpose web/delivery default |
| KSPLAT | similar | ~11 MB | ~10× | Luma / Kerras ecosystem |
| SOG | variable | varies | high | Large-scene streaming, fast first frame |
~236 BPLY / splat~32 BSPLAT / splat~10×SPZ vs PLY90%SPZ reduction
How to choose
In practice the decision collapses to a few questions:
- Are you still training or editing? Stay in PLY. Convert only when you are about to deliver.
- Is this for the web? Default to
SPZ. It is the best general-purpose choice and has the widest viewer support. - Is the scene very large and you care about fast first-frame load? Try
SOG; its spatial ordering helps the renderer start before the full download. - Is your target a specific platform? Match it —
KSPLATfor Luma,SPLATfor PlayCanvas-style demos, etc. - Always keep the PLY. Treat smaller formats as delivery outputs, not as replacements for your master.
Every format smaller than PLY is lossy in some way — usually via reduced spherical harmonics (which affects view-dependent color) and quantized scale/rotation (which affects edge sharpness). For most web viewing the loss is invisible. For close-up hero shots or archival, stay with PLY or compressed PLY. You can compare versions side by side with SSIM scoring before committing to a delivery format.
Converting between formats
Conversion between any two of these formats runs locally in your browser via WebAssembly in the 3DGS Viewer. Nothing is uploaded during conversion. The general flow:
- Open the 3DGS Viewer and drag in a model (or load an example).
- Click Export and pick a target format.
- The converted file downloads immediately. Test it in the viewer or your target runtime.
For converting in bulk or as part of a build pipeline, the same conversions are available via the open-source GaussForge toolchain that powers the viewer's WASM core.
Further reading
- The original 3D Gaussian Splatting paper, summarized— where the 236-byte-per-splat baseline comes from.
- LightGaussian— research on pruning and quantizing trained Gaussians.
- SPZ format guide— deeper detail on the SPZ encoding.
- Compressing Gaussian Splatting models without losing quality— reducing splat count before you even pick a delivery format.
Try it in your browser
3DGS Viewer runs entirely in your browser — no installation, no upload required for the tools covered in this article. Pick a tool and start in seconds.