Releases: HarrisonKramer/optiland
v0.5.0 (June 12, 2025)
Optiland v0.5.0 Release Notes
This release brings major enhancements across optical modeling, analysis capabilities, and usability, along with significant backend and documentation improvements. v0.5.0 focuses on increased analysis flexibility, better numerical consistency, and new tools for building and visualizing real-world systems.
Visualization of the solution space for a singlet lens, using Optiland’s differentiable raytracing and PyTorch autograd to compute gradients of RMS spot size with respect to lens radii.
🔬 Optical Modeling & Geometry
-
Flip Optical Systems or Elements
New utility to flip the optical system or optical element. -
Biconic Geometry Support
Added support for biconic surfaces, expanding modeling capability for freeform or highly aspheric systems. -
Aperture Size Control
Surfaces and lenses can now specify custom aperture sizes for plotting purposes. -
"Float by Stop Size" Aperture Type
New aperture type allows sizing relative to the system stop, enabling more parametric designs. -
Zemax File Coordinate Break Support
Zemax file reading utility now supports coordinate breaks.
🧪 Optical Analysis & Solvers
-
Through-Focus Spot Diagram
Added support for computing and visualizing spot diagrams as a function of image plane defocus. -
Through-Focus MTF
Compute the Modulation Transfer Function across image plane defocus values for detailed depth-of-focus characterization. -
Sampled MTF Evaluation
New functionality to evaluate the MTF at specific target spatial frequencies. Significantly faster than Fourier-based approaches when the MTF is only needed at specific frequencies. -
Irradiance Analysis Type
Added an irradiance-based analysis mode for evaluating intensity distribution across a surface. -
Huygens PSF
Added a new point spread function calculation using the Huygens-Fresnel integral for more accurate estimation of the PSF. -
Clearance Operand for Off-Axis Systems
New clearance optimization operands enables optimization to avoid vignetting or clipping for off-axis systems
⚙️ Backend & Core Improvements
-
Torch Backend Fixes
Improved gradient retention and differentiability in key components when using the PyTorch backend. -
Improved Least Squares Optimization
Enhanced stability and convergence in optimization routines through algorithmic improvements. -
Surface Ordering Fix
Improved robustness when defining surfaces in a non-sequential manner. -
FFT PSF Sampling Behavior
Updated sampling behavior to align more closely with commercial optical design tools. -
Ensure Unique Points in Distributions
Improved internal representation of pupil distributions for improved efficiency. -
__str__
for RealRays
Added a string representation forRealRays
objects for easier debugging and logging.
🛠 Refactors & API Cleanups
-
Refactored
solves
Module
Reorganized and streamlined solving utilities for clarity and extensibility. -
Refactored
analysis
Subpackage
Abstracted common logic into reusable components and improved structure. -
PSF & MTF Refactor into Subpackages
Modularized the PSF and MTF modules into a separate subpackages, improving maintainability.
📚 Documentation & Examples
-
Live Demo
Added an interactive live demo to the docs. Try Optiland directly in your browser! -
Differential Raytracing Examples
Added examples of using Optiland for differential raytracing and sensitivity analysis. -
Real-World Projects Section
Showcased how Optiland can be used in applied optical design projects. -
External Tools Section
Documented external tools which are using Optiland.
🌈 Miscellaneous Features
add_wavelengths
Functionality
New API to add multiple geometrically spaced wavelengths, e.g. Chebyshev spacing in log-wavelength, useful for apochromats or non-standard spectral ranges.
This release deepens Optiland’s capabilities across analysis, performance, and real-world integration. We're excited to see how you'll use it in your design work!
👉 Try it out now, or visit the updated docs at https://optiland.readthedocs.io/en/latest/.
v0.4.0 (May 2, 2025)
Optiland v0.4.0 Release Notes
This release marks a major step toward deeper numerical flexibility and performance optimization. v0.4.0 introduces official support for PyTorch as a computational backend, enabling seamless switching between NumPy and PyTorch across the entire codebase - along with targeted enhancements in modeling capabilities and documentation. Here's what’s new:
Backend Abstraction & PyTorch Integration
-
PyTorch Backend Support
Optiland now officially supports PyTorch as a backend! All core computations can now be performed using PyTorch tensors, enabling GPU acceleration and autograd-based differentiable optics workflows. This update enables a more than 100x increase in raytracing speed when run on GPU. -
Configurable Backend System
A new abstraction layer allows you to switch betweennumpy
andtorch
backends with zero changes to your code. This lays the groundwork for future machine learning integrations and high-performance computing. -
Torch Backend Documentation
Documentation added to help users get started with the new backend. See the Configurable Backend Guide for more details.
Optical Modeling Features
- Toroidal Surface Support
Added a newToroidalSurface
type, useful for modeling astigmatic or freeform-like systems such as ophthalmic lenses and laser beam shaping components. More details here.
Maintenance and Quality
-
Bug Fixes
Various small bugs were fixed across the codebase, improving robustness and numerical consistency, especially when switching backends. -
Improved Documentation
Additional examples and backend usage patterns have been added to the documentation. More tutorials are currently planned.
This release strengthens Optiland's foundations for high-performance optical design and simulation in both research and production contexts. Let us know what you build with it!
v0.3.1 (Apr 14, 2025)
Optiland v0.3.1 Release Notes
This release brings a number of new features, improvements, and refinements aimed at enhancing both user experience and codebase maintainability. Here's what's new in v0.3.1:
General Optical System Enhancements
- Physical Aperture Overhaul
Major upgrade to the physical apertures module, including support for Boolean apertures (e.g., unions, intersections). Reference here.
-
QuickFocus Solver
New solver to automatically move the image plane to the point of best focus. -
Paraxial Surface Support
IntroducedParaxialSurface
type for fast first-order (Gaussian) optical system modeling. Reference here. -
Surface Comments
Surfaces now support acomment
attribute for easier documentation and traceability.
Usability and Workflow
-
Merge Optics with
+
TwoOptic
instances can now be combined using the+
operator for quick concatenation of optical systems. Reference here. -
Custom Callback in Optimizers
Optimizers now accept user-defined callback functions for real-time updates or custom stopping conditions.
Testing, Compatibility & Maintenance
-
Improved Python Compatibility
Official support for Python 3.13. -
Expanded Test Coverage
New tests added to improve reliability and prevent regressions. -
Better Handling of Incomplete Material Data
Gracefully handles missing extinction coefficient (k
) data in materials. -
Documentation & Style Cleanup
Documentation has been improved, examples added, and code formatting updated for consistency. -
Refactors & Quality of Life
General internal improvements to make future development smoother and easier.
v0.3.0 (Feb 19, 2025)
Optiland v0.3.0 Release Notes
Additions and Improvements:
- Airy disc function added to the spot diagram
- Enhanced Zemax file support
- Corrected non-air image space wavefront calculations
- Fixed wavefront issues for +x angular fields
- Revised sign conventions for angular fields
- General code maintenance and cleanup
v0.2.6 (Feb 5, 2025)
Optiland v0.2.6 Release Notes
New example from learning guide showing three mirror anastigmat with Zernike freeform surface.
Additions and Improvements:
- Added global optimizers SHGO and basin hopping
- Bounded optimization operand support added
- Zernike freeform surface added
- Odd asphere surface added
- Update to ray tracing logic to continue tracing through negative edge thickness
- Improved coordinate system handling
- Learning guide, example gallery and documentation updates
- Visualization updates
- General bug fixes and performance improvements
Many thanks to our new contributors.
v0.2.3 (Jan 2, 2025)
Optiland v0.2.3 Release Notes
Additions and Improvements:
- File I/O feature updates for Zemax/Optiland file formats.
- Added RingDistribution pupil distribution.
- Various visualization updates.
- Added new analyses: pupil aberrations, RMS vs. field (wavefront & RMS spot size),
- Documentation update for Read the Docs. Developer's guide added.
v0.2.0 (Dec 1, 2024)
Optiland v0.2.0 Release Notes
Additions and Improvements:
- Refactor of 2D and 3D visualization to better include surface tilts/decenters
- FFT PSF visualization code optimized for speed
- Add the OperandRegistry for optimization operands. Improves optimization organization and simplifies adding new or user-defined operands.
- Updated documentation and new tutorials
- Tests added to improve package coverage
- SolveManager and PickupManagers added to handle solves and pickups, respectively, for a given Optic instance.
Breaking Changes:
This release introduces changes to the API that may affect existing code. Specifically:
- SolveManager and PickupManager Integration
- Methods for adding solves and pickups have been updated to use managers. This ensures a more modular and extendable design.
Example migration:
lens = CookeTriplet()
# v0.1.7 (Old)
lens.set_pickup(source_surface_idx=1, attr_type='radius', target_surface_idx=2, scale=-1, offset=0)
lens.clear_pickups()
lens.set_solve('marginal_ray_height', surface_idx=0, height=10)
lens.clear_solves()
# v0.2.0 (New)
lens.pickups.add(source_surface_idx=1, attr_type='radius', target_surface_idx=2, scale=-1, offset=0)
lens.pickups.clear()
lens.solves.add('marginal_ray_height', surface_idx=0, height=10)
lens.solves.clear()
v0.1.5 (Oct 10, 2024)
Optiland v0.1.5 Release Notes
This release implements the following additions and improvements:
- Bug fix to properly link package data in pyproject.toml
v0.1.4 (Oct 6, 2024)
Optiland v0.1.4 Release Notes
This release implements the following additions and improvements:
- Improved package documentation & minor bug fixes
- New examples added for Read The Docs documentation
- Added AbbeMaterial class for model glass use
- Various code refactors for improved code robustness
v0.1.2 (Sep 9, 2024)
Optiland v0.1.2 Release Notes
This release implements the following additions and improvements:
- Improved testing coverage for package robustness
- General structural and maintainability improvements
- Several new tutorials added in learning guide
- Chebyshev polynomial freeform added
- Tolerancing module added