Changelog

Release 0.12.0 (2026-07-18)

imfusion

Tags

Description

πŸ’₯ API-BreakπŸ•°οΈ Deprecation🧹 Removed✏️ Changed

Removed imfusion.open, imfusion.io.open, imfusion.io.write, and imfusion.io.CompressionMode. Deprecated imfusion.load() and imfusion.save(). Added imfusion.io.load() and imfusion.io.save(). imfusion.load() and imfusion.save() now forward to imfusion.io.load and imfusion.io.save(), respectively.

πŸ’₯ API-Break🧹 Removed✏️ Changed

The following generic algorithm API classes and functions have been moved from imfusion to imfusion.algorithm.

πŸ’₯ API-Break🌱 Added

show() is now non-blocking only when the Python interpreter is in interactive mode, but it becomes blocking otherwise. This can be controlled by the added argument block, which enforces a blocking behaviour when set to True, or enforces a non-blocking behaviour when set to False. If the new default blocking behaviour in non-interactive mode is undesired, the show() calls need to be updated by passing the extra argument block=False.

πŸ’₯ API-BreakπŸ•°οΈ Deprecation✏️ Changed

The following generic algorithm API functions have been deprecated in imfusion and moved to imfusion.algorithm.

πŸ’₯ API-Break🧹 Removed✏️ Changed

Removed imfusion.mesh namespace. Moved imfusion.mesh.create to imfusion.Mesh.create(). Moved imfusion.mesh.Primitive to imfusion.Mesh.Primitive. Moved imfusion.mesh.PointDistanceResult to imfusion.processing.PointDistanceResult. Moved and renamed imfusion.mesh.point_distance to imfusion.processing.compute_point_distance().

πŸ’₯ API-Break✏️ Changed

Python algorithms can now be registered in the ImFusion Suite using the imfusion.algorithm.register() decorator instead of subclassing imfusion.Algorithm. Input compatibility is declared with class attributes of type imfusion.algorithm.Input (replacing convert_input), Parameters are declared with class attributes such as imfusion.algorithm.ParamInt (replacing self.add_param). The main execution method is now __call__ instead of compute.

πŸ’₯ API-Break🧹 Removed

imfusion.algorithm_name was removed without replacement.

πŸ’₯ API-Break🧹 Removed✏️ Changed

Algorithm.output has been removed from imfusion.algorithm.Algorithm. imfusion.algorithm.Algorithm.compute() now directly returns the respective output.

✏️ Changed🌱 Added
✏️ Changed

Registering a new Python algorithm in the ImFusionSuite now automatically unregisters any existing Python algorithm with the same class name or display name. Previously, only algorithms with the same display name were unregistered, which could lead to an error when the same class name was registered again.

✏️ Changed

Changed return type of imfusion.imagedescriptor.spacing from numpy.ndarray to imfusion.typing.spacing.

πŸ”§ Fixed

Fixed imfusion.ImageDescriptorWorld.has_index(), which previously called imfusion.ImageDescriptorWorld.index() and thus returned an index instead of checking for validity. It now correctly returns a boolean that indicates whether a pixel at (x, y, z) exists.

πŸ”§ Fixed

Fixed a bug where changing imfusion.SharedImage.shift, imfusion.SharedImage.scale or imfusion.SharedImage.metric and then retrieving them again would show no change if the GPU representation was the most up-to-date one.

πŸ”§ Fixed

Corrected mismatched property names from imfusion.ImageDescriptorWorld.pixel_to_texture_matrix / imfusion.ImageDescriptorWorld.texture_to_pixel_matrix to imfusion.ImageDescriptorWorld.image_to_texture_matrix / imfusion.ImageDescriptorWorld.texture_to_image_matrix. The previous names were misleading and did not reflect the actual behavior. The underlying functionality remains unchanged.

🌱 Added

Added imfusion.typing module for additional type hints and improved type safety.

🌱 Added

Added logic to automatically use the dedicated GPU on Laptops upon importing imfusion.

🌱 Added

The Visualizer, invoked by show(), now supports Data other than SharedImageSet.

imfusion.stream

Tags

Description

🌱 Added

Added imfusion.stream.SynchronousConsumer, a context manager that allows blocking data access to a imfusion.stream.Stream.

Samples are converted to main-package types: imfusion.SharedImageSet for image streams, (meshes, point_clouds) for poly-data streams, and :class:`imfusion.TrackingSequence`s for tracking streams.

imfusion.machinelearning

Tags

Description

πŸ’₯ API-Break🧹 Removed

Removed old imfusion.machinelearning.AbstractOperation interface from the Python bindings - use imfusion.machinelearning.Operation directly.

imfusion.graph

Tags

Description

🌱 Added

Added the functions compute_graph_features() and extract_centerline_graph().

imfusion.ultrasound

Tags

Description

🌱 Added

Added convenience method to set/unset fan mask on UltrasoundSweep class

imfusion.ndi_tracking

Tags

Description

🌱 Added

