One-shot Docker pipeline for NVIDIA NuRec neural reconstruction from a single (mono) pinhole camera. Runs COLMAP for structure-from-motion and 3DGUT for dense 3D Gaussian reconstruction, then exports USDZ for Isaac Sim.
Based on the official workflow: Reconstruct Scenes from Mono Camera Data.
- Host: Linux x86_64 — aarch64 is not supported (e.g. DGX Spark / Grace Hopper). Dependencies including
usd-core(USDZ export) andgcc_linux-64(conda) have no aarch64 builds. Build and run this on an x86_64 machine. - NVIDIA Container Toolkit (for GPU access in Docker)
- Hardware: NVIDIA GPU (CUDA 11.8 compatible)
- Input: Project folder whose only required content is an
images/subfolder with pinhole-camera photos (e.g. smartphone). You do not need to install or run COLMAP on your host — the image already includes COLMAP and runs it inside the container.
The container has COLMAP and 3DGUT installed. You only need to provide a folder that contains an images subfolder with your photos. The pipeline will run COLMAP (SfM) and then 3DGUT (neural reconstruction) in one go.
# Your folder can be just: my_project/images/*.jpg
# --shm-size: PyTorch DataLoader needs more than Docker’s default 64MB /dev/shm
docker run --gpus all --shm-size=8g -v /path/to/my_project:/data auto-nurecAll outputs (database.db, sparse/, 3dgrut/ with export_last.usdz) are written into the same project folder.
Input: Your project directory must contain an images/ subfolder with pinhole-camera photos.
After the pipeline, the layout matches a typical COLMAP + 3DGUT run (same as running 3DGUT manually with path=<project> and out_dir=<project>/3dgrut):
/path/to/project/
├── images/ # Your photos (JPEG/PNG, pinhole) — required upfront
├── database.db # COLMAP database (created by pipeline)
├── sparse/ # COLMAP sparse reconstruction (created by pipeline)
│ └── 0/
│ ├── cameras.bin
│ ├── images.bin
│ └── points3D.bin
└── 3dgrut/ # 3DGUT outputs (configurable via OUT_SUBDIR)
└── <experiment_name>/
└── <run-timestamp>/
├── export_last.usdz # Import this in Isaac Sim
├── export_last.ingp
├── ckpt_last.pt
└── ...
Capture tips (from the NuRec docs):
- ~60% overlap between consecutive shots
- Steady lighting, locked focus/exposure where possible
- Shutter ≥ 1/100 s; avoid motion blur
- Use JPEG or PNG (convert HEIC to JPG if needed)
The image includes COLMAP (apt) and 3DGUT (conda env). Build from this folder:
docker build -t auto-nurec -f Dockerfile .Mount your project directory at /data (or set PROJECT_DIR to the mount path). The container expects PROJECT_DIR/images to exist. Use --shm-size=8g so PyTorch DataLoader workers have enough shared memory (Docker default 64MB is too small).
docker run --gpus all --shm-size=8g -v /path/to/your/project:/data auto-nurecResults appear under the project folder:
database.dbandsparse/0/at project root (COLMAP output; 3DGUT uses project root aspath)3dgrut/(orOUT_SUBDIR) — training outputs;export_last.usdzis under<experiment_name>/<run-timestamp>/for Isaac Sim
| Variable | Default | Description |
|---|---|---|
PROJECT_DIR |
/data |
Project root (must contain images/) |
OUT_SUBDIR |
3dgrut |
Subfolder name for 3DGUT outputs |
EXPERIMENT_NAME |
3dgut_mcmc |
Experiment name for logs/checkpoints |
EXPORT_USDZ |
true |
Export USDZ for Isaac Sim |
COLMAP_MAX_IMAGE_SIZE |
2000 |
Max image dimension for COLMAP feature extraction |
Example with custom output dir and experiment name:
docker run --gpus all --shm-size=8g \
-v /path/to/project:/data \
-e OUT_SUBDIR=my_run \
-e EXPERIMENT_NAME=kitchen_01 \
auto-nurecexport_last.usdz— Under3dgrut/<experiment_name>/<run-timestamp>/. Load in Isaac Sim: File → Import (or drag into the viewport). Add a ground plane for physics and proxy for shadows; see the NuRec mono workflow.- Checkpoints (
ckpt_last.pt), INPG (export_last.ingp), and iteration outputs in the same run folder.
RuntimeError: unable to allocate shared memory(shm): Add--shm-size=8g(or at least1g) todocker run. PyTorch DataLoader needs more than Docker’s default 64MB/dev/shm.- COLMAP “No good initial image pair”: COLMAP produced a weak or empty sparse model. Improve overlap (~60%), lighting, and focus; avoid blur and mixed focal lengths. You can still run 3DGUT if
sparse/0exists, but quality may be poor. - COLMAP fails / no
sparse/0: Check overlap and image quality; ensure enough in-focus, non-blurry images and consistent camera (single pinhole). Try loweringCOLMAP_MAX_IMAGE_SIZEif you hit memory limits. - Out of GPU memory (3DGUT): Use smaller images (e.g. resize before capture or reduce
COLMAP_MAX_IMAGE_SIZE) or a GPU with more VRAM. - CUDA/GPU not seen in container: Use
docker run --gpus alland ensure the NVIDIA Container Toolkit is installed.