Yalda Foroutan*, Ipek Oztas*, Daniel Rebain, Aysegul Dundar, Kwang Moo Yi, Lily Goli†, Andrea Tagliasacchi†
Official implementation of FullCircle, a method for robust 3D reconstruction from casual 360° captures.
git clone --recursive git@github.com:theialab/fullcircle.git
cd fullcircle
bash install_env.sh fullcircle
conda activate fullcirclegit clone --recursive git@github.com:theialab/fullcircle.git
cd fullcircle
docker build -t fullcircle .
docker run --gpus all -it fullcircle bashDownload the dataset from HuggingFace and place scenes under data/. Each scene should be organized as follows:
data/<scene_name>/
├── images/ # fisheye frames (camera1/, camera2/)
├── masks/ # fisheye masks (camera1/, camera2/)
├── omni/images/ # 360° omnidirectional frames
└── sparse/0/ # COLMAP reconstruction
Masks are already provided in the released data. Re-generate them with:
bash scripts/run_masking.sh <scene_name>COLMAP files are already provided in the data. Re-run calibration with:
bash scripts/run_colmap.sh <scene_name>Note: COLMAP masks should invert the capturer masks and include the fisheye border (masking/mask_train.png); COLMAP ignores pixels where the mask is 0.
python train.py \
--config-name apps/colmap_3dgrt.yaml \
path=data/<scene_name> \
out_dir=runs \
dataset.downsample_factor=4 \
dataset.test_frame_suffix="_test"python render.py \
--checkpoint runs/<scene_name>/ckpt_last.pt \
--out-dir runs/<scene_name>@article{foroutan2026fullcircle,
title = {FullCircle: Effortless 3D Reconstruction from Casual 360° Captures},
author = {Foroutan, Yalda and Oztas, Ipek and Rebain, Daniel and Dundar, Aysegul and Yi, Kwang Moo and Goli, Lily and Tagliasacchi, Andrea},
journal = {arXiv preprint arXiv:2603.22572},
year = {2026}
}