How the Splat3D pipeline works
When you upload a video or photo set, Splat3D runs it through a sequence of stages that turn pixels into a 3D scene you can fly through. This guide gives you enough context to predict runtimes and pick the right quality tier for your workload.At a glance
Stage 1 — Frame extraction
For video, frames are sampled at roughly 1.5 frames per second and capped at 800 frames (MAX_FRAMES in pipeline/training/frame_extract.py).
Blurry frames are filtered out.
For photo zips, up to 800 images are extracted (a bigger set is thinned
evenly) and EXIF orientation is applied so portrait photos render
right-side-up. If the zip holds a COLMAP model (images/ plus
sparse/<model>/), the SfM stage is skipped and we go straight to
training. Such a zip is not thinned: over 800 registered images, the scene
fails (MAX_REGISTERED_IMAGES in pipeline/colmap/prebuilt.py). ARKit poses don’t skip it: GLOMAP still runs, and the poses set
which way is up (see Supported inputs).
Runtime: seconds.
Stage 2 — Structure-from-Motion
Splat3D figures out where each photo was taken from (camera poses) and produces a sparse 3D point cloud that anchors the next stage. Without accurate poses, training cannot produce a useful scene. The flow:- Detect distinctive keypoints in each image.
- Match keypoints between images. For video, match each frame to its temporal neighbors. For photo zips, match every pair.
- Solve a global optimization that places every camera and every 3D point such that the math is consistent across all observations.
Stage 3 — Gaussian Splat training
Now that we know where every camera is, we fit the scene representation: a few million 3D Gaussians, each with position, size, color, and opacity. Training is iterative:- Render the current Gaussians from a known camera angle.
- Compare the result to the actual photo from that angle.
- Update the Gaussians to reduce the difference.
- Periodically split, clone, or remove Gaussians.
- Repeat for thousands of iterations.
The times cover every stage,
/process to ready, and are approximate: they
depend on video length, the number of frames and GPU availability
(TIER_TABLE in packages/core/src/tiers.ts).
Higher tiers fit finer detail and more reflective surfaces but
cost more credits. Start at Standard and move up if you need
sharper results.
Need higher resolution, larger captures, or a custom training
configuration for archival or research work? Email
[email protected] and tell us about your
use case.
Stage 4 — Cluster cleanup
Trained scenes can have detached “floater” Gaussians — distant artifacts disconnected from the main subject. Splat3D analyzes the scene topology and records the result alongside the model so the viewer can hide or prune floaters. By default this is advisory, not destructive — the analysis is attached to the scene but no Gaussians are removed automatically. Runtime: seconds.Stage 5 — Compression for the web
Trained models (PLY files) range from tens of megabytes to several gigabytes depending on tier and scene complexity. That’s too large to load instantly in a web viewer, so Splat3D compresses the model to a SOG file (1–10 MB) with negligible quality loss. The viewer always loads the SOG. The original PLY remains available as a direct download for users who want the raw training output. Runtime: ~30 seconds.Stage 6 — LOD generation (optional)
For very large scenes, Splat3D can build a level-of-detail structure that streams the scene in chunks based on camera distance, keeping the framerate steady on huge models. Disabled by default; opt in per scene.Practical takeaways
- Photo uploads scale quadratically with image count due to exhaustive matching. Keep photo zips under ~500 images for reasonable latency.
- Video uploads are capped at 800 sampled frames — there is no benefit to uploading hour-long videos.
- Quality tier picks the speed/fidelity trade-off. All tiers run the same SfM stage; they differ in training iterations, resolution, and total runtime. See quality presets for the recommended tier per use case.
Further reading
- SfM backends — override the matcher and other SfM options on a per-scene basis.
- Training parameters — knobs on the training stage.
- Output formats — what files come out of the pipeline and how to use each one.