Changelog

COLMAP 4.0.1 (03/15/2026)

Bug Fixes

  • Add missing LightGlue matcher type to GUI

  • Fix checks in GpuMat constructor

  • Add destructor to ModelViewerWidget to call makeCurrent()

COLMAP 4.0.0 (03/14/2026)

New Features

  • Integrated GLOMAP global SfM pipeline into COLMAP as a first-class alternative to the incremental/hierarchical mappers, available via the global_mapper and automatic_reconstructor --mapper GLOBAL commands. Many fixes and improvements have been applied to the GLOMAP codebase as part of this migration. GLOMAP is maintained through the COLMAP repository going forward. The global pipeline uses view graph calibration to estimate intrinsics from two-view geometries, which may produce different camera parameters compared to the incremental pipeline’s self-calibration.

  • Added ALIKED (N16Rot/N32) feature extraction through ONNX support. Support for brute-force and LightGlue matching as well as scalable matching with pre-trained vocabulary trees.

  • Added LightGlue ONNX feature matching for SIFT and ALIKED.

  • Added Python bindings for feature extractor and matcher.

  • Added support for reading image orientation from EXIF and auto-rotating images during feature extraction/matching for better robustness against rotational viewpoint changes.

  • Added structure-less image registration fallback using generalized relative pose estimator for registering images without 3-view overlap.

  • Added division camera models (SIMPLE_DIVISION, DIVISION).

  • Added fisheye camera model without distortion parameters (FISHEYE).

  • Improved Ceres bundle adjustment performance by ~10% through single pose parameter block.

  • Improved Ceres bundle adjustment performance by ~15% for SIMPLE_RADIAL camera model and trivial frames through analytical Jacobians.

  • Added abstract general bundle adjuster and solver summary in preparation for supporting different optimization backends.

  • Replaced FreeImage with OpenImageIO for ~2.5x faster image I/O, support for more image formats, and using an actively maintained dependency with security fixes, etc.

  • Added guided geometric verification using a known reconstruction.

  • Added view graph calibration as a new module.

  • Added model clustering to partition large reconstructions into smaller, manageable sub-models based on scene connectivity.

  • Added mesh simplification using Quadric Error Metric (QEM) decimation.

  • Added mesh texture mapping for producing textured meshes from calibrated images.

  • Added option to specify JPEG quality during image undistortion.

  • Added support for loading bitmaps with alpha channel.

  • Added option to control refinement of 3D points in bundle adjuster.

  • Added optional support for position prior in absolute pose refinement.

  • Added supernodal CHOLMOD L1 solver support.

  • Added multi-threading support for (LO)RANSAC loop.

  • Added support for custom SSL certificate locations through SSL_CERT_FILE and SSL_CERT_DIR environment variables.

  • Added support for static Windows builds with CUDA.

  • Exposed pycolmap.match_from_pairs for custom pair matching on GPU.

  • Added Python bindings for depth and normal maps.

  • Added Python type checking (mypy) for all code.

  • Improved incremental mapper and triangulator Python bindings.

  • Added support for visualizing (textured) meshes in the GUI.

  • Added drag-and-drop folder support for model import in the GUI.

  • Added drag-and-drop support for PLY import in the GUI.

  • Switched to native menu bar in GUI on macOS.

  • Added support for building shared libraries.

  • Improved patch match stereo performance by reading inputs in parallel.

  • Reduced model viewer memory usage in the GUI.

  • Added automatic fallback to BA CPU solver if GPU solver fails.

  • For other minor improvements, see full list of changes below.