Initial Python bindings for the NDI Tracking plugin.

  • Added ndi_tracking.NDIPolarisTrackingStream for NDI Polaris Vega and Lyra optical tracking via Ethernet, with support for registering tools from ROM files.

  • Added ndi_tracking.NDIAuroraTrackingStream for NDI Aurora electromagnetic tracking via USB, with automatic instrument detection on open().

Release 0.11.0 (2025-11-27)

imfusion

Tags

Description

✏️ ChangedπŸ”§ Fixed

Changed ImageDescriptor bindings to support round-trip construction via eval(repr(obj)).

✏️ Changed

Changed return type of imfusion.SharedImage.spacing() from numpy.ndarray to collections.namedtuple.

🌱 Added

Added imfusion.BaseAlgorithm.__call__()

🌱 Added

Algorithms can now be unregistered without prepending the PYTHON. prefix.

🌱 Added

Added more informative error message when loading of our extension module fails due to missing libpython shared library on Linux.

🌱 Added

Added __repr__ to imfusion.Properties

imfusion.machinelearning

Tags

Description

🧹 Removed
✏️ Changed🌱 Added

imfusion.machinelearning.Engine can now load model artifacts from resource repositories via the newly introduced function load_model_artifact().

🌱 Added

imfusion.ultrasound

Tags

Description

πŸ’₯ API-Break🧹 Removed🌱 Added

Removed bindings for UltrasoundCalibration class. Removed bindings for ProcessUltrasoundClip class. Added free function for ultrasound calibration. Added free function for processing ultrasound clip.

🧹 Removed🌱 Added

Removed bindings for GlSweepCompounding class. Added free function for sweep compounding.

🌱 Added

Added missing Python bindings for UltrasoundSweep class: fromVolume(), globalBoundingBox(), localBoundingBox(), bounds().

imfusion.imagemath

Tags

Description

πŸ”§ Fixed

Raised a ValueError with incompatible inputs instead of returning NotImplemented in the imagemath and lazy operations. Fixed stubs to have one method definition with multiple arguments and returns for each imagemath and lazy operation.

  • Combined operator macros with different input combinations by defining std::variant types.

  • Passed and returned std::variant types for module methods (i.e. free functions).

  • Improved return value policies by using smart pointers instead of raw pointers.

  • Renamed macros to have 4 types of methods: module, class, dunder (class), and reverse dunder (class).

  • Updated docstrings with respect to the last changes.

imfusion.computed_tomography

Tags

Description

πŸ’₯ API-Break✏️ Changed

The CT Plugin is now available as a separate submodule computed_tomography.

Release 0.10.0 (2025-08-04)

imfusion

Tags

Description

πŸ’₯ API-Break✏️ Changed

Changed the handling of annotation’s partial modification from the python console. Partial annotations are no longer allowed.

πŸ’₯ API-Break✏️ Changed

Changed add_algorithm() to raise an exception if the algorithm could not be constructed.

πŸ’₯ API-Break✏️ Changed

Changed the import of bindings to remove the _bindings module from the reprs of all classes.

✏️ Changed

show() now applies prettier view animations.

πŸ”§ Fixed

Fixed MacOS / Windows possible missing display update, until the next β€œmouse move” event, when selecting different data using the data selection button.

πŸ”§ Fixed

Fixed the handling of annotations after they have been deleted in the ImFusionSuite.

πŸ”§ Fixed

Fixed some visualization glitches caused by numerical cancellation when loading images using only a small subset of the intensity range of the image data type.

πŸ”§ Fixed

Fixed show() not being launched correctly after importing opencv-python with import cv2.

πŸ”§ Fixed

Fixed the visualizer unsynced scrolling in multi-frame 2D+t image or 3D volume sets.

πŸ”§ Fixed

Fixed existing parameter attributes being overwritten in configuration()

πŸ”§ Fixed

Fixed delayed GUI update when modifying annotations or data names in the python console integrated within the ImFusionSuite.

🌱 Added

Added the BOX annotation type.

🌱 Added

Added support to interchangeably pass os.PathLike or str as function arguments that expects paths, such as save(), load().

🌱 Added

Added Python bindings for Mask and all derived classes.

🌱 Added

Added imfusion.SharedImageSet.__bool__(), imfusion.SharedImageSet.all(), imfusion.SharedImageSet.any()

🌱 Added

Added python bindings for the recently introduced DataSourceComponent.

🌱 Added

Added imfusion.SharedImage.__bool__(), imfusion.SharedImage.all(), imfusion.SharedImage.any()

🌱 Added

Added a scrollbar, when the input data allows for scrolling, to the visualizer launched by show().

🌱 Added

Added overload of show() taking as a parameter the file path to be loaded and displayed.

imfusion.machinelearning

Tags

Description

πŸ’₯ API-Break

Renamed imfusion.machinelearning.Phase.TRAIN into TRAINING and imfusion.machinelearning.Phase.TEST into Inference

🌱 Added

Added support to interchangeably pass os.PathLike or str as function arguments that expects paths, such as MachineLearningModel().