Plain statement of what this app does, what it does not do, and whose work it stands on.
A local viewer, annotator and share tool for Gaussian splat scans. It runs on this machine, on port 3860. Your scans are copied to this machine's disk and never leave it — there is no account, no cloud call, no analytics, and no third-party script on any page.
Scaniverse (Niantic) produces Gaussian splats on-device on its free tier, with
unlimited .PLY / .SPZ export and no LiDAR
requirement. That is the whole reconstruction problem solved for free, on hardware you already own.
Verified 2026-08-02. Polycam's free tier exports GLTF only — splat export is
paid — so this app does not send you down that path.
A proof of concept, not a match for Lane A's quality. COLMAP 4.1.1 (no-CUDA Windows build) runs structure-from-motion on the CPU and produces a sparse coloured point cloud; Splat Studio renders each point as one small Gaussian so it opens in the same viewer. It looks like a point cloud because it is one — the honest result of skipping the training step. Details and timings on the Convert page.
A phone splat carries no absolute scale unless the capture provided one. A room reconstructed from video could be a doll's house or a cathedral — the geometry is identical. So the measure tool reports relative scene units until you calibrate it against one length you actually know, and every measurement is then labelled with the calibration it derives from. An uncalibrated scene never prints a metre value. This is a deliberate refusal, not a missing feature.
| Component | Version | Licence | What it does here |
|---|---|---|---|
| @sparkjsdev/spark | 2.1.0 | MIT | Renders the splats. Plain WebGL, which is why it works on this machine's iGPU. |
| three.js | 0.185.1 | MIT | Scene graph, camera, orbit controls. |
| COLMAP | 4.1.1 no-CUDA | BSD | Lane B structure-from-motion, CPU only. |
| FFmpeg | system | LGPL/GPL | Lane B frame extraction and de-duplication. |
| Node.js node:http + node:sqlite | built-in | — | The server. No web framework, no build step, no runtime npm dependency. |
three.js and Spark are vendored into public/vendor/ so the app runs with the network unplugged.
Anything labelled public sample in the library came from the Spark project's own asset host (sparkjs.dev/assets/splats/) and is there so the viewer could be tested before you had captured anything. The penguin.ply was produced from penguin.spz by this project's own tools/spz-to-ply.mjs. The Lane B building reconstruction uses the South-Building dataset (Schönberger et al.), 128 photographs of a real building.
Every one of these is measured, not estimated. Where a number cannot be known, the app says so instead of showing a placeholder.