Video to Gaussian Splats — Turn a Clip into a Walkable Scene
10:00 JSTFor a videographer or photographer, the most direct route from footage to an XR scene is Gaussian splatting. The photo-to-splat and phone-scan pipelines covered earlier start from stills or a dedicated scanner; this one starts from a video clip, which most creatives already shoot. A slow orbit around a subject is, frame for frame, the same multi-view input a photogrammetry rig produces — and modern tooling turns it into a splat that loads straight into the WebXR viewers the rest of the camp uses.
▸ Postshot · Nerfstudio + gsplat · Brush (cross-platform) · SuperSplat editor/viewer
Two regimes: static scene vs. moving subject
The fork that catches everyone: is the subject still, or moving?
- Static scene (3DGS) — the camera moves, the world holds still. A walk-around of a statue, a room, a product. This is the solved, weekend-friendly case: ordinary 3D Gaussian splatting, the same as a photo set.
- Moving subject (4DGS) — a person talking, water, anything that changes between frames. This needs 4D Gaussian splatting — splats with a time dimension — and it is still research-grade: 4DGaussians, Deformable-3DGS, and Luma-style volumetric capture. Heavier to train, fussier to view. Treat it as a stretch goal.
For a 2.5-day build, shoot for the static case: pick a subject that does not move and orbit it.
Capture for splatting
The training cares about parallax and coverage, not cinematography:
- Move, don’t zoom. Physically circle the subject; keep focal length fixed.
- Cover every angle, including a high and low pass. Gaps become holes in the splat.
- Even, diffuse light; avoid changing exposure mid-shot — bakes inconsistencies in.
- Slow and steady beats fast — motion blur is the enemy. 30–60 seconds at a walking pace is plenty.
Extract frames
Splat trainers take images. ffmpeg samples the clip — three to six frames per second is a good starting density:
ffmpeg -i orbit.mov -vf "fps=4,scale=1600:-1" frames/%04d.jpg
Too many near-identical frames slows training without adding detail; too few starves the structure-from-motion step. 150–300 sharp, well-spread frames is a healthy target.
Train the splat
Three accessible options, in rough order of least setup:
- Postshot (Windows, free) — drag in the video or the frame folder and it runs structure-from-motion plus 3DGS training end to end, exporting
.ply. The lowest-friction path. - Nerfstudio with the
gsplatbackend —ns-process-data video --data orbit.movruns COLMAP for camera poses, thenns-train splatfactotrains. Cross-platform, scriptable, CUDA-friendly. - Brush — a wgpu trainer that runs on macOS, Windows, Linux, and even in a browser; no CUDA required, which suits a mixed-laptop team.
All three export a standard Gaussian-splat .ply; convert to the compact .splat/.spz form with SuperSplat for faster loading.
View it in WebXR
This is where the splat meets a headset. The same single-file WebXR engines the camp already uses load splats directly:
- Babylon.js has first-party support —
await SceneLoader.ImportMeshAsync(null, "", "scene.splat", scene)drops the splat into the scene used by the Babylon WebXR starter. - Three.js loads them via
GaussianSplats3D(mkkellogg) in the three.js starter. - PlayCanvas / SuperSplat publish a viewer to a URL with no code at all — open it in the Quest, PICO, or Vision Pro browser.
A static splat is a fixed scene, not interactive geometry — but standing inside your own capture on a Quest 3 is a strong demo on its own, and pairs naturally with the in-headset art tools for annotation.
Caveats
- Static subjects only, unless you commit to the 4DGS rabbit hole — moving people ghost badly in plain 3DGS.
- VRAM is the limiter for training; a cloud GPU or Brush’s lighter footprint is the fallback on modest laptops.
- Splats are heavy on the wire — decimate in SuperSplat before shipping to a standalone headset; aim for well under a million splats for comfortable WebXR frame rates.
- Reflective and transparent surfaces fool the solver — glass, chrome, and water produce floaters.
Useful links
- Postshot (Jawset) · Nerfstudio docs · gsplat · Brush
- SuperSplat editor/viewer · GaussianSplats3D for three.js · Babylon Gaussian Splatting
- 4D / dynamic: 4DGaussians · Deformable-3DGS
- Related: Phone-captured splats (Scaniverse) · Photo to splat (SHARP) · 3DGS from a 360° camera · LichtFeld + MCP · Three.js WebXR starter
- Hackathon details — eligibility, team formation, AI policy
- Register on Luma
Questions? Reach the team via the Contact page.