Slicer 5.4: Summary and Changelog

Table of content

Summary

The community of 3D Slicer developers is pleased to share the announcement of version 5.4, originally released last year.

3D Slicer 5.4 built on the success of previous versions, which have collectively seen over 1.4 million downloads of the core application and 6.8 million downloads of extensions over the past decade

The development of 3D Slicer—including its numerous modules, extensions, datasets, pull requests, patches, issues reports, suggestions—is made possible by users, developers, contributors and commercial partners around the world. 3D Slicer is based on a stack of open-source software and we are working constantly on updating the underlying packages. This development is funded by various grants and agencies. For more details, please see the 3D Slicer Acknowledgments page.

Feel free to share your insights on Discourse and explore our contributing guidelines. If you need help using Slicer, want to report a problem, request a feature, or share how Slicer has contributed to your work, visit our Get Help section.

slicer.org serves as the central hub for the application, training materials, and the development community, offering a series of tutorials and data sets through the Slicer Tutorials page.

Please note that Slicer continues to be a research package and is not intended for clinical use (clinical users must obtain the necessary ethics or regulatory approvals).

This version was released on August 19th, 2023, and the associated git tag is v5.4.0. Information about previous releases can be found on the Release Details page.

1 Like

Changelog

Core

Rendering & Display

  • Implement multi-monitor layout (PR-6776)
  • Add option for displaying vertical slice controller (PR-6712)
  • Enable “Pickable” segment display property to allow disabling point picking (PR-6984)
  • Introduce fractional addition to Add/Subtract Slice Compositing pipeline (PR-7002)
  • Add flip and rotate buttons to Reformat module (PR-7078)
  • Update Slicer Controller with Thick Slab Reconstruction option (PR-7021)
  • Initialize global pause render state for newly created views (PR-6947)
  • Display slab reconstruction thickness in slice view corner (PR-7177)
  • Use column name as plot title when unspecified (PR-6682)
  • Improve Volumes module display options and fix related issues (PR-6758)
  • Add “Refocus camera” action to view context menu (PR-6916)
  • Add alternative shortcut for view pan-zoom-rotate (PR-6916)
  • Update crosshair cursor position on 3D view mouse move events (PR-6937)
  • Fix issue allowing more than one rotation slider to be non-zero (PR-6759)
  • Fix computation of offset direction label in slice view controller (PR-6781)
  • Fix warning when changing window/level with mouse mode (PR-6897)
  • Fix inability to change foreground volume window level with mouse mode (PR-6924)
  • Fix dynamic update of transform visualization (PR-6956)
  • Fix interaction handle visibility when changing displayed slice (PR-6992)
  • Fix inability to change foreground W/L with mouse mode (PR-6996)
  • Fix small shift in slice image in 3D views (MR-6959)
  • Fix “Restore view layout” action in view context menu (PR-7097)
  • Fix potential segfault during initialization of qMRMLSliceWidget (PR-7115)
  • Fix color legend visibility on non-standard slice views (PR-6836)
  • Fix display issues with “Model,” “plane markups,” and “segmentation closed surface” slice intersections (PR-7102)

Application

  • Enlarge error report box (PR-6769)
  • Make ctk ErrorLogWidget dockable (PR-7059)
  • Avoid superfluous error message (PR-6952)
  • Enable saving and restoring SliceViewAnnotations display level (PR-7175)
  • Re-export selected PNGs to fix “libpng warning: iCCP: CRC error” (PR-6807)
  • Improve rendering of SaveDataDialog checkboxes in Dark Mode (PR-7098)
  • Enhance Python scripted module detection for drag-and-drop (MR-6959)
  • Synchronize DataProbe UI initialization and “Restore Defaults” action (PR-7174)
  • Improve module finder filtering (PR-6844)
  • Support import type annotation from Slicer during module load (PR-6847)
  • Skip camera undo when undo is not enabled on vtkMRMLCameraNode (PR-7018)
  • Fix splash screen loading text visibility (PR-7023)
  • Fix crash when adding %s specifier to color legend label (PR-6795)
  • Fix home shortcut behavior when Python console visible (PR-7167)
  • Fix scene compatibility error message (PR-6755)
  • Fix non-functional exit cross on “Save before exit” popup (PR-6906)
  • Fix launching .py files in Slicer with -I argument (MR-6959)

