Skip to content

Release Notes

1.7.5 [2026-04-17]

Fixes:

  • Fixed VALID_KEY regex rejecting private DICOM creator names that contain spaces (e.g. "SIEMENS CSA HEADER,0029xx08"), so users can configure Siemens CSA private tags via project.info.context.header.dicom without the gear exiting with an error (GEAR-11849)
  • Fix issue with tuple keys not being converted correctly (GEAR-11850)

1.7.4 [2026-04-02]

Maintenance:

  • Removed upper version constraints from flywheel-sdk, nibabel, ruamel.yaml, pytz, and ffmpegio dependencies
  • Updated ruamel.yaml usage in tests to use YAML class directly instead of yaml.safe_dump/yaml.safe_load

1.7.3 [2026-04-01]

Maintenance:

  • Updated flywheel-sdk constraint from >=18,<19 to >=18,<22
  • Updated requires-python constraint from ~=3.11 to >=3.11,<4
  • Pinned scipy==1.16.3 to avoid breaking change introduced in scipy 1.17

Documentation:

  • Updated CONTRIBUTING.md to reflect migration from poetry to uv for dependency management

1.7.2 [2026-01-09]

Fixes:

  • Fixed modality and classification metadata mismatch by clearing classification features when modality is set from DICOM tag

Documentation:

  • Added explanation of how DICOM modality tag affects Flywheel classification features
  • Added FAQ entry recommending workflow order for metadata import and classification

1.7.1 [2025-12-17]

Maintenance:

  • Updated dependencies to address known vulnerabilities

1.7.0 [2025-11-24]

Enhancements:

  • Added support for extracting metadata from video files with ffmpeg integration

Fixes:

  • Replaced assert with proper RuntimeError exception in compute_axis_from_pair() for point dimension validation

Maintenance:

  • Migrated from flywheel-gear-toolkit to fw-gear library
  • Updated base image to flywheel/python:3.13-wolfi-build (Chainguard Wolfi)
  • Upgraded python from 3.11 to 3.13
  • Updated fw-file minimum version from 4.1 to 4.2.0
  • Added ffmpegio dependency (>=0.11.1, <0.12.0)
  • Simplified Dockerfile build process by consolidating stages and reducing layer count
  • Removed obsolete setuptools vulnerability workaround from base image setup

Documentation:

  • Expanded Additional DICOM Tags section with comprehensive explanation of private tags, including Private Creator requirements, address format (GGGGxxEE), and complete examples for standard and vendor-specific tags (GE, Siemens, Philips)
  • Updated Gear Rules link to point to current Flywheel workflow documentation

1.6.0 [2025-09-04]

Enhancements:

  • Added max array size configuration option to limit the number of DICOM files extracted into Flywheel metadata, preventing job failures for ZIP archives with many DICOMs

1.5.9 [2025-08-04]

Maintenance:

  • Removed typed-ast dependency

1.5.8 [2025-07-07]

Fixes:

  • Patched mne library to resolve file access permission issues with EEGLAB files on runc engine by using effective_ids=True in os.access(fname, os.R_OK) call in mne/utils/check.py

Maintenance:

  • Migrated from poetry to uv for dependency management
  • Updated python from 3.11.12 to 3.11.13
  • Resolved HIGH and CRITICAL vulnerabilities

1.5.7 [2025-06-13]

Maintenance:

  • Fixed trailing whitespace and missing newlines throughout the codebase
  • Added eolfix pre-commit hook to enforce consistent line endings

1.5.6 [2025-06-09]

Maintenance:

  • Upgraded python from 3.10 to 3.11
  • Updated fw-file from ^3.3 to ^4.1
  • Updated pytest from ^6 to ^8
  • Added mkdocs-autorefs dependency for improved documentation cross-referencing
  • Removed vulnerable setuptools-65.5.1.dist-info from base image
  • Migrated to multi-stage Dockerfile with separate base, build, dev, and production stages
  • Switched to uv pip for faster dependency installation
  • Added requirements-dev.txt to .dockerignore exception list
  • Configured gear to run as non-root user (flywheel, uid/gid 31337)
  • Updated CI reference from commit SHA to sse branch
  • Added VALIDATE_CLASSIFICATION flag to CI configuration
  • Reordered pre-commit hooks to run ruff_format before ruff
  • Updated environment variables in manifest to reflect new Python version (3.11.12) and build metadata
  • Applied code formatting improvements per ruff linter (parenthesized context managers, spacing)

