Skip to content

Release Notes

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