COLMAP 4.0 dropped today with a changelog long enough to scroll for a while. The headline feature is GLOMAP — a global Structure-from-Motion pipeline that replaces the incremental mapper as a first-class option. Twitter and the NeRF/Gaussian-splatting crowd predictably zeroed in on that. The detail worth more of your time is three items further down: FreeImage has been replaced by OpenImageIO, delivering roughly 2.5x faster image I/O while silently changing how pixel values load.
If you run a photogrammetry or 3D scanning pipeline for construction documentation, e-commerce product shots, or real estate walkthroughs — and your stack is COLMAP plus custom Python glue plus cloud GPU instances — that swap touches every run before GLOMAP even enters the picture.
GLOMAP goes first-class, with a calibration asterisk
GLOMAP is now available via global_mapper and automatic_reconstructor --mapper GLOBAL. The global pipeline skips incremental registration entirely, estimating camera poses from two-view geometries all at once. On large unordered image sets (think drone surveys or walk-through captures with hundreds of frames), global SfM typically finishes faster because it avoids the serial image-by-image registration loop.
The asterisk is in the changelog's own language: GLOMAP "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." If your downstream pipeline — Nerfstudio, 3D Gaussian Splatting, a Meshroom export, whatever — expects camera intrinsics to match incremental COLMAP output, switching to GLOMAP without re-validating will produce different reconstructions. Not wrong, necessarily. Different. And different breaks regression tests.
The image I/O swap that touches every pipeline
FreeImage was COLMAP's image backend since the project started. It worked, but the library has been effectively unmaintained for years, carries known CVEs, and lacked support for modern formats. OpenImageIO — the same library used in production VFX at studios running OpenEXR pipelines — replaces it entirely in 4.0.
The speed gain is real: 2.5x faster reads on the same image sets. For a 500-image reconstruction where image loading previously took 18-20 minutes on a cloud instance, that drops to roughly 7-8 minutes per run. At 10 jobs a day, you recover over an hour of GPU time you were previously paying for while the CPU waited on disk.
The breaking part is subtle. The changelog flags it directly: "There may be slight differences in terms of supported image formats and loaded pixel values." Pixel-value differences mean that if your pipeline does any kind of per-pixel comparison against cached or reference data — feature caching, mask alignment, QA diffs against a known-good reconstruction — those comparisons will fail after the upgrade. Not because anything is wrong, but because the decoder changed.
For a 15-person photogrammetry shop running COLMAP nightly on a fleet of cloud GPUs (say, 4×A10G instances at ~$5/hour on AWS), the upgrade path matters: you want the I/O speedup, but you need to rebuild your reference baselines first.
Learned features ship as ONNX, no PyTorch required
COLMAP 4.0 adds ALIKED (N16Rot and N32 variants) for feature extraction and LightGlue for matching, both running through ONNX. This is the detail the ML crowd should care about more than GLOMAP.
Previously, using learned features with COLMAP meant running a separate Python pipeline — typically hloc or a custom PyTorch script — to extract features and dump them into COLMAP's database format. That added a PyTorch dependency, a CUDA version compatibility headache, and a serialization step to every reconstruction.
With ONNX baked into the C++ binary, learned features are now a flag at extraction time. No Python. No PyTorch. No intermediate files. ALIKED handles textureless and repetitive surfaces (think tiled floors, glass facades, warehouse shelving) significantly better than SIFT, and LightGlue's learned matching reduces false correspondences on wide-baseline pairs.
For an agency running product-photography reconstructions on consumer hardware (Mac Studios, high-end workstations without NVIDIA GPUs), ONNX also opens the door to CPU-only learned-feature extraction. Slower than GPU, but previously impossible without the full CUDA stack.
Blackwell GPUs were silently broken before this release
Buried near the bottom of the bug-fix list: "Fixed empty patch match results on CUDA compute >= 100 (Blackwell GPUs)." If you bought an RTX 5090 or B100 and wondered why your dense reconstruction step returned blank depth maps, this was the reason. Patch match stereo — the step that turns sparse points into dense geometry — was silently producing empty output on the newest NVIDIA hardware.
No error message. No crash. Just blank results.
That fix alone justifies the upgrade for anyone who recently deployed Blackwell cards for 3D reconstruction workloads.
The upgrade decision
If your pipeline currently works on COLMAP 3.x with incremental SfM and SIFT features: upgrade for the I/O speed and Blackwell fix, but do not switch to GLOMAP or ALIKED in production simultaneously. Change one variable at a time. Rebuild your reference baselines against OpenImageIO output first, then evaluate GLOMAP on a parallel branch.
If you are still running a Python-side hloc pipeline for learned features: the ONNX integration eliminates that entire dependency. Test ALIKED+LightGlue on your hardest failure cases (reflective surfaces, repetitive textures, wide baselines) and cut the Python middleman if results hold.
The 2.5x I/O speedup pays for itself in GPU-hour savings within the first week on any pipeline running more than a few reconstructions per day. The learned features are the bigger long-term win, but the image library swap is the one that will break your CI first.