Documentation:

  • Updated hyperlink text from "here" to descriptive phrases for better accessibility

1.5.5 [2025-03-25]

Fixes:

  • Fixed regular expression for extracting private DICOM tags with non-numeric hexadecimal characters
  • Fixed handling of pydicom MultiValue objects to prevent gear failures during logging
  • Skip derived metadata extraction for DICOM files without Image Plane IOD module

Documentation:

  • Added documentation for P15E private tags configuration option
  • Updated Gear Rules documentation link to current Flywheel documentation URL

1.5.4 [2024-10-01]

Maintenance:

  • Removed DOCKER_IMAGE variable from .gitlab-ci.yml configuration

1.5.3 [2024-09-20]

Maintenance:

  • Upgraded python from 3.10.5 to 3.11.10
  • Updated pip from 22.0.4 to 24.0
  • Updated setuptools from 58.1.0 to 65.5.1
  • Migrated from poetry to uv for dependency management
  • Streamlined environment variables in manifest

1.5.2 [2024-09-16]

Enhancements:

  • Updated behavior for PerFrameFunctionalGroupsSequence to retain only the first frame in multiframe DICOM images to prevent metadata space issues

Documentation:

  • Added documentation for multiframe DICOM PerFrameFunctionalGroupsSequence handling

1.5.1 [2024-09-03]

Fixes:

  • Fixed test assertions to use is instead of == when comparing with SystemExit type

Maintenance:

  • Updated base Docker image from flywheel/python:main.a30a2597 to flywheel/python:3.11
  • Updated minimum Python version requirement from 3.9 to 3.10
  • Updated flywheel-sdk from ^17 to ^18
  • Updated nibabel from ^3.2.1 to ^5.2
  • Pinned mne to >=1.5.1, <1.8 to avoid breaking changes in mne 1.8
  • Updated development dependencies: ipython from ^7 to ^8
  • Added griffe ^0.49 as development dependency
  • Cleaned up .gitlab-ci.yml by removing commented variables and updating DOCKER_IMAGE variable
  • Simplified ruff hook arguments in .pre-commit-config.yaml by removing E501 ignore

Documentation:

  • Fixed typos and improved clarity throughout documentation (e.g., "Dicom" to "DICOM", "ammending" to "amending")
  • Updated gear manifest to use "Any" for organ and species fields instead of specific values
  • Added link to Flywheel Gear Rules documentation in usages.md

1.5.0 [2024-07-25]

Enhancements:

  • Added support for zipped PAR/REC files
  • Added p15E private tags config option to import P15E-compliant private tags
  • Added output_configuration to manifest to enforce file version matching

Maintenance:

  • Updated .gitlab-ci.yml to reference flywheel-io/tools/etc/qa-ci project
  • Updated .pre-commit-config.yaml hooks to 6d3c8693bf6c7dc6144942e37047f074c0e34a4f
  • Added additional pre-commit hooks: hadolint, jsonlint, linkcheck, markdownlint, ruff_format, ruff_tests
  • Updated ruff hook arguments to include --config pyproject.toml parameter
  • Updated fw-file from ^3.3.1 to ^3.3.5
  • Changed manifest.json command from poetry run python run.py to python run.py
  • Changed api-key input read-only property from true to false

Documentation:

  • Added comprehensive mkdocs documentation site with overview, details, usage, FAQ, and release notes pages
  • Reformatted README.md to provide high-level summary with link to full documentation
  • Reformatted CONTRIBUTING.md to improve markdown formatting and line length consistency
  • Added custom footer override template for documentation navigation

1.4.1 [2023-12-02]

Enhancements:

  • Added support for EEG file formats (BrainVision, EDF, BDF, EEGLAB)

