v0.24.3

Release date: 2026-08-10

Early Access

The Luminary Cloud API and Python SDK are Early Access features that are still under development. View the Luminary Cloud Early Access Terms. The interface may change, and you may need to migrate or discard scripts and configuration files multiple times before v1.0.0 is released. In the future, migrations may also be necessary when upgrading to new major versions of the SDK (e.g. v2.0.0).

Release Notes

This release exposes an explicit tolerance on every geometry boolean operation, adds a blade-to-blade extract for turbomachinery solutions, lets surface streamlines advect on a parent filter’s cut plane, and fixes several visualization and upload issues.

Breaking Changes

None.

Features

  • All geometry boolean operations now accept an explicit keyword-only tolerance: float = 0, the distance within which geometry is treated as coincident during the operation. 0 (the default) preserves the existing behavior. Added to VolumeSelection.union(), VolumeSelection.subtract(), VolumeSelection.intersection(), VolumeSelection.chop(), VolumeSelection.imprint(), and Geometry.add_farfield().

  • VolumeSelection.stitch() no longer requires a tolerance. tolerance now defaults to 0, which lets the geometry kernel choose one automatically; only negative values are rejected. Existing calls that pass a positive tolerance are unaffected.

  • New vis.blade_to_blade() submits an asynchronous blade-to-blade extract for a turbomachinery solution. It slices the volume at one or more constant radii about the machine axis and unwraps each slice into a 2D (z, r*theta) surface, written as a VTK .vtu file with all point fields carried along. Returns a FilterDataOutput handle; call wait() then download().

    Note: This feature is experimental and may change in a future release.

  • New SurfaceStreamlineMode.ADVECT_ON_PARENT_SURFACE constrains particle advection to the 2D output of a parent filter — a Slice, MultiSlice or Isosurface set via set_parent() — instead of named mesh surfaces, so you can see the in-plane flow on a cut. Velocity is a valid field in this mode (unlike on walls, where it is zero). BoxClip, PlaneClip and Threshold pass the surface through, so Slice -> Clip -> Streamlines works. Named surfaces and a non-zero offset are not supported in this mode and raise a ValueError.

Deprecations

None.

Bug Fixes / Improvements

  • SurfaceStreamlines.sampling_rate is now applied. It was never sent to the server, so the value silently had no effect. The default is now 10, and the value must be an integer in the range [1, 1000].

  • DisplayAttributes.opacity is now carried through to the render request. It was previously documented and settable but silently dropped.

  • Render and extract status is now always a RenderStatusType rather than degrading to a raw integer after the first refresh(). A backend render failure now reports the actual status instead of raising AttributeError: 'int' object has no attribute 'name'.

  • Transient network errors during file uploads to cloud storage are now retried, fixing intermittent ConnectionError failures when uploading geometry and mesh files.

  • Surface validation for SurfaceStreamlines and SurfaceLIC is now applied consistently across image renders, data extracts and interactive scenes.

Migration Guide

No breaking changes.