v0.4.0
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/blockin_set_phase_hw(),_SDK_MODEenum withis_pcie, other modal support, firmware CSV update by @sumiya-kuroda in #136, #156, #159, #160 and in #142, #169 - Refined
set_phaseControl (slm.py):set_phase()now acceptsexecute(skip hardware write) andblock(non-blocking for trigger workflows) in #172 - Build Modernization: migrated from
setup.py/requirements.txttopyproject.tomlwith 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/slowmarkers, 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_zinstead ofget_z, set_z);z_listreplaced byrange_z; newmetricandverboseparams- Build system:
setup.py,requirements.txt,requirements_ipython.txt,MANIFEST.inremoved — install viapip install slmsuite[gpu,slms]oruv sync --extra test remove_vorticesnow defaults toFalsebinaryduty_cycle corner case fixed (was inverted)
Bug Fixes
NumPy2.4 compatibility:.item()for scalar conversion, stricter indexing shapes,ptp()removal in #172, #173Pyglet>2.1.8compatibility by changing datatypes in #172- Meadowlark
get_temperature(): SDK 3.x/6.x/8.x API mismatch and missingrestypedeclaration by @sumiya-kuroda in #159 (fixes #141) - Meadowlark Remote: stale
phase→displayparameter 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_eveninverted logic: bitwise NOT always truthy in Python in #173binaryduty_cycle: inverted comparison and unclipped range in #173- Stale Fourier calibration warning in #173 (fixes #133)
ijcam_to_knslmin-place mutation of Fourier calibration by @philip-rk in #163
All Merged Pull Requests
- Update Basler camera functions by @sumiya-kuroda in #136
- Meadowlark coverglass function fixes for #141 in #142
- Added FLIR camera driver by @beneaze in #155
- Minor fix on Meadowlark Remote class by @sumiya-kuroda in #156
- Meadowlark
get_temperature()fix by @sumiya-kuroda in #159 - Add external trigger to Meadowlark SLM (PCIe) by @sumiya-kuroda in #160
- Fix FourierSLM calibration mutation in
ijcam_to_knslm()by @philip-rk in #163 - TI PLM support,
ScreenMirroredoverhaul,set_phaseGPU acceleration in #172 - Automated testing infrastructure in #173
- ReadTheDocs and cleanup fixes in #174
New Contributors
- @sumiya-kuroda made their first contribution in #136
- @beneaze made their first contribution in #155
- @philip-rk made their first contribution in #163
Full Changelog: v0.3.0...v0.4.0