Maintenance:

  • Replaced black and isort with ruff formatter in pre-commit configuration
  • Updated fw-file from 3.0.1 to 3.3.1
  • Updated flywheel-sdk from 16 to 17
  • Added mne dependency at version 1.5.1
  • Removed unused imports (re from ge.py, load_par from philips.py)

Fixes:

  • Fixed f-string formatting issues by removing unnecessary f-string prefixes in bruker.py, dicom.py, and main.py
  • Fixed unused variable assignments in geometry.py (major_dim_list, location)
  • Fixed unused exception variable in dicom.py
  • Improved variable naming to avoid shadowing built-ins (renamed t to at in dicom.py)

1.4.0 [2023-10-18]

Enhancements:

  • Added PhaseCount and PhaseIndexes to DICOM array for detecting multiple acquisition phases in multi-frame scans
  • Added PhaseCount and PhaseIndexes to derived metadata with automatic detection based on slice geometry (orientation and location changes)

Fixes:

  • Only writes SliceLocation to derived metadata if it doesn't already exist in dicom_array
  • Improved validation to check both ImageOrientationPatient and ImagePositionPatient in geometry validation

Maintenance:

  • Updated fw-file from ^3 to ^3.0.1

Documentation:

  • Added PhaseCount and PhaseIndexes to README documentation for both DICOM array tags and derived metadata fields

1.3.0 [2023-09-20]

Enhancements:

  • Updated fw-file from 1.3.3 to 3.0.0
  • Added deny by VR type feature to exclude binary objects (OB, OW, UN, UT) from metadata extraction
  • Populated dicom_array for multiframe DICOM files
  • Added new derived attributes under file.info.header.derived:
    • SliceAxis: 3D unit vector connecting slice origins
    • SpacingBetweenSlices: Scalar spacing between slices (empty if non-uniform)
    • fov: Field of view as 3D span in patient coordinates (empty if non-uniform)
    • affine: 4x4 affine transform to convert grid to patient coordinates (empty if non-uniform)
  • Extended derived metadata calculation to apply to all IODs with image plane module, not just CT modality
  • Added SliceLocation to derived metadata for scalar locations along slice axis

Fixes:

  • Fixed metadata extraction to use read_context instead of deprecated tracker
  • Fixed issue where dicom_array was not populated for multiframe DICOM files
  • Improved validation of ImagePositionPatient to handle None values

Maintenance:

  • Migrated CI configuration from flywheel-io/tools/etc/qa-ci to flywheel-io/scientific-solutions/etc/sse-qa-ci
  • Updated .pre-commit-config.yaml hooks to use gearcheck, poetry_export, docker_build, yamllint, black, isort, and pytest
  • Added .dockerignore file to optimize Docker build context
  • Removed .env file from repository
  • Updated Dockerfile to use requirements.txt instead of poetry for dependency installation
  • Changed Dockerfile entrypoint from poetry run python to direct python execution
  • Set pytest coverage requirement to 94% in .gitlab-ci.yml
  • Enabled security scans in CI configuration
  • Added pre-commit as dev dependency
  • Removed several linting tools from dev dependencies (black, isort, pylint, pycodestyle, pydocstyle, mypy)
  • Updated repository source URL in manifest.json
  • Added geometry and transform modules for 3D coordinate calculations
  • Updated test assets with new DICOM files for multiframe testing

Documentation:

  • Updated README to clarify that dicom_array tags apply to both zip archives and multiframe files
  • Added documentation for extracting additional tags via project-level custom information
  • Added documentation for new derived fields in file.info.header.derived

1.2.5 [2022-06-27]

Enhancements:

  • Added progress logging for DICOM collection inspection with percentage updates every ~10%
  • Enhanced logging throughout metadata extraction workflow to track processing stages
  • Improved QC metadata structure using the new context.metadata.add_qc_result API
  • Added show-job flag to manifest to display job details in Flywheel UI

Fixes:

  • Fixed handling of deprecation warnings from nibabel.nicom import

Maintenance:

  • Updated base image from flywheel/python:main.cb746d1d to flywheel/python:main.a30a2597 (python 3.9.123.10.5)
  • Updated flywheel-gear-toolkit from ^0.5 to ^0.6 and migrated to new metadata API methods
  • Added explicit flywheel-sdk ^16.0.0 dependency
  • Optimized Dockerfile layer caching by restructuring dependency installation
  • Refactored metadata creation to use context.metadata.update_file() and context.metadata.update_container() instead of deprecated methods

