Splat Studio

Turning a video into something walkable

There are two routes. They are not equivalent, and the difference is worth two minutes of reading before you film anything.

Lane A — your phone recommended

Scaniverse reconstructs real Gaussian splats on the phone, free and unlimited. Photoreal result, minutes of work, nothing to install here.

Use this for anything you will show someone.

Capture guide

Lane B — this machine proof of concept

Plain .mp4 in, 3D out, reconstructed here with COLMAP on the CPU. Produces a sparse point cloud rendered as splats — recognisably the place, not photoreal.

Use it when you have footage and no phone app, or to see the geometry.

Lane B — the one command

Film a slow walk around or through the space, then run:

node tools/reconstruct.mjs --video "C:\path\to\walk.mp4" --name my-building

It extracts frames, runs structure-from-motion, converts the result to a splat .ply, and adds it to your library — one step, no decisions. When it finishes it prints the URL to open.

What it is doing

  1. Frames — FFmpeg pulls ~2 frames/second and drops near-duplicates and blurry ones (mpdecimate), capped at 150. Feeding every frame in is the classic way to make this take all night and produce nothing better.
  2. Structure-from-motion — COLMAP finds features, matches them between frames, and solves for where the camera was for each one, plus a 3D point for every matched feature. All on the CPU; this is the slow part.
  3. Splat conversion — each 3D point becomes one small isotropic Gaussian, so the cloud opens in the same viewer as a phone scan.

What it will and will not give you

Useful options

OptionDefaultWhen to change it
--fps2Raise to 3–4 if you walked quickly; lower for a slow pan.
--max-frames150Raise for a large building; each extra frame costs matching time.
--matchersequential for video
exhaustive for photos
Chosen for you by input type. Video frames are ordered, so sequential is correct and far cheaper — exhaustive compares every pair and was 65% of the reference run's time. Override to exhaustive if your walk doubled back a lot.
--min-track3Lower to 2 to keep more points if the result is sparse; raises the floater count.
--imagesUse a folder of photos instead of a video.

Filming for Lane B

Measured timings from the reference run on this machine are in LEARNINGS.md, and the full log of any run is written to data/laneb/<name>/reconstruct.log.