SplatBench
Public Gaussian-Splat encoder leaderboard. 28 scenes — 14 real (Mip-NeRF 360) and 14 deterministic synthetic probes for the failure modes that matter (texture, transparency, motion, depth, banding, foliage, specular, lowlight, portrait).
Every result is reproducible from the published corpus IDs. BLAKE3 hashes are part of the scene record. Fidelity is mean CIE ΔE94 + ML-Score over 8 deterministic orbit frames rendered through @splatforge/viewer.
SplatBench · Leaderboard
28 scenes — 14 real
(Mip-NeRF 360 + Dany Bittel cluster_fly LOD ladder, all CC-BY-4.0,
measured via the v2 ingest harness in apps/bench-ingest) and
14 deterministic synthetic probes for
per-class failure modes (texture, transparency, motion, depth, banding, foliage,
specular, lowlight, portrait, …) — run through the
full analyze → optimize → pack pipeline at each preset. Compression is
measured against the raw .ply; fidelity is mean CIE ΔE94 over 8
deterministic orbit frames rendered through @splatforge/viewer, scaled
0–1 against the published 3% perceptibility threshold. Every scene
is identified by a BLAKE3 hash of its canonical IR so runs reproduce byte-for-byte.
QAT-PLY (Scaffold-GS lossless): 37.3% aggregate PLY compression with PSNR gain on every scene tested (6/6). Per-scene save range 33.8–40.5%, ΔPSNR range +0.032 dB to +0.581 dB (mean +0.172 dB). All six scenes strictly improve on PSNR, SSIM, and LPIPS — see the new column below.
pro — splat-aware perceptual score
(catches floater + edge-loss artifacts ΔE94 misses).
premium — differentiable repack
PSNR delta vs naive opacity-prune at the same byte budget.
Negative cells (translucent volumes) are a known failure mode
where opacity-prune is structurally near-optimal; we publish them
honestly rather than tune them away.
Values are published; both columns require splatforge-pro to
reproduce.
| Scene | Class | Source | Splats | Input | SPZ out | Ratio | splat-transform vs | QAT-PLY scaffold-gs | Fidelity (ΔE94) | ML Score pro | Repack ΔPSNR premium | analyze |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cluster_fly_xxl | indoor-close-up | REAL | 3,506,799 | 789.3 MB | 25.3 MB | 31.21× | 15.79× +98% | — | pending | — | — | 0 ms |
| splatbench_banding_proxy | smooth-color-gradient | synth | 10,000 | 2.4 MB | 91.1 KB | 26.60× | 5.23× +409% | — | 0.03% | 95.17% | +12.62 dB | 29 ms |
| cluster_fly_xl | indoor-close-up | REAL | 624,180 | 140.5 MB | 5.4 MB | 25.85× | 12.77× +102% | — | pending | — | — | 0 ms |
| splatbench_floater_proxy | noisy-capture | synth | 250,000 | 59.1 MB | 2.3 MB | 25.84× | 10.69× +142% | — | 0.07% | 92.66% | -2.23 dB | 248 ms |
| splatbench_texture_proxy | high-frequency-texture | synth | 15,000 | 3.5 MB | 142.6 KB | 25.48× | 6.47× +294% | — | 0.09% | 94.26% | +8.27 dB | 32 ms |
| bicycle_mipnerf360_iter7k | outdoor-scene | REAL | 3,616,103 | 855.3 MB | 33.6 MB | 25.46× | — | — | 2.86% | 0.00% | +5.80 dB | 4.46 s |
| cluster_fly_l | indoor-close-up | REAL | 301,958 | 68.0 MB | 2.7 MB | 24.87× | 10.37× +140% | — | pending | — | — | 0 ms |
| splatbench_depth_proxy | depth-bimodal | synth | 15,000 | 3.5 MB | 149.6 KB | 24.30× | 6.88× +253% | — | 0.02% | 95.34% | +21.91 dB | 33 ms |
| cluster_fly_m | indoor-close-up | REAL | 145,617 | 32.8 MB | 1.4 MB | 23.93× | 7.49× +219% | — | pending | — | — | 0 ms |
| stump_mipnerf360_iter7k | outdoor-scene | REAL | 3,807,536 | 900.5 MB | 39.2 MB | 22.97× | 18.40× +25% | — | pending | — | — | 3.93 s |
| bonsai_mipnerf360_iter7k | indoor-real-estate | REAL | 1,157,141 | 273.7 MB | 12.0 MB | 22.81× | 16.53× +38% | — | 0.60% | 46.51% | +7.43 dB | 1.24 s |
| splatbench_portrait_proxy | salient-region-portrait | synth | 12,000 | 2.8 MB | 129.0 KB | 22.55× | 5.77× +291% | — | 0.04% | 95.12% | +24.04 dB | 15 ms |
| splatbench_specular_proxy | specular-highlights | synth | 12,000 | 2.8 MB | 132.3 KB | 21.97× | 5.82× +277% | — | 0.04% | 95.14% | +15.41 dB | 16 ms |
| splatbench_motion_proxy | anisotropic-streak | synth | 12,000 | 2.8 MB | 133.5 KB | 21.79× | 5.71× +282% | — | 0.15% | 91.49% | +10.51 dB | 30 ms |
| splatbench_dense_proxy | dense-large-scene | synth | 2,000,000 | 473.0 MB | 21.7 MB | 21.75× | — | — | 0.00% | 95.54% | +6.99 dB | 2.18 s |
| cluster_fly_s | indoor-close-up | REAL | 25,627 | 5.8 MB | 277.0 KB | 21.33× | 6.06× +252% | — | pending | — | — | 0 ms |
| splatbench_indoor_proxy | indoor-real-estate | synth | 100,000 | 23.7 MB | 1.1 MB | 20.58× | 5.91× +248% | — | 0.03% | 95.12% | +6.58 dB | 105 ms |
| splatbench_product_proxy | product-scan | synth | 10,000 | 2.4 MB | 118.2 KB | 20.50× | 4.96× +313% | — | 0.02% | 95.28% | +14.69 dB | 11 ms |
| splatbench_lowlight_proxy | low-light-dynamic-range | synth | 8,000 | 1.9 MB | 96.5 KB | 20.10× | 6.56× +206% | — | 0.03% | 95.27% | +13.97 dB | 11 ms |
| splatbench_outdoor_proxy | outdoor-scene | synth | 500,000 | 118.3 MB | 6.0 MB | 19.67× | 13.88× +42% | — | 0.02% | 95.16% | +5.60 dB | 483 ms |
| splatbench_transparency_proxy | volumetric-translucency | synth | 25,000 | 5.9 MB | 337.2 KB | 17.96× | 5.39× +233% | — | 0.07% | 94.69% | -8.30 dB | 51 ms |
| splatbench_foliage_proxy | dense-translucency | synth | 30,000 | 7.1 MB | 412.3 KB | 17.63× | 6.04× +192% | — | 0.09% | 93.96% | +10.35 dB | 34 ms |
| bonsai_scaffold_gs | indoor-real-estate | REAL | 411,066 | 123.9 MB | — | — | — | 59.5% +0.581 dB | — | — | — | 0 ms |
| bicycle_scaffold_gs | outdoor-scene | REAL | 912,445 | 275.0 MB | — | — | — | 59.5% +0.087 dB | — | — | — | 0 ms |
| garden_scaffold_gs | outdoor-scene | REAL | 745,121 | 224.6 MB | — | — | — | 59.5% +0.198 dB | — | — | — | 0 ms |
| stump_scaffold_gs | outdoor-scene | REAL | 746,258 | 202.1 MB | — | — | — | 66.2% +0.076 dB | — | — | — | 0 ms |
| treehill_scaffold_gs | outdoor-scene | REAL | 720,712 | 195.2 MB | — | — | — | 66.2% +0.056 dB | — | — | — | 0 ms |
| flowers_scaffold_gs | outdoor-scene | REAL | 705,051 | 191.0 MB | — | — | — | 66.2% +0.032 dB | — | — | — | 0 ms |
Comparison columns (in progress)
We are running competing encoders against the same SplatBench corpus and will publish per-scene compression × fidelity numbers for each. Nothing is excluded from the table — losses are reported in the same place as wins. If you maintain an encoder and want a column, send a PR or open an issue with reproduction instructions.
| Encoder | Maintainer | License | Status | Notes |
|---|---|---|---|---|
| qat-scaffold-gs | SplatForge | Apache-2.0 | shipped | Scaffold-GS-PLY QAT codec. 37.3% aggregate PLY save with PSNR gain on every scene tested (6/6); ΔPSNR range +0.032 dB to +0.581 dB. |
| qat-3dgs | SplatForge | Apache-2.0 | shipped | Vanilla Inria 3DGS single-PLY codec. 4.84% lossless save on bonsai mipnerf360 iter-7k (287 MB -> 273 MB); bit-exact round-trip; 0 dB delta by construction. Strips nx/ny/nz (always zero in Inria PLYs) from the body. Full int8-SH retrain tier ships as qat-3dgs-bundle below. |
| qat-3dgs-bundle | SplatForge | Apache-2.0 | shipped | Vanilla Inria 3DGS premium tier. int8 SH (f_rest_*) quant-aware retrain on A100 (5000 iters, per-channel scales, STE). Bonsai N=1 smoke: 59.27% PLY save / +0.81 dB PSNR / 0.933 SSIM / 7 min A100. Multi-scene generalization in follow-up. |
| splat-transform | PlayCanvas / Snap | MIT | shipped | v2.1.1 median 6.56× across 21 synthetic scenes (SplatForge web-mobile median: 22.68×). |
| SOG | PlayCanvas | MIT | pending | Self-Organizing Gaussians (20× compression claim). We will reproduce on bonsai + bicycle. |
| SOGS | Morgenstern et al. | research | pending | 2D grid + image-codec spatial reorder. Reference impl is Python; we will benchmark via Docker. |
| CodecGS-Lite | research | research | pending | PLAS-sort + AV1/HEVC parameter texture. 146× headline on bicycle in the paper; reproduction in progress. |
Submit your encoder
We want SplatBench to be the canonical reference. If you ship a Gaussian-Splat encoder, get on the table. There are three ways to submit:
- PR a runner. Open a PR against
benches/encoders/ with a shell
script that takes
input.plyand outputsoutput.{spz,glb,custom}. Our harness handles the rest (decode, render, score). - Send raw numbers. Email bench@splatforge.dev with per-scene compression + fidelity numbers and we'll add a footnote-cited column while we work on first-class reproduction.
- Use the API. The SplatForge Cloud API exposes the same pipeline. Free-tier API keys for benchmark runs are available on request.
Submission rules:
- Encoder must be reproducible from a committed scripted run (no hand-tuning per scene).
- Output must be loadable by at least one publicly-shippable viewer for fidelity scoring.
- We do not exclude lossy or training-time approaches — but they must be labeled and the loss must show in the fidelity column.
- Numbers are versioned: a re-submission against a newer SplatBench rev gets a new column, not a silent overwrite.