IO

  • Enable process output retrieval during CLI execution (PR-6721)
  • Support shallow and deep copy for scalar volume display node (PR-6857)
  • Simplify loading of .vtk image files (PR-7117)
  • Update vtkMRMLParser to support custom types ending with “Node” (PR-6715)
  • Check file extension readers before inspecting content (PR-7139)
  • Update MultiVolumeImporter to load as volume sequence by default (PR-7141)
  • Load tables with default column type (PR-6775)
  • Generate segment colors for raw NRRD files via storage node (MR-6959)
  • Choose file reader/writer based on confidence level (PR-6998)
  • Update vtkMRMLWriteXMLMatrix4x4Macro to separate values with a single space (PR-7039)
  • Fix error message in vtkMRMLColorTableNode (PR-6729)
  • Fix reading of vector fields from NIFTI files (PR-6791)
  • Fix CLI module issue with reading output from initially empty nodes (MR-6959)

Extension

  • Add API for downloading and installing extensions (PR-7145)
  • Update ExtensionsManager install API to check for updates (PR-7151)
  • Update server-based extension installation to return a boolean status (PR-7148)
  • Fix blank Extensions Manager on Linux due to Chromium sandboxing (PR-6744)
  • Fix IsPluginInstalled() behavior when the plugin is installed in the application build tree (PR-6970)
  • Fix color setting in qSlicerExtensionsLocalWidget status messages (PR-7147)

Scripting

  • Add Parameter Node Wrapper for vtkMRMLScriptedModuleNode to provide typed member access (PR-6684, PR-6725, PR-6727, PR-6740, PR-6757, PR-6772, PR-6771, PR-6783, PR-6800, PR-6808, PR-6829, PR-6843, PR-6848, PR-6862, PR-6865, PR-6871, PR-6891)
  • Enable use of pathlib.Path objects for paths in slicer.util (PR-6743)
  • Add array size hints for improved Python wrapping (PR-6765)
  • Implement ParameterNodeWrapper default by assignment (PR-6871)
  • Add module paths to the application via drag-and-drop (PR-6872)
  • Allow setting a custom editor for .py files (PR-7074)
  • Add utility function to retrieve ROI box as vtkPolyData (PR-6958)
  • Add “Test” button to ScriptedLoadableModule UI (PR-7038)
  • Add convenience methods for locating markup control points (MR-6959)
  • Update slicer.util.updateVolumeFromArray to support 1D NumPy arrays (PR-7142)
  • Update DWMRIMultishellIOTests to remove nose function dependency (PR-7052)
  • Improve error reporting in ScriptedFileReaderWriterTest (PR-7144)
  • Register ParameterNodeWrapper plugins within corresponding modules (PR-6855)
  • Apply miscellaneous scripted module fixes (PR-6993)
  • Add Python utility functions for ITK image ↔ volume node conversion (PR-7094)
  • Fix observer warning in scripted module template (PR-6720)
  • Fix lost setValue function with nested parameter packs (PR-6851)
  • Fix Python wrapping for methods using enum arguments (PR-6935)

Internationalization/Localization

  • Bundle Qt language tools (PR-6798)
  • Ensure Qt language tools are bundled on macOS (PR-6904)
  • Add translation function for Python scripted modules (PR-6917)
  • Update CTK to the latest version for improved translations (PR-6926)
  • Enable update_translations.py to create new translation components (PR-7107)
  • Mark additional text as translatable (PR-6921)
  • Position literals after string format specifiers for translation (PR-6777)
  • Make loadable module titles translatable (PR-6828)
  • Fix application’s applicationLocale object (PR-7035)
  • Fix welcome module translation (PR-6810)
  • Apply minor fixes to improve translations, remove warnings, and enhance Python wrapping (PR-6820)
  • Mark translatable strings in various core components (Base/QTGUI, Base/QTCore, Base/QTApp, Base/QTCli) (PR-6704, PR-6768, PR-6784, PR-6793, PR-6821)
  • Make all text in built-in CLI modules translatable (PR-6681)
  • Mark translatable strings in DataProbe module (PR-6960)
  • Mark translatable strings in Sequences module (PR-6977)
  • Mark translatable strings in Markups module (PR-6962)
  • Mark translatable strings in Segmentations module (PR-6948)
  • Mark translatable strings in SegmentStatistics module (PR-6942)
  • Mark translatable strings in Volume Rendering module (MR-6959)
  • Mark translatable strings in Volumes module (PR-6655)