Bug Fixes

  • Fixed guided matching for calibrated non-linear cameras.

  • Fixed database race conditions in mapping pipelines.

  • Fixed MSVC compatibility with isnan.

  • Fixed undefined behavior in feature match swapping.

  • Fixed SVD computation in affine transform.

  • Fixed 2D association issue at AddPoint3D with point3D_id.

  • Fixed several issues in database merging.

  • Fixed MVS workspace image downsizing.

  • Fixed pycolmap to respect fix_existing_frames option in the incremental pipeline.

  • Fixed transcription of image IDs in reconstruction from database.

  • Fixed BundleAdjustmentConfig::NumResiduals ignoring point statistics.

  • Fixed incorrect propagation of incremental options in automatic reconstructor.

  • Fixed triangulation angle computation in patch match sampling.

  • Fixed inverted units in ExifFocalLength metadata extraction.

  • Fixed slow performance of generalized absolute pose estimator verification.

  • Propagate exceptions from ThreadPool::Wait.

  • Fixed empty patch match results on CUDA compute >= 100 (Blackwell GPUs).

  • Fixed filter_frames_ usage in FindNextImages.

  • Fixed model_aligner crash by using new pose prior API.

  • For other bug fixes, see full list of changes below.

Breaking Changes

  • Replaced FreeImage with OpenImageIO for image I/O. There may be slight differences in terms of supported image formats and loaded pixel values.

  • Dropped support for Python 3.9 due to EOL.

  • TwoViewGeometry fields cam2_from_cam1, E, F, H are now std::optional.

  • Rigid3d and Sim3d parameters stored as single vector. Use rotation() and translation() accessor methods instead of direct member access.

  • Bundle adjustment cost functors use single pose parameter blocks.

  • BundleAdjuster now returns std::shared_ptr<BundleAdjusterSummary> instead of ceres::SolverSummary.

  • Ceres-related CLI options are prefixed with BundleAdjustmentCeres.*.

  • GPS/ENU coordinate conversion functionality cleaned up, breaking the Python interface.

  • Feature descriptors are now associated with a type that is propagated through the pipeline and storage. Fails matching if descriptor types are inconsistent.

  • Pose priors associated with generic sensor measurement data.

  • DatabaseCache initialization consolidated into a single options struct instead of scattered arguments.

  • Switched paths from std::string to std::filesystem::path throughout the C++ codebase. Python pathlib.Path objects are now automatically converted. No breaking impact on the Python interface.

Full Change List (sorted temporally)

COLMAP 3.13.0 (11/07/2025)

New Features

  • Improved human-readable consistency checks when configuring a reconstruction with rigs, cameras, frames, and images.

  • Improved multi-GPU feature extraction & matching performance by avoiding global mutex.

  • Improved robustness of pose prior mapper against outlier priors.

  • Improved the performance of reconstruction initialization through parallelization.

  • Added CUDA-enabled pycolmap package for Linux and automatic publishing to PyPI.

  • Make the reconstruction process fully deterministic with a new random_seed parameter.

  • Added support for filtering stationary points in two-view geometry estimation.

  • Added option to perform geometric verification with rig constraints.

  • Added option to skip matching for image pairs within the same frame.

  • Added option to keep specific cameras or rigs constant during the reconstruction.

  • Added option to clean two-view geometries in database_cleaner.

  • Added option to specify timeout for incremental mapper.

  • Added an abstract database interface for easier integration with other database backends.

  • Added experimental support for feature sub-selection for global BA.

  • Added testing tools for synthetic reconstruction noise and image generation.

  • Added official support for Python 3.14.

  • Added support for Qt6 while still fully supporting Qt5.

Bug Fixes

  • Fixed various issues with new rig support.

  • Fixed rare deadlocks in feature matching.

  • Support for UTF-8 database paths in Windows.

  • Fixed bundle adjustment performance regression due to changed Gauge behavior.

  • Removed custom manifold from colmap to avoid issues with pyceres.

  • Fixed rare crash of GUI when clearing the model viewer.

  • Fixed focal length extraction from 35mm equivalent EXIF information.

  • Fixed coordinate bug in ComputeEqualPartsBboxes.

Breaking Changes

  • Dropped official support for Python 3.8.

  • Dropped official support for MacOS x86.

  • Upgraded to pybind11 3.X.

  • Removed deprecated rig bundle adjuster command in favor of rig configurator and default bundle adjuster supporting the same functionality.

  • Allow one-to-many matches in correspondence graph. Previously, only one-to-one matches were added to the correspondence graph and therefore other matches were not used during reconstruction.

