Released: March 14, 2026
Full Changelog: v0.3.0...v0.4.0
New Features
-
Markov Chain Monte Carlo (MCMC) Gaussian splat optimizer -- Added a new MCMC-based optimizer for Gaussian splatting, providing an alternative optimization strategy. (#214) -- @fwilliams
-
Sparse depth regularization -- Added simple L1 loss on sparse depth during Gaussian splat training, improving geometric accuracy of reconstructions. (#188) -- @fwilliams
-
OpenCLIP foundation model -- Added OpenCLIP as a new foundation model for open-vocabulary feature extraction. (#231) -- @swahtz
-
SAM2 multi-scale mask generation -- Added multi-scale mask generation support to the SAM2 foundation model, enabling hierarchical segmentation. (#239) -- @swahtz
-
SAM1 foundation model -- Added Segment Anything Model (SAM1) as a foundation model integration. (#242) -- @swahtz
-
Extensible custom attribute system for SfmScene -- Introduced a flexible system for attaching custom attributes to SfM scenes. (#245) -- @fwilliams
-
SfM mask downsampling and caching -- Masks are now downsampled alongside images and cached for faster subsequent runs. (#219) -- @diz-vara
-
aarch64 (ARM) platform support -- Added a workaround for aarch64 platforms where
usd-corebinaries are unavailable, usingusd-exchangeas a fallback. (#190) -- @matthewdcong
Performance Improvements
-
Morton ordering for spatial locality -- Gaussian splats are now reordered using Morton (Z-order) curves to improve memory access patterns and cache efficiency during training. (#233) -- @matthewdcong
-
Optimized Gaussian splat optimizer via parameter broadcasting -- Appended parameters in the optimizer are now broadcast rather than individually set, reducing overhead during densification. (#248) -- @matthewdcong
-
Checkpoint restart performance -- Fixed a major performance issue where resuming from a checkpoint caused the full dataset to be loaded from disk for all previously-trained steps. The fix iterates over the sampler instead of the dataloader, saving hours on large datasets. Also restored deterministic minibatch ordering on restart via proper RNG seed initialization. (#159) -- @matthewdcong
-
Dynamic dataloader worker count -- Replaced hard-coded
num_workerswithos.cpu_count()to better utilize available hardware. (#171) -- @harrism
Bug Fixes
-
Fixed cache path nesting on checkpoint resume -- Resuming from a checkpoint no longer creates progressively deeper nested cache directories (
_cache/cache_1/cache_1/cache_1/...). (#202) -- @matthewdcong -
Fixed SfmCameraMetadata distortion downsampling -- Corrected distortion parameter handling when downsampling camera metadata. (#228) -- @swahtz
-
Fixed COLMAP images text loading -- Resolved bugs in the COLMAP text-format image parser. (#177) -- @NotMorven
-
Fixed empty point_indices handling -- Empty
image.point_indicesare now correctly treated as absent rather than causing errors. (#220) -- @diz-vara -
Fixed GSplat config parameter passthrough -- GSplat config parameters are now correctly forwarded to
simple_trainer.py. (#236) -- @harrism -
Fixed
training_imagesNameError in GSplat -- Resolved aNameErrorinrun_gsplat_training.py. (#247) -- @harrism -
Improved progress bar accuracy on checkpoint resume -- The progress bar no longer includes sampler fast-forward time in its ETA estimates after resuming. (#166) -- @matthewdcong
Benchmarking & CI
-
Nightly 3DGS unit benchmarks -- Added a GitHub Actions workflow for nightly regression testing of Gaussian splatting performance, with S3-based checkpoint management. (#164) -- @harrism
-
Nightly comparative benchmarks (fVDB vs GSplat) -- Added automated nightly comparison benchmarks between fVDB and GSplat implementations. (#240) -- @harrism
-
Throughput and time-series metric plots -- Comparison benchmarks now generate throughput (splats/s) plots and time-series training metric visualizations. (#168, #227) -- @harrism
-
Smart nightly skip -- Nightly benchmarks are skipped when there are no new commits, completing in seconds instead of minutes. (#173) -- @harrism
-
Publish workflow -- Added automated release build and validation CI pipeline with support for Rocky Linux 8 containers, uv-based Python installation, and wheel validation. (#258, #259, #263, #265) -- @harrism, @swahtz
-
Multiple CI stability fixes for benchmark workflows, fork handling, and runner token configuration. (#169, #209, #212, #229, #232, #234)
Documentation & Project
-
NVIDIA branding -- Updated project branding. (#217) -- @fwilliams
-
AGENTS.md -- Added AI agent guidance for contributing to the project. (#238) -- @harrism
-
Fixed typo in sensor data loading tutorial. (#174) -- @eh-dub
-
Docs cleanup: removed stale
_Cppreferences, added Google Analytics, updated demo notebook for viewer scene reset. (#160, #161, #158)