Improved Modules

DICOM

  • Add DICOM patcher rules for character set and exposure fixes (PR-6940)
  • Default to loading DICOM files using the DICOM module (PR-7077)
  • Support special characters when saving scenes to DICOM SC (PR-6963)
  • Add parsed parameters in DICOMRequestHandler (PR-6713)
  • Save DICOM instance UID in the image sequence plugin (PR-7096)
  • Allow multiple DICOM plugins with the same confidence level for export (PR-6863)
  • Fix regression in DICOM patcher (PR-6950)
  • Fix user warning triggered by the default progress callback in send() (PR-6822)
  • Support color DICOM data series (PR-7089)
  • Remove redundant “Warning:” prefix in DICOM popup messages (PR-7164)
  • Import additional series information from DICOM images (PR-6877)

Markups

  • Allow custom markup classes to store additional properties in the markups file as JSON (PR-6756)
  • Add support for curve torsion measurement (PR-6774)
  • Allow line/angle markups to remain visible even when control points are hidden (PR-6842)
  • Support detaching the markups toolbar from the mouse mode toolbar (PR-6675)
  • Fix reading of default markup active color (PR-6736)
  • Fix markups curve measurements test (PR-6816)
  • Add toggle action for markups in the Markups Place button menu (PR-6856)
  • Improve example for exporting markup measurements (PR-6746)
  • Increase robustness for loading legacy annotation fiducials, lines, and ROI nodes (PR-6814)
  • Fix copying of curves using CopyContent (PR-6818)
  • Fix static control point measurements for closed curves (PR-6887)
  • Fix potential NaN in torsion calculations for markup curves (PR-7122)
  • Enable translation/rotation of unlocked points in a list (PR-7025)

Models

  • Fix Models module name display issue (PR-6846)

Sample Data

  • Fix sample dataset labels not appearing on large desktop monitors (PR-6731)

Sequences

  • Restore synchronized visibility for sequence table headers (PR-6951)
  • Fix warning in sequence browser seek widget (MR-6959)
  • Improve sequence editing functionality and fix related issues (PR-6930)
  • Fix consistency check in vtkMRMLVolumeSequenceStorageNode (PR-7069)

Segmentation

  • Add soft edge option to Mask Volume Segment Editor effect (PR-6849)
  • Add vtkITKGrowCut filter (PR-6946)
  • Use inclusive language for segmentation source representation (PR-6901)
  • Create non-existing segments when importing a label map to segmentation node (PR-6835)
  • Set segment “Pickable” display property to true if not specified (PR-7000)
  • Fix behavior after invisible segment confirmation popup (PR-7084)

Subject Hierarchy

  • Add option in Subject Hierarchy to set segment opacity (PR-6932)
  • Add menu actions to hide or show selected items in the subject tree (PR-7028)

SurfaceToolbox

  • Fix Dynamic Modeler layout in SurfaceToolbox module (PR-6938)
  • Enable uniform remeshing in SurfaceToolbox for triangle strips (PR-6974)

Tables

  • Fix initialization of non-string table cells to prevent random values (PR-6850)
  • Preserve column order when reading tables from files (PR-6850)

Terminologies

  • Fix handling of non-modified terminology types (PR-7009)

Volume Rendering

  • Fix color synchronization inaccuracies in the Volume Rendering module (PR-7042)
  • Prevent display of volume rendering if the volume is under a non-linear transform (PR-7065)
  • Improve volume rendering presets (PR-6762)

WebServer

  • Add Web Server examples using Three.js and ModelViewer (PR-6985)
  • Add VolView link to WebServer examples (PR-6995)
  • Fix SlicerRequestHandler return value when reader does not return any node ID (PR-6752)
  • Free notifier after request handling (PR-6824)

Removed Modules

  • Remove Annotations module (PR-6524)
  • Move ACPC Transform module to SlicerNeuro extension (PR-7005)

Infrastructure

Packaging

  • Change organization name and domain from NA-MIC to Slicer (PR-6750)
  • Create a Windows Desktop shortcut during installation (PR-6761)
  • Replace lib with CMAKE_INSTALL_LIBDIR for standardized library installation path (PR-6760)
  • Fix issue with CPACK_NSIS_INSTALL_SUBDIRECTORY being overwritten (PR-7091)
  • Update organization name and domain to slicer.org (PR-6879)
  • Adjust package vendor setting for improved clarity (PR-6881)
  • Fix Qt tools packaging (PR-6907)

