Splat Studio

Where everything here comes from

Plain statement of what this app does, what it does not do, and whose work it stands on.

What this app is

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.

What it does not do

The two ways to get a scan in

Lane A — your phone does the reconstruction (recommended)

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.

Lane B — this machine reconstructs from your video

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.

Scale and measurement

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.

Software this is built on

ComponentVersionLicenceWhat it does here
@sparkjsdev/spark2.1.0MIT Renders the splats. Plain WebGL, which is why it works on this machine's iGPU.
three.js0.185.1MIT Scene graph, camera, orbit controls.
COLMAP4.1.1 no-CUDABSD Lane B structure-from-motion, CPU only.
FFmpegsystemLGPL/GPL Lane B frame extraction and de-duplication.
Node.js node:http + node:sqlitebuilt-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.

Sample scans included

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.

Numbers shown in the app

Every one of these is measured, not estimated. Where a number cannot be known, the app says so instead of showing a placeholder.