Documentation:

  • Expanded gear description in manifest to include supported file formats

1.2.4 [2022-05-16]

Fixes:

  • Fixed crash when calculating derived metadata for a single DICOM input file without a collection

1.2.3 [2022-05-11]

Fixes:

  • Fixed gear failure on metadata validation errors by setting fail_on_validation=False in GearToolkitContext

1.2.2 [2022-05-10]

Fixes:

  • Fixed remove_empty_values() function to properly handle pydicom.tag.BaseTag objects instead of incorrectly removing them as empty values

Maintenance:

  • Migrated CI/CD pipeline from poetry-pre-commit.yml to gears.yml template
  • Updated .pre-commit-config.yaml to use qa-ci hooks from flywheel-io/tools/etc/qa-ci
  • Changed base Docker image from python:3.9-slim to flywheel/python:main.cb746d1d
  • Moved fw-file from flywheel-gear-toolkit extras to direct dependency (^1.3.3)
  • Increased test coverage requirement from 93% to 95%
  • Removed tests/Dockerfile (test container configuration now handled by CI templates)
  • Removed pydicom config setting for fix_VR_mismatch

Documentation:

  • Improved formatting and consistency in CONTRIBUTING.md and README.md
  • Added markdown link check disable comment in util.py

1.2.1 [2022-03-16]

Fixes:

  • Fixed incorrect pydicom configuration attribute from fix_vr_mismatch to fix_VR_mismatch
  • Added modality field extraction from PAR/REC file headers with fallback to MR when not present

1.2.0 [2022-01-07]

Enhancements:

  • Added support for GE PFILE format
  • Added support for Philips PAR/REC files

Maintenance:

  • Increased test coverage threshold from 92 to 93
  • Updated mypy from 0.790 to 0.910
  • Added typed-ast>=1.5.0 dependency
  • Decompressed test DICOM files (ge_sample_with_pdb.dcm and siemens_with_csa.dcm)

1.1.0 [2021-10-25]

Enhancements:

  • Added support for Bruker ParaVision files (.pv5.zip, .pv6.zip)
  • Added derived metadata computation under file.info.header.derived, including ScanCoverage, MaxSliceLocation, and MinSliceLocation for CT modality DICOM files
  • Added new configuration option derived metadata (default: true) to control generation of derived metadata

Fixes:

  • Lowered code coverage requirement from 95% to 92%

Maintenance:

  • Upgraded python from 3.8 to 3.9
  • Updated flywheel-gear-toolkit from 0.4.1 to ^0.5
  • Added gcc to Dockerfile build dependencies
  • Added pytz>=2021.3 dependency
  • Moved decode() utility function to shared util.py module for reuse across file type parsers

Documentation:

  • Updated README with ParaVision format support and new configuration options
  • Renamed configuration option from Siemens CSA to siemens CSA with improved description
  • Added .idea to .gitignore for JetBrains IDEs

1.0.3 [2021-09-28]

Enhancements:

  • Added support for NIfTI file metadata extraction

Fixes:

  • Fixed session age inference when timezone is set for AcquisitionDateTime in fw-file
  • Fixed handling of non-UTF-8 decodable bytes in NIfTI header fields by converting to hex representation

Maintenance:

  • Updated flywheel-gear-toolkit to 0.4.1 with fw-file and sdk extras
  • Migrated from separate fw-file dependency to using flywheel-gear-toolkit extras
  • Updated import from fw_file.ptd.PTD to fw_file.siemens.PTDFile
  • Added DiffusionBValue and DiffusionGradientOrientation to DICOM array tags
  • Refactored NIfTI byte decoding logic into dedicated decode() function
  • Updated gear name from "File metadata import" to "File metadata importer" in README

1.0.2 [2021-06-04]

Fixes:

  • Converted NaN value parsed from NIfTI header to None

Maintenance:

  • Updated flywheel-gear-toolkit from ^0.2 to ^0.3

1.0.1 [2021-05-28]