Testing

  • Fix qMRMLLayoutManagerVisibilityTest (PR-6797)
  • Fix qSlicerMouseModeToolBarTest1 (PR-6802)
  • Update SlicerOrientationSelectorTestTest to accommodate widget rename (PR-7082)
  • Update test_slicer_util_save to use a non-deprecated method (PR-7022)
  • Fix failing qMRMLLayoutManagerTest2 and py_SubjectHierarchyGenericSelfTest tests (PR-6755)

Continuous Integration (CI)

  • Fix “Build Slicer” CI workflow for push events (PR-7064)
  • Skip steps in required jobs instead of skipping entire workflows (PR-7062)
  • Update codespell GitHub workflow to include additional exceptions (PR-6853)
  • Add Dependabot workflow to update GitHub Actions dependencies (PR-6888)
  • Pin more GitHub actions to full-length commit SHA for consistency (PR-6898)

Build-System

  • Update minimum supported macOS versions (PR-6695)
  • Remove exposure of ui_*.h files from public header files (PR-6909)
  • Remove redundant includes (PR-7106)
  • Fix timestamp warnings in external project download and extraction (PR-7138)
  • Add missing include guards and remove unused header files (PR-7070)
  • Prefer ITK Python wheels over building ITK Python from source (PR-7051)
  • Fix various warnings (PR-6864, PR-7048)
  • Apply lint fixes (PR-7076)
  • Update vtkMRMLSliceNode to use MRML helper macros (PR-7039)
  • Fix build when OpenSSL support is disabled (PR-6747)
  • Fix vtkMarkupsAnnotationSceneTest build with SceneViews module disabled (PR-6790)
  • Support slicerFunctionAddPythonQtResources() for extension modules (PR-6792)
  • Fix lint and spellchecker errors (PR-6949)
  • Report error if an unsupported CMake version (3.25.0-3.25.2) is used (PR-6852)
  • Speed up incremental builds on Linux (PR-6983, PR-7001)
  • Support enforcing specific Slicer revision during extension build (PR-7040)
  • Fix deprecation warnings by explicitly calling vtkStdString::c_str() (PR-7044)
  • Remove redundant FindFontConfig module (PR-6155)
  • Fix potentially invalid pointer in vtkSlicerSegmentationsModuleLogic (PR-7050)
  • Ensure consistent include guard definitions to match filenames (PR-7072)
  • Replace deprecated Qt Script usage (PR-6710)
  • Fix CMake 3.26 warning in SlicerLinkerAsNeededFlagCheck project (PR-7135)
  • Ensure disabling Slicer_USE_PYTHONQT also disables SimpleITK (PR-7146)
  • Fix Sphinx build warning in Python FAQ related to “txt” lexer (PR-7173)
  • Fix Python-extension-manager-ssl-requirements build with [crypto] specifier (PR-7113)
  • Add missing QSslConfiguration include (PR-6884)
  • Validate application name in slicerMacroBuildApplication (PR-6880)
  • Fix vtkMarkupsAnnotationSceneTest build with SceneViews module disabled (part 2) (PR-6834)
  • Fix -Wunused-parameter warning in vtkMRMLSliceLogic::VolumeWindowLevelEditable (PR-6900)
  • Fix -Wrange-loop-construct warning in Markups module (PR-6902)
  • Fix Python linting issues (PR-6706)
  • Remove unused workaround_recommonmark_issue_191 custom Sphinx extension (PR-6714)
  • Update markdown files to use LF line-endings (PR-6734)
  • Fix Python lint errors (PR-6817)
  • Correct various typos (PR-7032, PR-7054)
  • Ensure “#endif” guards do not include comments (PR-7071)
  • Fix typos in header comments (PR-7073)
  • Improve comment clarity (PR-7075)
  • Remove duplicated include in qSlicerPersistentCookieJar (PR-7158)
  • Remove duplicated include in vtkMRMLSequenceStorageNode.cxx (PR-7162)

Dependencies