Full Change List (sorted temporally)

COLMAP 3.12.6 (09/17/2025)

Improvements

  • Upgrade to pybind 3.0.1 and use smart holder for all classes.

  • Support both Qt5 and Qt6.

  • Ensure download support on Ubuntu by installing libssl-dev for crypto.

  • Add bindings for mvs::model for covisibility support in pycolmap.

  • Add missing rig and frame interfaces for pycolmap database.

  • Throw exception when the rig configurations of the database and existing reconstruction are inconsistent.

  • Improve the Gauge logic for fixing two views.

Bug Fixes

  • Fix focal length extraction from 35mm equivalent.

  • Fix inconsistent pycolmap naming for RegisterFrame and DeRegisterFrame.

  • Call Retriangulate irrespective of the logging level.

  • Fix bundle adjustment with constant rig from world pose.

COLMAP 3.12.5 (08/22/2025)

Improvements

  • Add various safety checks with more understandable error messages when adding misconfigured rigs/cameras/frames/images to the reconstruction.

  • Recover original metric reconstruction scale in case of configured rigs.

Bug Fixes

  • Fix incompatibilities due to redundant symbol definition in pycolmap/pyceres.

  • Fix error threshold for generalized relative pose to be in pixel space.

  • Fix rig configuration in case of inconsistent IDs in database/reconstruction.

  • Fix missing colmap namespace in sqlite3 macro.

  • Fix CMake configuration with Boost 1.89 or newer.

  • Fix viewer crash when clearing the reconstruction.

COLMAP 3.12.4 (08/04/2025)

Bug Fixes

  • Fix global bundle adjustment performance regression due to changing gauge fixing mechanism by fixing points vs. cameras.

COLMAP 3.12.3 (07/16/2025)

Bug Fixes

  • Set correct version number

COLMAP 3.12.2 (07/16/2025)

Bug Fixes

  • Define VisualIndex::Read as static in python bindings

  • Only find C/CXX OpenMP components to support new CMake versions

  • Fix a bug affecting feature matching on GPU

  • Fix potential deadlock in job queue

  • Update FindMetis.cmake to also link GK_LIBRARIES

  • Fix backwards compatibility in mapper with custom image list

  • Fix docker run script for GUI

COLMAP 3.12.1 (07/05/2025)

Bug Fixes

  • Fix Docker runtime libraries

  • Fix spatial matcher bug

  • Minor fixes for documentation

COLMAP 3.12.0 (06/30/2025)

New Features

  • Support for modeling sensor rigs (and thus multi-camera rigs and panoramas). For more details and usage examples, see: https://colmap.github.io/rigs.html.

  • Automatic download and caching of vocabulary trees and other resources.

  • Support for converting between LLA and UTM coordinates.

  • Improved minimal solvers for affine transform and generalized absolute/relative pose.

  • Improved absolute pose estimation by minimizing pixel error in image space.

  • Replaced FLANN with faiss for fast approximate nearest neighbor search for improved speed in CPU-based feature matching and vocabulary tree-based image retrieval.

  • Support for propagating relative pose covariance.

  • Support visualization of models with arbitrary origin and scale (e.g., in GPS space).

  • Reconstruction benchmark for ETH3D, IMC, BlendedMVS datasets.

  • Measure and report code test coverage in CI.

Bug Fixes

Breaking Changes

  • Serialization of reconstruction and database contains a new abstraction: rigs and frames. The reconstruction output contains two new files rigs.{bin,txt} and frames.{bin,txt}. The database contains new tables: rigs, rig_sensors, frames, frames_data. Reading from existing reconstructions and databases (without rigs/frames) is fully backwards compatible and vice versa reading new reconstructions (with rigs/frames) using old code is fully forwards compatible.

  • Sensor poses (and thus image poses) are now composed as: sensor_from_world = sensor_from_rig * rig_from_world. Previously, image.cam_from_world returned a reference to the pose parameters. Now it returns a copy of the pose composition: image.cam_from_world() = image.frame.rig.sensor_from_rig(image.camera.sensor_id) * image.frame.rig_from_world with the underlying pose parameters stored in the rig and frame objects.

  • Default bundle adjuster supports sensor rigs and thus rig bundle adjuster is deprecated.

  • FLANN-based vocabulary trees are incompatible with faiss. New trees automatically downloaded, if no vocab_tree_path is provided, otherwise manual download and update required.

  • Removed official support for Ubuntu 20.04, MacOS 13, and Visual Studio 2019.

