Skip to content

Release Notes

1.1.1 [2026-05-15]

Maintenance:

  • Added automated release notes generation via claude-code CI integration
  • Updated jq to an unpinned version in Dockerfile
  • Updated base image environment to python 3.13.12 with revised uv configuration variables

1.1.0 [2025-09-05]

Maintenance:

  • Updated Dockerfile to use Alpine-based flywheel/python-gdcm:sse image
  • Upgraded python from 3.8-3.11 to 3.13
  • Upgraded dcm2niix to commit f6d7a001 (v1.0.20250506)
  • Migrated from poetry to uv for dependency management
  • Migrated from flywheel-gear-toolkit 0.3.1 to 0.6.22
  • Updated flywheel-sdk from 15.8.0 to >=20.6.0
  • Updated fw-file[nifti] from 1.3.3 to >=4.1.3
  • Updated scikit-image from 0.18.1 to >=0.25.2
  • Removed Slicer, plastimatch, and dicom2nifti conversion dependencies and implementation code
  • Removed conversion_method configuration option
  • Updated .gitlab-ci.yml to reference new ci/gear.yml template on sse branch
  • Updated .pre-commit-config.yaml hooks to sse branch
  • Added .dockerignore to optimize Docker build context
  • Updated test fixtures to skip integration tests requiring live Flywheel API access

Documentation:

  • Added note directing users to mask-exporter gear for Flywheel instances where Read Tasks are enabled
  • Removed save_slicer_color_table configuration option from README
  • Removed slicer_color_table output from README

Fixes:

  • Updated pydicom.read_file to pydicom.dcmread for compatibility with pydicom>=2.0
  • Fixed decompression check to use file_meta.TransferSyntaxUID.is_compressed instead of deprecated is_decompressed attribute
  • Added explicit error logging when ROI info is missing
  • Fixed regex patterns to use raw strings

1.0.3 [2022-11-23]

Fixes:

  • Fixed crash when 2D slices from volumetric DICOM images are processed independently by using SOPInstanceUID for slice indexing instead of InstanceNumber

Maintenance:

  • Removed build-essential package from Dockerfile to reduce image size
  • Added SLICER_URL, DCMCOMMIT, and OJ_VERSION environment variables to manifest
  • Removed docker-image field from manifest custom configuration

Documentation:

  • Added docs/release_notes.md with categorization guidelines

1.0.2 [2022-10-07]

Enhancements:

  • Added support for single DICOM file input with automatic detection and handling
  • Added fallback to ImagerPixelSpacing when PixelSpacing is missing from DICOM metadata
  • Added logging for label processing and output filename generation

Fixes:

  • Fixed DICOM bit allocation to occur after decompression to prevent data corruption
  • Fixed handling of compressed DICOM files by decompressing before modifying pixel data
  • Changed command logging from print() to proper log.info() call

Maintenance:

  • Added dependencies: certifi, urllib3, charset-normalizer, idna, virtualenv
  • Separated Slicer installation into multiple RUN commands in Dockerfile for better layer caching
  • Removed virtualenvs.create false configuration from poetry setup
  • Updated test script to run unit tests via poetry run pytest

1.0.1 [2022-08-16]

Enhancements:

  • Added support for 2D DICOM files by using appropriate affine transformation when SpacingBetweenSlices is not available

Fixes:

  • Fixed DICOM decompression handling to properly decompress compressed DICOM files before saving pixel data
  • Fixed regex pattern for parsing RGBA color values to handle varying whitespace
  • Fixed handling of DICOM files without SpacingBetweenSlices metadata

