
StreamSplat is a fully feed-forward framework that instantly transforms uncalibrated video streams of arbitrary length into dynamic 3D Gaussian Splatting representations in an online manner.
https://github.com/user-attachments/assets/d72b75de-e07a-4d81-a23f-f85e99c9bd05
https://github.com/user-attachments/assets/d975b425-1e4c-4dc9-8398-0a1a43d50e67
https://github.com/user-attachments/assets/d2a064f5-f4d7-46c4-8a3a-28fcb8679df5
https://github.com/user-attachments/assets/466a222d-f3b5-447a-84c0-a47538071c05
conda env create -f environment.yml
conda activate StreamSplat
cd submodules/diff-gaussian-rasterization-orth
pip install .
Download Depth Anything V2 checkpoint and place it in the checkpoints/ directory:
mkdir -p checkpoints
# Download depth_anything_v2_vitl.pth from https://github.com/DepthAnything/Depth-Anything-V2
# Place it in checkpoints/depth_anything_v2_vitl.pth
StreamSplat supports training on multiple datasets. All datasets require pre-computed depth maps using Depth Anything V2.
| Dataset | Type | Description |
|---|---|---|
| RealEstate10K | Static | Real estate videos |
| CO3Dv2 | Static | Object-centric multi-view |
| DAVIS | Dynamic | High-quality videos |
| YouTube-VOS | Dynamic | Large-scale videos |
Use the provided script to preprocess depth maps for DAVIS (similar scripts can be adapted for other datasets):
python preprocess_depth_davis.py --root_path /path/to/davis
Edit configs/options.py and configs/options_decoder.py to set dataset paths:
root_path_re10k: str = "/path/to/re10k"
root_path_co3d: str = "/path/to/co3d"
root_path_davis: str = "/path/to/davis"
root_path_vos: str = "/path/to/youtube-vos"
Create an accelerate config file (or use the provided acc_configs/gpu8.yaml):
accelerate config
Train the static encoder on combined datasets:
accelerate launch --config_file acc_configs/gpu8.yaml train.py combined \
--workspace /path/to/workspace/encoder_exp
After Stage 1 completes, train the dynamic decoder with the frozen encoder:
accelerate launch --config_file acc_configs/gpu8.yaml train_decoder.py combined \
--workspace /path/to/workspace/decoder_exp \
--encoder_path /path/to/workspace/encoder_exp/model.safetensors
Training progress is logged to Weights & Biases. Set up wandb before training:
wandb login
Checkpoints are saved every 10 epochs and every 30 minutes to checkpoint_latest/.
Download our pretrained checkpoint at Google Drive and place it in the checkpoints/ directory:
python splat_inference.py \
--resume checkpoints/streamsplat.safetensors \
--input_frames_path=/path/to/rgb_frames \
--input_depths_path=/path/to/depth_maps
If you find this work useful, please cite:
@article{wu2025streamsplat,
title={StreamSplat: Towards Online Dynamic 3D Reconstruction from Uncalibrated Video Streams},
author={Zike Wu and Qi Yan and Xuanyu Yi and Lele Wang and Renjie Liao},
journal={arXiv preprint arXiv:2506.08862},
year={2025},
}
This project builds upon several excellent works:
$ claude mcp add StreamSplat \
-- python -m otcore.mcp_server <graph>