vtkAddon:

  • Simplify wrapping of module logic and MRML libraries (PR-6885)
  • Add support for Python module naming (PR-6841)
  • Fix potential out-of-bounds issue in vtkCurveGenerator (PR-7043)
  • Remove redundant Markups MRML classes (PR-6883)

VTK:

  • Backport OpenXR and OpenXRRemoting updates (PR-6780)
  • Backport rendering changes for VR, OpenVR, and OpenXR (PR-6967)
  • Upgrade VTK from 9.1.20220125 to 9.2.20230607 (PR-7010)
  • Reintroduce OpenVR API to retrieve last pose (PR-6754)
  • Ensure valid OpenVR pose retrieval (PR-6779)
  • Restore complex gesture support in SlicerVirtualReality (PR-6805)
  • Fix regression blocking older .vtp file loading (PR-7080)
  • Resolve regression in Dynamic Modeler curve cut (PR-7140)
  • Address Windows build error related to .pyi file generation (PR-6903)
  • Fix packaging error due to missing .pyi files (PR-6905)
  • Support external build for RenderingOpenXRRemoting module (PR-6933)
  • Workaround external project output error flagging (PR-7104)

CTK:

  • Address warnings and miscellaneous issues (PR-7045)
  • Fix crash when importing ctk or qt in standalone Python (PR-6886)
  • Apply minor fixes in the latest version (PR-6939)
  • Fix initial sizing of modules using ctkFlowLayout (PR-7111)
  • Resolve build issue for CTK DICOM Core library (PR-6908)
  • Correct styling of ctkRangeSlider (PR-7116)
  • Remove code specific to Qt 4 (PR-7127)
  • Ensure only required Qt components are included (PR-7129, PR-7133)
  • Update general CTK components (PR-7110)

ITK:

  • Fix read/write of displacement fields in NIFTI format (PR-6799)
  • Backport fixes for gcc13 compatibility in ITK and VTK (PR-6971)
  • Improve dependency analysis for Flatpak (PR-7019)
  • Clarify image_from_vtk_image usage (PR-7168)

Other Dependencies:

  • Update RapidJSON to 2023.05.09 to resolve warnings (PR-7047)
  • Correct GitHub organization for qRestAPI external project (PR-7085)
  • Update Python packages to latest versions (PR-7046, PR-6803, PR-6859)

Documentation

Templates and Guides:

  • Tweak “release” issue template (PR-6699)
  • Tweak “patch-release” issue template (PR-6701)
  • Improve “release” and “patch-release” issue templates (PR-6703)
  • Add “Self Tests” developer documentation (PR-6742)

General Documentation Improvements:

  • Fix typos and grammar in various documents (PR-7063, PR-7121)
  • Update Debian distribution names in linux.md (PR-7020)
  • Improve documentation on slicer.util.pip_install usage (PR-7172)
  • Fix typo in Troubleshooting guide (PR-6707)
  • Correct link to ImageStacks tutorial in Volumes module documentation (PR-6718)
  • Update parameter node documentation (PR-6873)

Scripting and API Documentation:

  • Describe pip_install usage in modules (PR-6913)
  • Add Qt connection details to Python FAQ (PR-6737)
  • Improve slicer.util.to_bool docstring (PR-6697)
  • Add Python FAQ improvements (PR-7014)

Code and Feature-Specific Documentation:

  • Clarify volume computation in Segment statistics documentation (PR-6739)
  • Document how to add volume rendering presets (PR-6763)
  • Clarify GetTransformBetweenNodes PostMultiply mode (PR-6840)
  • Describe automatic resampling of binary labelmap representation (PR-7170)
  • Improve “Interpolation order” parameter documentation (PR-7006)
  • Add example for model point picking (PR-7026)
  • Expand GUI documentation for Segment Editor module (PR-6955)
  • Add limitations section to segmentations.md (PR-6978)

Platform-Specific Notes and Fixes:

  • Add warning in linux.md about Debian’s OpenSSL (PR-7033)
  • Add note in linux.md regarding Debian 12 and CMake (PR-7031)
  • Update Windows build instructions (PR-7036)
  • Confirm compatibility with newer CMake versions (PR-7053)

Example Code and Practical Usage:

  • Add hanging protocol example to script repository (PR-6915)
  • Update example usage in sequence browser documentation (PR-6854)
  • Update segmenteditor.md with node reference info (PR-7134)

Syntax and Formatting Adjustments:

1 Like