Maintenance:

  • Updated Docker image tag in manifest from 0.3.0 to 1.0.1

1.0.0 [2021-05-27]

Enhancements:

  • Added support for NIfTI file format processing
  • Added support for PTD (Siemens proprietary) file format
  • Added support for config option for tag customization
  • Improved DICOM file type detection with automatic suffix-based type determination

Fixes:

  • Fixed exception handling when Modality field is undefined in DICOM files
  • Fixed handling of bytes extracted from file headers in flywheel-gear-toolkit
  • Fixed metadata extraction by using get_meta() method instead of direct meta property access
  • Added error handling for ValueError during DICOM collection extraction

Maintenance:

  • Updated fw-file dependency from ^0.3 to ^0.6
  • Restructured repository by moving file type handlers into files/ subdirectory for better organization
  • Improved zip archive detection using zipfile.is_zipfile() instead of string suffix matching
  • Removed redundant null checks in DICOM header processing functions
  • Removed tracking events for implicit VR inference from DICOM files to reduce noise in quality control metrics
  • Added test assets for zero-byte DICOM files and NIfTI format validation

0.3.0 [2021-05-18]

Enhancements:

  • Added tag configuration option to specify a custom tag for the input file upon run completion (default: file-metadata-importer)

Fixes:

  • Added exception handling for PTD preamble decoding errors when preamble cannot be decoded as UTF-8
  • Added modality sanitization to remove invalid characters and replace them with hyphens
  • Fixed handling of modality when undefined or containing invalid characters

Maintenance:

  • Updated flywheel-gear-toolkit dependency from ^0.1.3 to ^0.2
  • Migrated to add_qc_info utility function from flywheel-gear-toolkit
  • Updated test cases to handle string representations of boolean values in array tag configuration

Documentation:

  • Updated README configuration section with improved formatting for default values
  • Added new tag configuration option documentation in README

0.2.2 [2021-04-05]

Fixes:

  • Added null check for empty DICOM objects in get_preamble_dicom_header() and get_core_dicom_header() to prevent errors when processing invalid or empty DICOM files

Maintenance:

  • Added test coverage for handling empty DICOM objects in header extraction functions

0.2.1 [2021-03-19]

Fixes:

  • Fixed subject metadata propagation to session container for compatibility with Flywheel platform versions 14.x.x and 15.x.x

0.2.0 [2021-03-17]

Enhancements:

  • Added support for PTD (Siemens PT format) file type processing with header extraction
  • Added support for DICOM Zip Archive files
  • Added automatic file type detection based on file suffix when file type is not explicitly specified
  • Added developer documentation for adding new file types to CONTRIBUTING.md

Fixes:

  • Fixed get_file_qc() to accept optional file_path parameter for accurate filename tracking

Maintenance:

  • Updated fw-file dependency from ^0.2.0 to ^0.3
  • Refactored run() to extract project tag update logic into separate project_tag_update() helper function

Documentation:

  • Updated README.md to document PTD file type support and storage location (file.info.header.ptd)
  • Updated README.md to clarify DICOM Zip Archive support

0.1.0 [2021-03-14]

Enhancements:

  • Added DICOM file metadata extraction and import to Flywheel
  • Added support for Siemens CSA header parsing with optional extraction
  • Added support for processing DICOM archives (zip files) with bulk tag extraction stored in file.info.header.dicom_array
  • Added configurable tag allow/deny lists via project-level custom information at project.info.context.header.dicom
  • Added automatic metadata validation and quality control tracking with DICOM decoding event traces

Maintenance:

  • Initial release with python ^3.8 support
  • Added flywheel-gear-toolkit ^0.1.3 dependency for Flywheel integration
  • Added fw-file ^0.2.0 for file handling
  • Added nibabel ^3.2.1 for neuroimaging format support
  • Added ruamel.yaml ^0.16.13 for YAML processing
  • Added poetry 1.1.2 for dependency management
  • Added CI/CD pipeline with pre-commit hooks for code quality (black, isort, pytest)

Documentation:

  • Added README with usage instructions and DICOM header structure documentation
  • Added CONTRIBUTING guide with dependency management and testing instructions
  • Added MIT license