Release Notes
1.1.1 [2026-05-15]
Maintenance:
- Added automated release notes generation via
claude-codeCI integration - Updated
jqto an unpinned version inDockerfile - Updated base image environment to
python3.13.12with reviseduvconfiguration variables
1.1.0 [2025-09-05]
Maintenance:
- Updated
Dockerfileto use Alpine-basedflywheel/python-gdcm:sseimage - Upgraded
pythonfrom3.8-3.11to3.13 - Upgraded
dcm2niixto commitf6d7a001(v1.0.20250506) - Migrated from
poetrytouvfor dependency management - Migrated from
flywheel-gear-toolkit0.3.1to0.6.22 - Updated
flywheel-sdkfrom15.8.0to>=20.6.0 - Updated
fw-file[nifti]from1.3.3to>=4.1.3 - Updated
scikit-imagefrom0.18.1to>=0.25.2 - Removed Slicer, plastimatch, and dicom2nifti conversion dependencies and implementation code
- Removed
conversion_methodconfiguration option - Updated
.gitlab-ci.ymlto reference newci/gear.ymltemplate onssebranch - Updated
.pre-commit-config.yamlhooks tossebranch - Added
.dockerignoreto optimize Docker build context - Updated test fixtures to skip integration tests requiring live Flywheel API access
Documentation:
- Added note directing users to
mask-exportergear for Flywheel instances where Read Tasks are enabled - Removed
save_slicer_color_tableconfiguration option from README - Removed
slicer_color_tableoutput from README
Fixes:
- Updated
pydicom.read_filetopydicom.dcmreadfor compatibility withpydicom>=2.0 - Fixed decompression check to use
file_meta.TransferSyntaxUID.is_compressedinstead of deprecatedis_decompressedattribute - 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
SOPInstanceUIDfor slice indexing instead ofInstanceNumber
Maintenance:
- Removed
build-essentialpackage from Dockerfile to reduce image size - Added
SLICER_URL,DCMCOMMIT, andOJ_VERSIONenvironment variables to manifest - Removed
docker-imagefield from manifest custom configuration
Documentation:
- Added
docs/release_notes.mdwith categorization guidelines
1.0.2 [2022-10-07]
Enhancements:
- Added support for single DICOM file input with automatic detection and handling
- Added fallback to
ImagerPixelSpacingwhenPixelSpacingis 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 properlog.info()call
Maintenance:
- Added dependencies:
certifi,urllib3,charset-normalizer,idna,virtualenv - Separated Slicer installation into multiple
RUNcommands in Dockerfile for better layer caching - Removed
virtualenvs.create falseconfiguration frompoetrysetup - 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
SpacingBetweenSlicesis 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
SpacingBetweenSlicesmetadata
Maintenance:
- Updated
pythonfrom3.8to3.11 - Updated
numpyfrom1.22.1to1.23.1 - Updated
scipyfrom1.7.3to1.9.0 - Refactored package structure from
utilstofw_gear_roi2nixmodule - Improved Dockerfile build process with better layer caching and cleanup
- Added
apt-get cleanand removed/var/lib/apt/lists/*to reduce image size - Updated
pipinstallation to use--no-cache-dirflag for smaller image size - Added
SHELLdirective andWORKDIRfor improved Dockerfile maintainability - Changed URLs from
https://tohttp://for consistency in comments - Added
hadolintconfiguration file for Dockerfile linting - Added
pre-commithooks 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-covwith 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_methodconfig option with support fordcm2niix,slicer-dcmtk,slicer-gdcm,slicer-arch,plastimatch, anddicom2nifti - Added NRRD output format support via
save_NRRDconfig option - Added support for multiple ROI types including
EllipticalRoi,CircleRoi,FreehandRoi, andRectangleRoi - 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
SpacingBetweenSlicesandPixelSpacing - Fixed color parsing for ROI annotations to properly extract RGBA values from metadata
Maintenance:
- Migrated from
requirements.txttopoetryfor dependency management - Restructured codebase with modular architecture separating Preppers, Collectors, Creators, and Converters
- Updated
pythonfrom3.xto~3.8 - Added
flywheel-sdk15.8.0,nibabel3.2.1,numpy1.22.1,scikit-image0.18.1,pydicom2.3.0,pynrrd0.4.2,scipy1.7.3,python-gdcm^3.0.10,pylibjpeg1.4.0,pylibjpeg-libjpeg1.3.0,dicom2nifti~2.3.0, andfw-file^1.3.3dependencies - Installed system packages including
curl,cmake,make,git,wget,unzip,dcmtk,plastimatch,qt5-default,xvfb, and X11 libraries - Installed
dcm2niixfrom source with OpenJPEG2.4.0support - Installed 3D Slicer
4.11for headless DICOM conversion - Added
dcmheatrepository integration for Slicer conversion scripts - Refactored main execution flow from monolithic
utils.pyto structured modules underutils/directory - Replaced direct DICOM file handling with
fw-file.dicom.DICOMCollection - Changed gear command to use
poetry run python3for execution - Updated Dockerfile to use multi-stage build process with dedicated installation steps
Breaking Changes:
- Removed
combined_output_sizeconfig option for specifying bit depth of combined output - Changed command entrypoint to require
poetryexecution environment
0.3.4 [2022-01-25]
Fixes:
- Fixed filename handling for DICOM zip files to properly generate
.nii.gzoutput instead of.dicom.zip.nii.gz - Fixed filename handling for generic zip files to properly generate
.nii.gzoutput 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
RectangleRoiandEllipticalRoiannotation types in addition toFreehandRoi - 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
pipvspip3commands in Dockerfile
Maintenance:
- Upgraded base image from
ubuntu:xenialtoubuntu:focal - Added
python3-setuptoolsandlibgdcm-toolssystem packages - Added
dicom2nifti,pydicom, andrequestsdependencies - Migrated from
flywheelSDK toflywheel-gear-toolkit(GearToolkitContext)
Documentation:
- Updated README to document DICOM input support and optional
converted_dicom.nii.gzoutput - Updated input file description to include DICOM series and
.dicom.ziparchives
0.2.4 [2020-09-08]
Fixes:
- Fixed potential
KeyErrorwhen ROI objects are missinglocationorlabelfields 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
ohifViewermeasurements - 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
remodule import for filename sanitization - Removed trailing comma in error log statement in
run.py:93 - Updated
.gitignoreto 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_sizeparameter to configure bit depth of combined ROI bitmasked file (int8,int16,int32, orint64)
Fixes:
- Fixed bitmasked ROI count limit to be dynamic based on selected bit depth (e.g., 7 ROIs for
int8, 31 forint32, 63 forint64) - Ensured output files are always compressed (
.nii.gz) when input is uncompressed.niiformat
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