Full Change List (sorted temporally)

COLMAP 3.11.1 (12/06/2024)

Bug Fixes

COLMAP 3.11.0 (11/28/2024)

New Features

  • New pose prior based incremental mapper that can leverage absolute pose priors from e.g. GPS measurements.

  • New bundle adjustment covariance estimation functionality. Significantly faster and more robust than Ceres.

  • API documentation with auto-generated stubs for pycolmap.

  • Use PoseLib’s minimal solvers for faster performance and improved robustness.

  • Experimental support for CUDA-based bundle adjustment through Ceres (disabled by default).

  • Support for reading 16-bit PNG grayscale images.

  • New RAD_TAN_THIN_PRISM_FISHEYE camera model in support of Meta’s Project Aria devices.

  • Replace numerical with analytical Jacobian in image undistortion for better convergence.

  • Many more performance optimizations and other improvements. See full list of changes below.

Bug Fixes

  • Fixed non-deterministic behavior of CUDA SIFT feature extractor. Broken since 3.10 release.

  • Fixed orientation detection of covariant/affine SIFT feature extractor. Broken since initial release.

  • Fixed point triangulator crashing due to bug in observation manager. Broken since 3.10 release.

  • Fixed sequential feature matcher overlap missing the farthest image. Broken since initial release.

  • Fixed rare deadlock during matching due to concurrent database access. Broken since 3.10 release.

  • Fixed little/big endian detection. Broken since 3.1 release.

  • For other bug fixes, see full list of changes below.

Breaking Changes

  • Dropped official support for Ubuntu 18.04, Visual Studio 2019.

  • Upgrade to C++17 standard in C++ and C++14 in CUDA source code.

  • New pose_priors table in database in support of pose prior based mapper.

  • PyCOLMAP API:

    • align_reconstrution_to_locations is renamed to align_reconstruction_to_locations (typo).

    • pycomap.cost_functions becomes a module and should be explicitly imported as import pycolmap.cost_functions.

    • Replaced Image.registered by Image.{has_pose,reset_pose}.

    • Replaced Image.{get_valid_point2D_ids,get_valid_points2D} by Image.{get_observation_point2D_idxs,get_observation_points2D}.

    • Replaced Track.{append,remove} by Track.{add_element,delete_element}.

    • AbsolutePoseErrorCost becomes AbsolutePosePriorCost.

    • MetricRelativePoseErrorCost becomes RelativePosePriorCost.

    • The signature of ReprojErrorCost and related cost functions was changed: arguments are reordered, the detection uncertainty is now a 2x2 covariance matrix.

    • BundleAdjuster becomes virtual and should be created with pycolmap.create_default_bundle_adjuster().

    • absolute_pose_estimation becomes estimate_and_refine_absolute_pose.

    • pose_refinement becomes refine_absolute_pose.

    • essential_matrix_estimation becomes estimate_essential_matrix.

    • fundamental_matrix_estimation becomes estimate_fundamental_matrix.

    • rig_absolute_pose_estimation becomes estimate_and_refine_generalized_absolute_pose.

    • homography_matrix_estimation becomes estimate_homography_matrix.

    • squared_sampson_error becomes compute_squared_sampson_error.

    • homography_decomposition becomes pose_from_homography_matrix.

    • Rigid3d.essential_matrix becomes pycolmap.essential_matrix_from_pose.

Full Change List (sorted temporally)

COLMAP 3.10 (07/23/2024)

COLMAP 3.9.1 (01/08/2024)

COLMAP 3.9 (01/06/2024)

