ZipSplat: Fewer Gaussians, Better Splats

Alexander Veicht1  ·  Sunghwan Hong1  ·  Dániel Baráth1  ·  Marc Pollefeys1,2
1ETH Zürich    2Microsoft

📄 Paper  |  🌐 Project Page  |  💻 Code  |  ✨ Demo

ZipSplat teaser
ZipSplat turns unposed images into 3D Gaussians in seconds, with high quality and a Gaussian budget you choose at inference.


ZipSplat reconstructs a 3D Gaussian Splatting scene from a handful of photos or a short video, without camera poses or calibration. It predicts the scene and the cameras in one pass and then refines both for a few seconds. How many Gaussians to use is a single knob you can turn at inference, from the full-quality scene down to a tiny one.

Checkpoints

File weights= Input Gaussians / token Training data
zipsplat-da3g-504.tar zipsplat (default) long edge 504, 7 aspect ratios 16 the ten datasets below
zipsplat-da3g-252.tar zipsplat-252 252 x 252 32 RE10K, DL3DV

Both checkpoints use the DA3-Giant backbone. zipsplat is the model to use in the wild. The paper's numbers are from zipsplat-252. zipsplat-da3g-252p.tar is the checkpoint of the first code release (tag v0) and stays here for that version.

Usage

git clone https://github.com/cvg/ZipSplat.git && cd ZipSplat
python -m pip install -e .
import math, torch
from zipsplat import ZipSplat, Camera, Pose, load_image, viz

model = ZipSplat(weights="zipsplat").cuda().eval()  # downloads the checkpoint on first use
images = [load_image(p) for p in paths]  # raw images, any size (auto-cropped and resized)
pred = model(images)                     # forward pass + test-time BA, no poses or intrinsics needed
gaussians = pred["gaussians"]            # 3D Gaussians
poses, cameras = pred["poses"], pred["cameras"]  # c2w poses + intrinsics of the input images

# render a novel view
camera = Camera.from_fov(math.radians(60), w=512, h=512)
pose = Pose.from_Rt(torch.eye(3), torch.zeros(3))  # identity pose = the first input view
rgb, info = gaussians.render(camera, pose)

# export
gaussians.save_ply("scene.ply")                            # open in any 3DGS viewer
viz.turntable(gaussians, "turntable.mp4", sweep_deg=None)  # wiggle orbit video

See the GitHub repository for the interactive viewer, compression, test-time bundle adjustment, evaluation and training.

License

The weights are released under CC BY-NC 4.0, non-commercial use only. This is required by their dependencies: the checkpoints are initialized from DA3-Giant (CC BY-NC 4.0) and trained on DL3DV-10K (CC BY-NC 4.0). The code is released separately under the Apache-2.0 License.

Training data

zipsplat-252 is trained on RealEstate10K and DL3DV-10K. zipsplat is finetuned on these two plus ScanNet++, ARKitScenes, Hypersim, UnrealStereo4K, BlendedMVS, CO3D, WildRGB-D and G-Objaverse. Each dataset is used under its own terms.

BibTeX

@article{veicht2026zipsplat,
  title   = {ZipSplat: Fewer Gaussians, Better Splats},
  author  = {Veicht, Alexander and Hong, Sunghwan and Bar{\'a}th, D{\'a}niel and Pollefeys, Marc},
  journal = {arXiv preprint arXiv:2606.05102},
  year    = {2026}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for veichta/zipsplat

Finetunes
2 models

Spaces using veichta/zipsplat 4

Paper for veichta/zipsplat