v0.27.0

Release date: 2026-09-23

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 extends field comparison renders to Physics AI inference results, lets a simulation template be validated against a geometry version before meshing, adds a frozen-flow schedule for steady conjugate heat transfer, and fixes several clip filter inconsistencies.

Breaking Changes

  • In Project.validate_simulation_template(), mesh_id is now an optional keyword-only argument, and simulation_template_id is the first positional argument. A call that passes the mesh ID positionally, such as project.validate_simulation_template(mesh_id, template_id), must now pass it by keyword.

Features

  • vis.Scene.compare() accepts an InferenceJob, so an inference result can be compared against a simulation solution or against another inference job in the same project. To compare a simulation with an inference job, build the scene on the Solution and pass the inference job to compare(); the reverse is rejected, because only a simulation-based scene can hide the far field with hide_far_field(). Fields are matched by name and compared as-is, with no unit conversion, and derived fields such as the pressure coefficient don’t exist on an inference job. Because inference jobs only carry surface data, filters that need volume data, such as volumetric streamlines, are rejected when an inference job is on either side of the comparison.

  • Project.validate_simulation_template() accepts geometry_version_id as an alternative to mesh_id, so a template can be checked before mesh generation completes. Exactly one of the two must be given.

  • MultiPhysicsCouplingOptions adds an optional two-phase schedule for steady conjugate heat transfer. Setting mp_coupling_phase_strategy to MpCouplingPhaseStrategy.MP_COUPLING_PHASE_STRATEGY_FROZEN_FLOW_ENERGY first converges the fluid flow, then freezes it and solves the coupled fluid and solid temperature field. The handoff happens when the flow stopping conditions are met, or at mp_coupling_flow_max_iters when mp_coupling_flow_max_iters_enabled is set. The schedule requires steady, constant-density flow without buoyancy. mp_coupling_krylov_deflation_size enables Krylov deflation for the coupled temperature solve. All new options default to the existing behavior.

  • vis.PlaneClip and vis.BoxClip have a smooth flag. When True, cells that straddle the clip boundary are cut by it rather than passed through whole.

Deprecations

None.

Bug Fixes / Improvements

  • Smooth and non-smooth clips now keep the same side for a given inverted value, so setting inverted always selects exactly the opposite region. They previously kept opposite sides.

  • Points lying exactly on a clip plane or box boundary are no longer discarded. Previously, for example, a plane clip applied to a slice with the same origin and normal produced no geometry whatever the value of inverted. vis.Threshold likewise no longer drops values exactly at the ends of its range.

  • vis.PlaneClip.inverted is no longer ignored when rendering.

Migration Guide

If you call Project.validate_simulation_template() with the mesh ID as the first positional argument, pass it by keyword instead:

- project.validate_simulation_template(mesh_id, template_id)
+ project.validate_simulation_template(template_id, mesh_id=mesh_id)