Maintenance:

  • Updated python from 3.8 to 3.11
  • Updated numpy from 1.22.1 to 1.23.1
  • Updated scipy from 1.7.3 to 1.9.0
  • Refactored package structure from utils to fw_gear_roi2nix module
  • Improved Dockerfile build process with better layer caching and cleanup
  • Added apt-get clean and removed /var/lib/apt/lists/* to reduce image size
  • Updated pip installation to use --no-cache-dir flag for smaller image size
  • Added SHELL directive and WORKDIR for improved Dockerfile maintainability
  • Changed URLs from https:// to http:// for consistency in comments
  • Added hadolint configuration file for Dockerfile linting
  • Added pre-commit hooks configuration for code quality checks
  • Added merge request template with checklist for contributions
  • Added comprehensive docstrings throughout the codebase
  • Added type hints and improved code documentation
  • Added integration test skip conditions to handle missing dependencies gracefully
  • Updated test configuration to support pytest-cov with 30% coverage threshold

Documentation:

  • Improved README formatting and readability with better line wrapping
  • Updated repository URL from GitHub to GitLab in manifest

1.0.0 [2022-05-09]

Enhancements:

  • Added configurable DICOM-to-NIfTI/NRRD conversion methods via conversion_method config option with support for dcm2niix, slicer-dcmtk, slicer-gdcm, slicer-arch, plastimatch, and dicom2nifti
  • Added NRRD output format support via save_NRRD config option
  • Added support for multiple ROI types including EllipticalRoi, CircleRoi, FreehandRoi, and RectangleRoi
  • Added comprehensive integration and unit test suite using pytest
  • Added automated test runner scripts for Docker and Singularity execution
  • Enhanced DICOM conversion with multiple backend options including 3D Slicer, Plastimatch, and dcm2niix
  • Added environment variables for converter tool paths in manifest

Fixes:

  • Fixed ROI extraction to properly identify measurements associated with specific DICOM series
  • Corrected affine matrix calculation for DICOM files using SpacingBetweenSlices and PixelSpacing
  • Fixed color parsing for ROI annotations to properly extract RGBA values from metadata

Maintenance:

  • Migrated from requirements.txt to poetry for dependency management
  • Restructured codebase with modular architecture separating Preppers, Collectors, Creators, and Converters
  • Updated python from 3.x to ~3.8
  • Added flywheel-sdk 15.8.0, nibabel 3.2.1, numpy 1.22.1, scikit-image 0.18.1, pydicom 2.3.0, pynrrd 0.4.2, scipy 1.7.3, python-gdcm ^3.0.10, pylibjpeg 1.4.0, pylibjpeg-libjpeg 1.3.0, dicom2nifti ~2.3.0, and fw-file ^1.3.3 dependencies
  • Installed system packages including curl, cmake, make, git, wget, unzip, dcmtk, plastimatch, qt5-default, xvfb, and X11 libraries
  • Installed dcm2niix from source with OpenJPEG 2.4.0 support
  • Installed 3D Slicer 4.11 for headless DICOM conversion
  • Added dcmheat repository integration for Slicer conversion scripts
  • Refactored main execution flow from monolithic utils.py to structured modules under utils/ directory
  • Replaced direct DICOM file handling with fw-file.dicom.DICOMCollection
  • Changed gear command to use poetry run python3 for execution
  • Updated Dockerfile to use multi-stage build process with dedicated installation steps

Breaking Changes:

  • Removed combined_output_size config option for specifying bit depth of combined output
  • Changed command entrypoint to require poetry execution environment

0.3.4 [2022-01-25]

Fixes:

  • Fixed filename handling for DICOM zip files to properly generate .nii.gz output instead of .dicom.zip.nii.gz
  • Fixed filename handling for generic zip files to properly generate .nii.gz output instead of .zip.nii.gz
  • Improved filename extension detection using endswith() method for more robust file type checking

0.3.3 [2022-01-14]

Fixes:

  • Fixed slice direction handling in adjustment matrix when perpendicular character is z

0.3.2 [2021-03-02]

Maintenance:

  • Updated Docker image tags to 0.3.2

0.3.1 [2021-02-25]

Maintenance:

  • No changes in this release

0.3.0 [2021-02-25]

Enhancements:

  • Added support for DICOM input files with ROI annotations created in the OHIF viewer
  • Added support for RectangleRoi and EllipticalRoi annotation types in addition to FreehandRoi
  • Added automatic conversion of DICOM series to NIfTI format with output file converted_dicom.nii.gz

Fixes:

  • Fixed typo in README: "Flwwheel" corrected to "Flywheel"
  • Fixed volume calculation documentation to clarify that ROI volumes are computed using the voxel volume from the affine matrix determinant
  • Fixed coordinate transformation to properly handle DICOM left/right axis orientation for Axial and Coronal slices
  • Fixed inconsistent use of pip vs pip3 commands in Dockerfile

Maintenance:

  • Upgraded base image from ubuntu:xenial to ubuntu:focal
  • Added python3-setuptools and libgdcm-tools system packages
  • Added dicom2nifti, pydicom, and requests dependencies
  • Migrated from flywheel SDK to flywheel-gear-toolkit (GearToolkitContext)

Documentation:

  • Updated README to document DICOM input support and optional converted_dicom.nii.gz output
  • Updated input file description to include DICOM series and .dicom.zip archives

0.2.4 [2020-09-08]

Fixes:

  • Fixed potential KeyError when ROI objects are missing location or label fields by adding safe dictionary access checks
  • Added warning message when unlabeled ROIs are encountered, prompting users to attach labels for inclusion in output

0.2.3 [2020-09-03]

Enhancements:

  • Added support for handling oblique/rotated NIfTI orientations through affine matrix transformations
  • Added automatic sanitization of ROI labels in output filenames to replace non-alphanumeric characters with underscores

Fixes:

  • Fixed ROI coordinate transformation for non-axis-aligned image orientations
  • Fixed handling of file objects from updated SDK to use dictionary accessor instead of acquisition lookup
  • Fixed duplicate ROI prevention when processing ohifViewer measurements
  • Fixed coordinate flipping logic for sagittal and coronal orientations
  • Fixed axis ordering when converting viewer coordinates to volume indices

Maintenance:

  • Updated string formatting from single quotes to double quotes throughout codebase
  • Reformatted code for improved readability and consistent style
  • Added re module import for filename sanitization
  • Removed trailing comma in error log statement in run.py:93
  • Updated .gitignore to include __pycache__/utils.cpython-37.pyc

0.2.0 [2020-06-30]

Enhancements:

  • Added support for OHIF REACT viewer ROI format in addition to existing ROI format
  • Added logging to show number of ROI labels found during processing
  • Added per-ROI logging to track which ROI is being processed

Fixes:

  • Fixed ROI limit check to prevent processing when more than 63 ROIs are present (previously would process incorrectly)
  • Added error logging when no ROI labels are found in the input file

Maintenance:

  • Refactored ROI point processing logic into dedicated get_points() function to reduce code duplication

0.1.1 [2020-04-16]

Enhancements:

  • Added combined_output_size parameter to configure bit depth of combined ROI bitmasked file (int8, int16, int32, or int64)

Fixes:

  • Fixed bitmasked ROI count limit to be dynamic based on selected bit depth (e.g., 7 ROIs for int8, 31 for int32, 63 for int64)
  • Ensured output files are always compressed (.nii.gz) when input is uncompressed .nii format

Documentation:

  • Standardized header capitalization for Inputs and Parameters sections
  • Added note explaining voxel value behavior when ROIs overlap in combined output file

0.1.0 [2020-03-23]

Enhancements:

  • Added ROI to NIfTI conversion functionality for OHIF viewer segmentations
  • Added support for freehand polygon ROIs with bitmasked indexing (up to 63 distinct labels)
  • Added binary mask output option for individual ROI labels
  • Added combined bitmasked NIfTI output for all ROIs in a single file
  • Added CSV export of ROI properties (label, index, voxel count, volume in cubic millimeters)
  • Added 3D Slicer colortable file export for integration with 3D Slicer
  • Added multi-orientation support (axial, sagittal, coronal) for ROI rendering

Documentation:

  • Added README with usage notes, input requirements, and configuration options