FiGS is a framework for trajectory optimization and control in Gaussian Splatting environments.
- NVIDIA GPU with drivers installed
- Docker Engine (install guide)
- NVIDIA Container Toolkit (for GPU access inside containers):
# Add the NVIDIA container toolkit repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# Configure Docker to use the NVIDIA runtime and restart
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart dockerThe easiest way to get started is with Docker:
git clone https://github.com/madang6/FiGS-Standalone.git
cd FiGS-Standalone
git submodule update --init gemsplat
# Detect your GPU's compute capability and build (may need to be run as sudo depending on Docker install)
CUDA_ARCHITECTURES=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -1 | tr -d '.') docker compose build
docker compose run --rm figs # starts a shell with everything readyCUDA_ARCHITECTURES must be set to your GPU's compute capability (e.g., 89 for L40S, 86 for A6000/RTX 3090). The build will fail with instructions if it is not set.
Editable packages (figs, gemsplat, coverage_view_selection) are installed automatically on startup. Source code is bind-mounted, so edits on the host are immediately visible in the container and vice versa.
If you don't have coverage_view_selection, use the base config:
docker compose -f docker-compose.base.yml run --rm figsSee DOCKER_SETUP.md for full details, configuration options, and troubleshooting.
FiGS serves as the base environment for other projects like SINGER. Those projects include their own docker-compose.yml that references the figs:latest image built here.
docker rmi figs:latest
rm -rf FiGS-Standalone # remember to move FiGS-Standalone/3dgs/ out to preserve any data!If you prefer not to use Docker:
git clone https://github.com/madang6/FiGS-Standalone.git- Update Submodules
cd FiGS-Standalone
git submodule update --recursive --init- Run the install.sh
bash install.shIf using a server:
bash install-serverside.sh- Python 3.10 with numpy 1.26.4
- PyTorch 2.1.2 with CUDA support
- All core dependencies (nerfstudio, gsplat, etc.)
- FiGS package in editable mode
- Videos go in
3dgs/captures/ - Images go in
3dgs/workspace/ - Update the
capture_examplesvariable innotebooks/figs_generate_3dgs_example.pywith your directory names
Process video data:
cd 3dgs/captures
ns-process-data video --data <data-directory-name> --output-dir ../workspaceTrain a splatfacto model:
cd 3dgs/workspace
ns-train splatfacto --data <data-directory-name> \
--pipeline.model.camera-optimizer.mode SO3xR3 \
--pipeline.model.rasterize-mode antialiasedExport the Gaussian splat:
ns-export gaussian-splat \
--load-config outputs/<data-directory-name>/splatfacto/<timestamp>/config.yml \
--output-dir outputs/<data-directory-name>/splatfacto/<timestamp>/exportsProcess all videos in capture_examples (colmap, 3dgs, export):
cd notebooks
python figs_generate_3dgs_example.pyAdditional notebooks:
python figs_capture_calibration.py
python figs_simulate_flight_example.py