COLMAP 3.8 (01/31/2023)

COLMAP 3.7 (01/26/2022)

COLMAP 3.6 (07/24/2020)

  • Improved robustness and faster incremental reconstruction process

  • Add image_deleter command to remove images from sparse model

  • Add image_filter command to filter bad registrations from sparse model

  • Add point_filtering command to filter sparse model point clouds

  • Add database_merger command to merge two databases, which is useful to parallelize matching across different machines

  • Add image_undistorter_standalone to enable undistorting images without a pre-existing full sparse model

  • Improved undistortion for fisheye cameras and FOV camera model

  • Support for masking input images in feature extraction stage

  • Improved HiDPI support in GUI for high-resolution monitors

  • Import sparse model when launching GUI from CLI

  • Faster CPU-based matching using approximate NN search

  • Support for bundle adjustment with fixed extrinsics

  • Support for fixing existing images when continuing reconstruction

  • Camera model colors in viewer can be customized

  • Support for latest GPU architectures in CUDA build

  • Support for writing sparse models in Python scripts

  • Scripts for building and running COLMAP in Docker

  • Many more bug fixes and improvements to code and documentation

COLMAP 3.5 (08/22/2018)

  • COLMAP is now released under the BSD license instead of the GPL

  • COLMAP is now installed as a library, whose headers can be included and libraries linked against from other C/C++ code

  • Add hierarchical mapper for parallelized reconstruction or large scenes

  • Add sparse and dense Delaunay meshing algorithms, which reconstruct a watertight surface using a graph cut on the Delaunay triangulation of the reconstructed sparse or dense point cloud

  • Improved robustness when merging different models

  • Improved pre-trained vocabulary trees available for download

  • Add COLMAP as a software entry under Linux desktop systems

  • Add support to compile COLMAP on ARM platforms

  • Add example Python script to read/write COLMAP database

  • Add region of interest (ROI) cropping in image undistortion

  • Several import bug fixes for spatial verification in image retrieval

  • Add more extensive continuous integration across more compilation scenarios

  • Many more bug fixes and improvements to code and documentation

COLMAP 3.4 (01/29/2018)

  • Unified command-line interface: The functionality of previous executables have been merged into the src/exe/colmap.cc executable. The GUI can now be started using the command colmap gui and other commands are available as colmap [command]. For example, the feature extractor is now available as colmap feature_extractor [args] while all command-line arguments stay the same as before. This should result in much faster project compile times and smaller disk space usage of the program. More details about the new interface are documented at https://colmap.github.io/cli.html

  • More complete depth and normal maps with larger patch sizes

  • Faster dense stereo computation by skipping rows/columns in patch match, improved random sampling in patch match, and faster bilateral NCC

  • Better high DPI screen support for the graphical user interface

  • Improved model viewer under Windows, which now requires Qt 5.4

  • Save computed two-view geometries in database

  • Images (keypoint/matches visualization, depth and normal maps) can now be saved from the graphical user interface

  • Support for PMVS format without sparse bundler file

  • Faster covariant feature detection

  • Many more bug fixes and improvements

COLMAP 3.3 (11/21/2017)

  • Add DSP (Domain Size Pooling) SIFT implementation. DSP-SIFT outperforms standard SIFT in most cases, as shown in “Comparative Evaluation of Hand-Crafted and Learned Local Features”, Schoenberger et al., CVPR 2017

  • Improved parameters dense reconstruction of smaller models

  • Improved compile times due to various code optimizations

  • Add option to specify camera model in automatic reconstruction

  • Add new model orientation alignment based on upright image assumption

  • Improved numerical stability for generalized absolute pose solver

  • Support for image range specification in PMVS dense reconstruction format

  • Support for older Python versions in automatic build script

  • Fix OpenCV Fisheye camera model to exactly match OpenCV specifications

