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
ffmpegintegration
Fixes:
- Replaced
assertwith properRuntimeErrorexception incompute_axis_from_pair()for point dimension validation
Maintenance:
- Migrated from
flywheel-gear-toolkittofw-gearlibrary - Updated base image to
flywheel/python:3.13-wolfi-build(Chainguard Wolfi) - Upgraded
pythonfrom3.11to3.13 - Updated
fw-fileminimum version from4.1to4.2.0 - Added
ffmpegiodependency (>=0.11.1, <0.12.0) - Simplified
Dockerfilebuild process by consolidating stages and reducing layer count - Removed obsolete
setuptoolsvulnerability 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 sizeconfiguration 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-astdependency
1.5.8 [2025-07-07]
Fixes:
- Patched
mnelibrary to resolve file access permission issues with EEGLAB files on runc engine by usingeffective_ids=Trueinos.access(fname, os.R_OK)call inmne/utils/check.py
Maintenance:
- Migrated from
poetrytouvfor dependency management - Updated
pythonfrom3.11.12to3.11.13 - Resolved HIGH and CRITICAL vulnerabilities
1.5.7 [2025-06-13]
Maintenance:
- Fixed trailing whitespace and missing newlines throughout the codebase
- Added
eolfixpre-commit hook to enforce consistent line endings
1.5.6 [2025-06-09]
Maintenance:
- Upgraded
pythonfrom3.10to3.11 - Updated
fw-filefrom^3.3to^4.1 - Updated
pytestfrom^6to^8 - Added
mkdocs-autorefsdependency for improved documentation cross-referencing - Removed vulnerable
setuptools-65.5.1.dist-infofrom base image - Migrated to multi-stage
Dockerfilewith separate base, build, dev, and production stages - Switched to
uv pipfor faster dependency installation - Added
requirements-dev.txtto.dockerignoreexception list - Configured gear to run as non-root user (
flywheel, uid/gid 31337) - Updated CI reference from commit SHA to
ssebranch - Added
VALIDATE_CLASSIFICATIONflag to CI configuration - Reordered pre-commit hooks to run
ruff_formatbeforeruff - Updated environment variables in manifest to reflect new Python version (
3.11.12) and build metadata - Applied code formatting improvements per
rufflinter (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
pydicomMultiValueobjects 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_IMAGEvariable from.gitlab-ci.ymlconfiguration
1.5.3 [2024-09-20]
Maintenance:
- Upgraded
pythonfrom3.10.5to3.11.10 - Updated
pipfrom22.0.4to24.0 - Updated
setuptoolsfrom58.1.0to65.5.1 - Migrated from
poetrytouvfor dependency management - Streamlined environment variables in manifest
1.5.2 [2024-09-16]
Enhancements:
- Updated behavior for
PerFrameFunctionalGroupsSequenceto retain only the first frame in multiframe DICOM images to prevent metadata space issues
Documentation:
- Added documentation for multiframe DICOM
PerFrameFunctionalGroupsSequencehandling
1.5.1 [2024-09-03]
Fixes:
- Fixed test assertions to use
isinstead of==when comparing withSystemExittype
Maintenance:
- Updated base Docker image from
flywheel/python:main.a30a2597toflywheel/python:3.11 - Updated minimum Python version requirement from
3.9to3.10 - Updated
flywheel-sdkfrom^17to^18 - Updated
nibabelfrom^3.2.1to^5.2 - Pinned
mneto>=1.5.1, <1.8to avoid breaking changes inmne1.8 - Updated development dependencies:
ipythonfrom^7to^8 - Added
griffe^0.49as development dependency - Cleaned up
.gitlab-ci.ymlby removing commented variables and updatingDOCKER_IMAGEvariable - Simplified
ruffhook arguments in.pre-commit-config.yamlby removingE501ignore
Documentation:
- Fixed typos and improved clarity throughout documentation (e.g., "Dicom" to "DICOM", "ammending" to "amending")
- Updated gear manifest to use "Any" for
organandspeciesfields 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 tagsconfig option to import P15E-compliant private tags - Added
output_configurationto manifest to enforce file version matching
Maintenance:
- Updated
.gitlab-ci.ymlto referenceflywheel-io/tools/etc/qa-ciproject - Updated
.pre-commit-config.yamlhooks to6d3c8693bf6c7dc6144942e37047f074c0e34a4f - Added additional pre-commit hooks:
hadolint,jsonlint,linkcheck,markdownlint,ruff_format,ruff_tests - Updated
ruffhook arguments to include--config pyproject.tomlparameter - Updated
fw-filefrom^3.3.1to^3.3.5 - Changed
manifest.jsoncommand frompoetry run python run.pytopython run.py - Changed
api-keyinputread-onlyproperty fromtruetofalse
Documentation:
- Added comprehensive
mkdocsdocumentation site with overview, details, usage, FAQ, and release notes pages - Reformatted
README.mdto provide high-level summary with link to full documentation - Reformatted
CONTRIBUTING.mdto 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
blackandisortwithruffformatter in pre-commit configuration - Updated
fw-filefrom3.0.1to3.3.1 - Updated
flywheel-sdkfrom16to17 - Added
mnedependency at version1.5.1 - Removed unused imports (
refromge.py,load_parfromphilips.py)
Fixes:
- Fixed f-string formatting issues by removing unnecessary f-string prefixes in
bruker.py,dicom.py, andmain.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
ttoatindicom.py)
1.4.0 [2023-10-18]
Enhancements:
- Added
PhaseCountandPhaseIndexesto DICOM array for detecting multiple acquisition phases in multi-frame scans - Added
PhaseCountandPhaseIndexesto derived metadata with automatic detection based on slice geometry (orientation and location changes)
Fixes:
- Only writes
SliceLocationto derived metadata if it doesn't already exist indicom_array - Improved validation to check both
ImageOrientationPatientandImagePositionPatientin geometry validation
Maintenance:
- Updated
fw-filefrom^3to^3.0.1
Documentation:
- Added
PhaseCountandPhaseIndexesto README documentation for both DICOM array tags and derived metadata fields
1.3.0 [2023-09-20]
Enhancements:
- Updated
fw-filefrom1.3.3to3.0.0 - Added deny by VR type feature to exclude binary objects (
OB,OW,UN,UT) from metadata extraction - Populated
dicom_arrayfor multiframe DICOM files - Added new derived attributes under
file.info.header.derived:SliceAxis: 3D unit vector connecting slice originsSpacingBetweenSlices: 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
SliceLocationto derived metadata for scalar locations along slice axis
Fixes:
- Fixed metadata extraction to use
read_contextinstead of deprecatedtracker - Fixed issue where
dicom_arraywas not populated for multiframe DICOM files - Improved validation of
ImagePositionPatientto handleNonevalues
Maintenance:
- Migrated CI configuration from
flywheel-io/tools/etc/qa-citoflywheel-io/scientific-solutions/etc/sse-qa-ci - Updated
.pre-commit-config.yamlhooks to usegearcheck,poetry_export,docker_build,yamllint,black,isort, andpytest - Added
.dockerignorefile to optimize Docker build context - Removed
.envfile from repository - Updated
Dockerfileto userequirements.txtinstead ofpoetryfor dependency installation - Changed
Dockerfileentrypoint frompoetry run pythonto directpythonexecution - Set
pytestcoverage requirement to 94% in.gitlab-ci.yml - Enabled security scans in CI configuration
- Added
pre-commitas 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_arraytags 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_resultAPI - Added
show-jobflag to manifest to display job details in Flywheel UI
Fixes:
- Fixed handling of deprecation warnings from
nibabel.nicomimport
Maintenance:
- Updated base image from
flywheel/python:main.cb746d1dtoflywheel/python:main.a30a2597(python3.9.12→3.10.5) - Updated
flywheel-gear-toolkitfrom^0.5to^0.6and migrated to new metadata API methods - Added explicit
flywheel-sdk^16.0.0dependency - Optimized
Dockerfilelayer caching by restructuring dependency installation - Refactored metadata creation to use
context.metadata.update_file()andcontext.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=FalseinGearToolkitContext
1.2.2 [2022-05-10]
Fixes:
- Fixed
remove_empty_values()function to properly handlepydicom.tag.BaseTagobjects instead of incorrectly removing them as empty values
Maintenance:
- Migrated CI/CD pipeline from
poetry-pre-commit.ymltogears.ymltemplate - Updated
.pre-commit-config.yamlto useqa-cihooks fromflywheel-io/tools/etc/qa-ci - Changed base Docker image from
python:3.9-slimtoflywheel/python:main.cb746d1d - Moved
fw-filefromflywheel-gear-toolkitextras to direct dependency (^1.3.3) - Increased test coverage requirement from
93%to95% - Removed
tests/Dockerfile(test container configuration now handled by CI templates) - Removed
pydicomconfig setting forfix_VR_mismatch
Documentation:
- Improved formatting and consistency in
CONTRIBUTING.mdandREADME.md - Added markdown link check disable comment in
util.py
1.2.1 [2022-03-16]
Fixes:
- Fixed incorrect
pydicomconfiguration attribute fromfix_vr_mismatchtofix_VR_mismatch - Added
modalityfield extraction from PAR/REC file headers with fallback toMRwhen 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
92to93 - Updated
mypyfrom0.790to0.910 - Added
typed-ast>=1.5.0dependency - Decompressed test DICOM files (
ge_sample_with_pdb.dcmandsiemens_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, includingScanCoverage,MaxSliceLocation, andMinSliceLocationfor 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%to92%
Maintenance:
- Upgraded
pythonfrom3.8to3.9 - Updated
flywheel-gear-toolkitfrom0.4.1to^0.5 - Added
gccto Dockerfile build dependencies - Added
pytz>=2021.3dependency - Moved
decode()utility function to sharedutil.pymodule for reuse across file type parsers
Documentation:
- Updated README with ParaVision format support and new configuration options
- Renamed configuration option from
Siemens CSAtosiemens CSAwith improved description - Added
.ideato.gitignorefor 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
AcquisitionDateTimeinfw-file - Fixed handling of non-UTF-8 decodable bytes in NIfTI header fields by converting to hex representation
Maintenance:
- Updated
flywheel-gear-toolkitto0.4.1withfw-fileandsdkextras - Migrated from separate
fw-filedependency to usingflywheel-gear-toolkitextras - Updated import from
fw_file.ptd.PTDtofw_file.siemens.PTDFile - Added
DiffusionBValueandDiffusionGradientOrientationto 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
NaNvalue parsed from NIfTI header toNone
Maintenance:
- Updated
flywheel-gear-toolkitfrom^0.2to^0.3
1.0.1 [2021-05-28]
Maintenance:
- Updated Docker image tag in manifest from
0.3.0to1.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
Modalityfield 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 directmetaproperty access - Added error handling for
ValueErrorduring DICOM collection extraction
Maintenance:
- Updated
fw-filedependency from^0.3to^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
tagconfiguration 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-toolkitdependency from^0.1.3to^0.2 - Migrated to
add_qc_infoutility function fromflywheel-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
tagconfiguration option documentation in README
0.2.2 [2021-04-05]
Fixes:
- Added null check for empty DICOM objects in
get_preamble_dicom_header()andget_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.xand15.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 optionalfile_pathparameter for accurate filename tracking
Maintenance:
- Updated
fw-filedependency from^0.2.0to^0.3 - Refactored
run()to extract project tag update logic into separateproject_tag_update()helper function
Documentation:
- Updated
README.mdto document PTD file type support and storage location (file.info.header.ptd) - Updated
README.mdto 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.8support - Added
flywheel-gear-toolkit^0.1.3dependency for Flywheel integration - Added
fw-file^0.2.0for file handling - Added
nibabel^3.2.1for neuroimaging format support - Added
ruamel.yaml^0.16.13for YAML processing - Added
poetry1.1.2for 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