| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| colmap-x64-windows-cuda.zip | 2026-06-26 | 321.5 MB | |
| colmap-x64-windows-nocuda.zip | 2026-06-26 | 118.9 MB | |
| 4.1.0 source code.tar.gz | 2026-06-26 | 4.7 MB | |
| 4.1.0 source code.zip | 2026-06-26 | 6.6 MB | |
| README.md | 2026-06-26 | 5.7 kB | |
| Totals: 5 Items | 451.6 MB | 6 | |
New Features
- Added Caspar, a GPU-accelerated bundle adjustment backend, selectable as an alternative to the default Ceres solver. Includes rig support, GPU device selection, and pycolmap bindings for choosing the bundle adjustment and mapper backends. Caspar is often 1-2 orders of magnitude faster than the Ceres CUDA backend for medium- to large-scale problems, leading to drastic speedups especially for the incremental mapper.
- Added the spherical (equirectangular) camera models. This enables native
reconstruction of 360 panoramic images and is generally faster but less
accurate than rendering perspective views, as performed in the
panorama_sfmexample. - Extended the
panorama_sfmexample to now convert perspective cameras back to equirectangular and added global mapping support. - Added Enhanced Unified Camera Model (EUCM).
- Added advancing-front surface reconstruction meshing.
- Added support for extracting gravity pose priors from EXIF orientation tags.
- Added
CamRayFromImgbearing-vector unprojection interface and bindings. - Estimate separate
fx/fyin the p4pf solver for two-focal camera models. - Added a new
versionCLI command to print the COLMAP version. - Added
MVS_ENABLEDbuild option to compile without the MVS module. - Added
GlobalMapper.keep_max_num_tracksoption to bound the number of established tracks. - Added rotation averaging options to the GlobalMapper configuration.
- Added pycolmap bindings for
ReprojectionErrorTypeand additional point filter methods. - Added support for showing camera up vector in the viewer.
- Replaced the GUI icons with Material Symbols (Apache 2.0).
- Added keyboard shortcuts for model import/export in the GUI.
Improvements
- Accelerated the exhaustive matcher by using
IndexIVFScalarQuantizerinstead ofIndexIVFFlat. - Accelerated extraction of colors through parallelization across all images.
- Accelerated incremental triangulator through reused BFS allocations and
simplified
merge_trials_. - Added and updated sensor specs to the camera database.
- Avoided a forced copy in
mvs::Image::SetBitmap. - Support incremental
CorrespondenceGraphandObservationManagerconstruction, decouplingreg_statsfromObservationManager. - Return
std::optionalfromBitmap::GetPixel/Interpolate*. - Refit missing E/F/H in
MaybeDecomposeRelativePosesfor old databases. - Inherit all bundle adjustment options in the global mapper.
- Guard against frame mutation after reconstruction insertion via
FinalizeDataIds(). - Move semantics for
SetPoints2D(takePoint2Dvector by value). - Conditional initialization of Google logging.
- Numerous benchmarking improvements: live progress display,
--fastmode, better parallelism and per-step logging, per-dataset/overall summary rows, GT-covisibility-based filtering, and dynamic scheduling. - Added compiler warning flags and a
WERRORoption to the pycolmap build. - Robustified gravity-aligned rotation averaging against 180deg flips.
- Clipping extreme pixels in fisheye undistortion.
- Various tutorial and docstring improvements.
- For other minor improvements, see the full list of changes below.
Bug Fixes
- Fix sequential matching hang with loop detection verification.
- Fix SiftGPU device selection to include device 0.
- Fix vocab tree selection in the UI.
- Fix broken integration of SIFT features with the LightGlue matcher.
- Fix
global_mapperpoint3D.errorunits formodel_analyzer. - Fix
PoissonReconnum_threadshandling and undefined behavior. - Fix
pycolmap.Database()abort on garbage collection. - Fix Windows Unicode path handling in
Bitmap::Read/Bitmap::Write. - Fix NaN failures in rotation averaging from non-PD Cholesky.
- Fix rotation averaging crash with multi-image rigs.
- Fix missing rig pose manifold in
RefineGeneralizedAbsolutePoseand only set the manifold when residuals exist. - Fix applying
refine_sensor_from_rigto all stages of the global mapper. - Fix
mesh_texturerocclusion check edge case. - Fix SIGABRT in
RegisterNextStructureLessImagewhenNumRegImages < 2. - Fix thread pool worker processes crashing on shutdown.
- Fix onnxruntime DLL copy error in
Findonnxruntime.cmake. - Change
std::filesystem::relativetolexically_relativeforNormalizePath. - Fix crash in
AdjustGlobalBundleafter aggressive frame filtering. - Fix stale
reg_stats/observation stats and add underflow guards in mapper bookkeeping, and clearnum_reg_images. - Fix empty PatchMatch results on Blackwell GPUs (sm_100+).
- Fix locale-dependent float parsing/formatting.
- Fix thread oversubscription in the hierarchical mapper.
- Fix mask usage log never printing in the feature writer thread.
- Fix
pyceres.problemattribute onCeresBundleAdjusterfactory. - Fix conditional Eigen alignment for the 3.4.0 pre-release version.
- Fix optional access in guided matching.
- Fix reading of dynamic matrices in the SQLite database.
- Fix using the ALIKED feature extractor with pycolmap and ALIKED
min_scorekeypoint filtering. - Fix various pycolmap and PoissonRecon installation/build issues.
- Fix missing mesh simplification reset and duplicate sources.
- Add destructor to
ModelViewerWidgetto callmakeCurrent(). - Fix checks in the
GpuMatconstructor. - Add missing LightGlue matcher type to the GUI.
- Log an error instead of crashing on unknown EXIF orientation.