Skip to content

theialab/fullcircle

 
 

Repository files navigation

FullCircle: Effortless 3D Reconstruction from Casual 360° Captures

Webpage arXiv Data

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.

Teaser

Installation

Option A: Conda (local)

git clone --recursive git@github.com:theialab/fullcircle.git
cd fullcircle
bash install_env.sh fullcircle
conda activate fullcircle

Option B: Docker

git clone --recursive git@github.com:theialab/fullcircle.git
cd fullcircle
docker build -t fullcircle .
docker run --gpus all -it fullcircle bash

Data

Download 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

Note

Remember to set the DISPLAY environment variable if you are running on a remote server from the command line.

Alternatively, use the viser GUI contributed by the community (@tangkangqi):

python train.py --config-name apps/nerf_synthetic_3dgut.yaml path=data/nerf_synthetic/lego with_viser_gui=True

Note

Remember to install viser first via pip install viser and forward the port 8080 to your local machine if you are running on a remote server.

Usage

1. Masking (optional)

Masks are already provided in the released data. Re-generate them with:

bash scripts/run_masking.sh <scene_name>

2. Camera calibration with COLMAP (optional)

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.

3. Training

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"

4. Rendering

python render.py \
  --checkpoint runs/<scene_name>/ckpt_last.pt \
  --out-dir runs/<scene_name>

BibTeX

@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}
}

About

Implementation of "FullCircle: Effortless 3D Reconstruction from Casual 360° Captures"

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 54.1%
  • Cuda 25.8%
  • C++ 12.5%
  • Slang 4.6%
  • C 1.5%
  • Shell 0.8%
  • Other 0.7%