COLMAP 3.2 (9/2/2017)

  • Fully automatic cross-platform build script (Windows, Mac, Linux)

  • Add multi-GPU feature extraction if multiple CUDA devices are available

  • Configurable dimension and data type for vocabulary tree implementation

  • Add new sequential matching mode for image sequences with high frame-rate

  • Add generalized relative pose solver for multi-camera systems

  • Add sparse least absolute deviation solver

  • Add CPU/GPU options to automatic reconstruction tool

  • Add continuous integration system under Windows, Mac, Linux through Github

  • Many more bug fixes and improvements

COLMAP 3.1 (6/15/2017)

  • Add fast spatial verification to image retrieval module

  • Add binary file format for sparse models by default. Old text format still fully compatible and possible conversion in GUI and CLI

  • Add cross-platform little endian binary file reading and writing

  • Faster and less memory hungry stereo fusion by computing consistency on demand and possible limitation of image size in fusion

  • Simpler geometric stereo processing interface. Now geometric stereo output can be computed using a single pass

  • Faster and multi-architecture CUDA compilation

  • Add medium quality option in automatic reconstructor

  • Many more bug fixes and improvements

COLMAP 3.0 (5/22/2017)

  • Add automatic end-to-end reconstruction tool that automatically performs sparse and dense reconstruction on a given set of images

  • Add multi-GPU dense stereo if multiple CUDA devices are available

  • Add multi-GPU feature matching if multiple CUDA devices are available

  • Add Manhattan-world / gravity alignment using line detection

  • Add CUDA-based feature extraction useful for usage on clusters

  • Add CPU-based feature matching for machines without GPU

  • Add new THIN_PRISM_FISHEYE camera model with tangential/radial correction

  • Add binary to triangulate existing/empty sparse reconstruction

  • Add binary to print summary statistics about sparse reconstruction

  • Add transitive feature matching to transitively complete match graph

  • Improved scalability of dense reconstruction by using caching

  • More stable GPU-based feature matching with informative warnings

  • Faster vocabulary tree matching using dynamic scheduling in FLANN

  • Faster spatial feature matching using linear index instead of kd-tree

  • More stable camera undistortion using numerical Newton iteration

  • Improved option parsing with some backwards incompatible option renaming

  • Faster compile times by optimizing includes and CUDA flags

  • More stable view selection for small baseline scenario in dense reconstruction

  • Many more bug fixes and improvements

COLMAP 2.1 (12/7/2016)

  • Support to only index and match specific images in vocabulary tree matching

  • Support to perform image retrieval using vocabulary tree

  • Several bug fixes and improvements for multi-view stereo module

  • Improved Structure-from-Motion initialization strategy

  • Support to only reconstruct the scene using specific images in the database

  • Add support to merge two models using overlapping registered images

  • Add support to geo-register/align models using known camera locations

  • Support to only extract specific images in feature extraction module

  • Support for snapshot model export during reconstruction

  • Skip already undistorted images if they exist in output directory

  • Support to limit the number of features in image retrieval for improved speed

  • Miscellaneous bug fixes and improvements

COLMAP 2.0 (9/8/2016)

  • Implementation of dense reconstruction pipeline

  • Improved feature matching performance

  • New bundle adjuster for rigidly mounted multi-camera systems

  • New generalized absolute pose solver for multi-camera systems

  • New executable to extract colors from all images

  • Boost can now be linked in shared and static mode

  • Various bug fixes and performance improvements

COLMAP 1.1 (5/19/2016)

  • Implementation of state-of-the-art image retrieval system using Hamming embedding for vocabulary tree matching. This should lead to much improved matching results as compared to the previous implementation.

  • Guided matching as an optional functionality.

  • New demo datasets for download.

  • Automatically switch to PBA if supported by the project.

  • Implementation of EPNP solver for local pose optimization in RANSAC.

  • Add option to extract upright SIFT features.

  • Saving JPEGs in superb quality by default in export.

  • Add option to clear matches and inlier matches in the project.

  • New fisheye camera models, including the FOV camera model used by Google Project Tango (Thomas Schoeps).

  • Extended documentation based on user feedback.

  • Fixed typo in documentation (Thomas Schoeps).

COLMAP 1.0 (4/4/2016)

  • Initial release of COLMAP.