Skip to content

v0.4.0

Choose a tag to compare

@cpanuski cpanuski released this 23 Mar 04:10
· 18 commits to main since this release
7a363db

Changelog

v0.4.0 (March 2026)

Note: To better support our growing userbase, we are transitioning development and support of slmsuite to Holodyne Labs, Inc., which we founded to enable practical, real-time holography by combining high-performance algorithms and state-of-the-art spatial light modulators.

New Features

  • Texas Instruments Phase Light Modulator (PLM) Support (texasinstruments.py): new implementation with GPU-accelerated phase processing (quantization and mapping) and USB control in #172
  • FLIR Camera Support (flir.py): PySpin/Spinnaker SDK integration with QuickSpin API, auto-configuration, multi-bitdepth support (8–16 bit), WOI, GenICam nodemap traversal, and software trigger mode by @beneaze in #155, #172
  • Renovated ScreenMirrored Implementation for Multi-SLM Setups (screenmirrored.py, _pyglet.py): now with a manager thread and dedicated event thread per SLM to prevent freezes in #172 (fixes #117)
  • Meadowlark Enhancements: PCIe external trigger support, execute/block in _set_phase_hw(), _SDK_MODE enum with is_pcie, other modal support, firmware CSV update by @sumiya-kuroda in #136, #156, #159, #160 and in #142, #169
  • Refined set_phase Control (slm.py): set_phase() now accepts execute (skip hardware write) and block (non-blocking for trigger workflows) in #172
  • Build Modernization: migrated from setup.py/requirements.txt to pyproject.toml with optional dependency groups ([gpu], [slms], [cameras], [test], etc.) in #173, #174
  • Testing Infrastructure: pytest framework with CI/CD, hardware fixtures, dynamic hardware selection, @pytest.mark.gpu/slow markers, and performance benchmarking in #173

Example notebooks have been updated to reflect/integrate these changes.

Breaking Changes

  • autofocus() signature: parameter order reversed (set_z, get_z instead of get_z, set_z); z_list replaced by range_z; new metric and verbose params
  • Build system: setup.py, requirements.txt, requirements_ipython.txt, MANIFEST.in removed — install via pip install slmsuite[gpu,slms] or uv sync --extra test
  • remove_vortices now defaults to False
  • binary duty_cycle corner case fixed (was inverted)

Bug Fixes

  • NumPy 2.4 compatibility: .item() for scalar conversion, stricter indexing shapes, ptp() removal in #172, #173
  • Pyglet>2.1.8 compatibility by changing datatypes in #172
  • Meadowlark get_temperature(): SDK 3.x/6.x/8.x API mismatch and missing restype declaration by @sumiya-kuroda in #159 (fixes #141)
  • Meadowlark Remote: stale phasedisplay parameter rename by @sumiya-kuroda in #156
  • Basler WOI/buffer: unimplemented WOI, centering mode conflict, missing grab retry by @sumiya-kuroda in #136 (fixes #135)
  • is_even inverted logic: bitwise NOT always truthy in Python in #173
  • binary duty_cycle: inverted comparison and unclipped range in #173
  • Stale Fourier calibration warning in #173 (fixes #133)
  • ijcam_to_knslm in-place mutation of Fourier calibration by @philip-rk in #163

All Merged Pull Requests

New Contributors

Full Changelog: v0.3.0...v0.4.0