Release Notes
1.4.3 [2026-09-09]
Enhancements:
- The gear now de-identifies zip archives created on macOS or Windows even when they contain hidden OS files (
__MACOSX/._*,.DS_Store,Thumbs.db,desktop.ini), automatically removing those entries first instead of skipping the whole archive. Real DICOM files are preserved, and an archive that contains only such hidden files still fails as it did before.
1.4.2 [2026-08-21]
Enhancements:
- Added
validateconfig option to enable or disable deid profile validation before deidentification occurs; defaults totrue.
Maintenance:
- Updated gear category from
convertertoutilityinmanifest.json. - Updated
manifest.jsondescription to more accurately reflect gear capabilities. - Updated license from
OthertoMITinmanifest.json. - Pinned
pytestdev dependency to>=9.0.3,<10.
1.4.1 [2026-06-04]
Fixes:
- Copied
deid-profileinput to a writable working directory path before use, preventing failures when the input file is read-only - Enabled
autoescape=Trueon the Jinja2Environmentindeid_template.pyto prevent template injection vulnerabilities
Maintenance:
- Migrated base image from
flywheel/python:3.12-alpinetoflywheel/python:3.12-wolfi-build - Added
chmod a+xonrun.pyand--chown=flywheel:flywheelto productionDockerfilecopy step - Updated dev dependencies:
pytestto>=9.0.3,pytest-covto>=7.1.0,pytest-mockto>=3.15.1
1.4.0 [2026-04-02]
Enhancements:
- Added support for
acquisition.*Jinja template variables in de-identification profiles, allowing acquisition container metadata to be used during de-identification. - Added clear
ValueErrorwith a descriptive message when a template references container variables (subject, session, or acquisition) but the input file does not have the corresponding parent container.
Maintenance:
- Added
_parse_acquisition_vars()helper to parseacquisition.*variable names from Jinja template files. - Extended test coverage for acquisition container variable resolution and error handling when parent containers are missing.
1.3.2 [2026-03-31]
Enhancements:
- Added
session-level-profileconfig option to support session-level de-identification profiles via CSV lookup, requiring bothsubject.labelandsession.labelcolumns. - Added support for resolving Flywheel container metadata variables (project, subject, session) directly from the de-identification template using Jinja2 syntax.
Fixes:
- Fixed
validate()to raise errors for missing required CSV columns before checking uniqueness, improving error clarity. - Fixed Jinja variable regex to avoid greedy matching across multiple template expressions on the same line.
- Fixed working directory to
context.work_dirbefore running migration to allow pixel actions to write correctly. - Fixed
output_file_metadatanull guard to prevent errors when metadata isNone.
Maintenance:
- Migrated from
flywheel-gear-toolkittofw-gearlibrary. - Updated
fw-gear-deid-exportdependency from~=1.8to~=1.10.0. - Updated
pythonruntime to3.12.13. - Replaced
flywheel-sdkdirect dependency withfw-gear[sdk]~=0.3.7. - Updated
setuptoolsconstraint to>=80.9.0,<81.0.0and addedruamel.yaml>=0.18,<1as an explicit dependency.
Documentation:
- Updated
CONTRIBUTING.mdto reflect migration frompoetrytouvfor dependency management. - Updated
README.mdto documentsession-level-profileconfig option and session-level CSV customization, including migration guidance.
1.3.1 [2025-07-15]
Maintenance:
- Migrated from
poetrytouvfor dependency management - Updated
pythonfrom3.12.10to3.12.11 - Standardized Dockerfile
FROMstatement casing to use uppercaseAS
1.3.0 [2025-06-10]
Enhancements:
- Added
delete-reasonconfiguration option to specify deletion reason when removing original files on validated instances
1.2.7 [2025-06-02]
Enhancements:
- Added file type validation to
deid-profileinput (requiressource codetype) - Added file type validation to
subject-csvinput (acceptstabular datatype)
Fixes:
- Updated
flywheel-sdkto^20.3to address compatibility issues
Maintenance:
- Updated
pythonfrom3.12.9to3.12.10 - Updated
flywheel-migrationconstraint from^13.10.2to^13.10 - Updated
pytest-covfrom^3.0.0to^6.1 - Updated
pytest-mockfrom^3.8.2to^3.14 - Updated build system requirement from
poetry>=0.12topoetry-core>=1.0.0
Documentation:
- Improved formatting of
poetryconfiguration link inCONTRIBUTING.md
1.2.6 [2025-05-29]
Maintenance:
- Pinned
setuptoolsto80.9.0and removed pre-existing versions from base image to ensure consistent dependency resolution - Changed container runtime user to
flywheel(UID/GID31337) for improved security
1.2.5 [2025-05-12]
Enhancements:
- Added support for asymmetric encryption/decryption using public and private keys via new
public_keyandprivate_keyconfiguration options - Added support for symmetric encryption/decryption using secret keys via new
secret_keyconfiguration option - Added key file retrieval functionality that downloads encryption keys from specified Flywheel paths
Fixes:
- Fixed bug in pixel scrubbing through updated
flywheel-migrationandfw-gear-deid-exportdependencies
Maintenance:
- Updated
fw-gear-deid-exportfrom^1.7.0to^1.8 - Updated
flywheel-migrationfrom13.9.1to^13.10.2 - Updated
pytestfrom^6.1to^8.3 - Updated CI reference from
maintosse - Updated pre-commit hooks reference from
maintosse - Increased pytest coverage threshold from
0to52 - Enabled
VALIDATE_CLASSIFICATIONin CI configuration - Enabled
markdownlintpre-commit hook - Removed
gitpackage installation fromDockerfile - Refactored
parse_config()to return singleRunConfigdataclass instead of tuple - Added
.markdownlint.jsoncconfiguration file - Added executable permissions to
run.pyinDockerfile - Updated
.dockerignoreto remove unnecessary test exclusions - Removed empty
__init__.pyfile
Documentation:
- Added detailed documentation for new encryption key configuration options (
private_key,public_key,secret_key) - Fixed line length formatting throughout
README.mdto meet style guidelines - Updated
CONTRIBUTING.mdformatting for consistency
1.2.4 [2025-03-11]
Fixes:
- Added
deidpackage to explicit dependencies to enable pixel-scrubbing functionality
Maintenance:
- Updated
fw-gear-deid-exportfrom1.6.1to^1.7.0 - Added
flywheel-migration13.9.1withpixelextras for enhanced DICOM deidentification support
1.2.3 [2025-02-11]
Fixes:
- Fixed metadata deidentification returning
Nonefor file info in some cases - Improved error handling and logging when deidentified file save fails
- Added validation to prevent processing when no files are deidentified
Enhancements:
- Removed automatic addition of
filenamekey to YAML config files
Documentation:
- Added note to README about requiring
flywheelsection in deid profile to preserve file metadata
Maintenance:
- Removed
add_or_replace_filenames()function and related tests
1.2.2 [2025-01-21]
Enhancements:
- Added support for deidentifying file metadata using the
flywheelsection in deid profiles - Added new
RunConfigdataclass to encapsulate gear runtime configuration
Fixes:
- Fixed issue where garbage collection could delete deidentified files by working on symbolic links instead of original files
Maintenance:
- Updated
gitfrom2.47.1-r0to2.48.1-r0 - Removed
build-basepackage fromDockerfile - Pinned
flywheel-sdkto16.19.2(downgraded from^19) - Removed
flywheel-migrationdependency - Added
fw-gear-deid-exportdependency at version1.6.1 - Refactored file deidentification logic into separate
deid_filemodule - Refactored output processing logic into
mainmodule for better separation of concerns - Moved utility functions (
create_tag,add_tags_metadata,validate_destination) fromrun.pytoutils.py - Updated
.gitignoreto exclude all files by default with specific inclusions
1.1.1 [2025-01-06]
Enhancements:
- Added gear classification metadata to manifest including function, modality, organ, species, and therapeutic area
Fixes:
- Improved conditional logic structure in
find_profile_element()function infw_gear_deid_inplace/deid_template.py
Maintenance:
- Updated
gitfrom2.46.2-r0to2.47.1-r0inDockerfile - Added
build-basepackage toDockerfile - Migrated
flywheel-migrationdependency from Git reference to PyPI version^13.9 - Removed unnecessary
returnstatement inadd_or_replace_filenames()function - Reordered imports in
run.pyto follow standard conventions - Applied code formatting improvements to test files using parenthesized context managers
1.1.0 [2024-10-10]
Enhancements:
- Added
gitpackage (2.46.2-r0) to Docker image for version control capabilities
Maintenance:
- Updated
flywheel-migrationto use git referencee737a2d4withpixelextras - Added
--no-cache-dirflag to alluv pip installcommands to reduce Docker image size - Added
requirements-dev.txtto.dockerignoreand.gitignorewhitelist - Removed
.idea/.gitignoreIDE configuration file - Relaxed
pytestversion constraint from^6.1.2to^6.1
1.0.1 [2024-10-03]
Enhancements:
- Added Docker build cache support for faster CI builds
- Added cache clearing capability to GitLab CI pipeline
Fixes:
- Replaced
subprocess.callwithshutil.movefor more reliable file operations
Maintenance:
- Migrated Dockerfile from Debian to Alpine base image
- Implemented multi-stage Docker build for optimized image size
- Updated
flywheel-sdkfrom16.16.2to^19 - Updated
Jinja2from^2.11.2to^3 - Added
rpds-py^0.20.0dependency - Removed unused
backoffimport fromrun.py - Removed explicit pinning of several dependencies (
pyaml,joblib,dotty-dict,jsonschema,MarkupSafe,fs) - Added
.idea/*to.gitignorefor IDE configuration exclusion - Updated
.dockerignoreto include all requirements files - Set
PUBLISH_POETRYtotruein GitLab CI configuration - Configured test stage to use Podman instead of Docker
- Added environment variables to manifest (
PATH,VIRTUAL_ENV,PYTHON_VERSION,PYTHONPATH,TERM) - Removed unused
gitandlibexpat1system dependencies from Dockerfile - Removed non-root user configuration from Dockerfile
1.0.0 [2024-09-27]
Enhancements:
- Added profile-based de-identification functionality for multiple file types including DICOM, JPG, PNG, TIFF, XML, JSON, CSV, TSV, and text files
- Added support for field transformations including
remove,replace-with,increment-date,increment-datetime,hash,hashuid,jitter,encrypt,decrypt, andregex-sub - Added DICOM pixel data masking based on pre-defined coordinates
- Added subject-specific de-identification configuration via CSV mapping
- Added configurable file tagging with
-PASSor-FAILsuffixes - Added option to delete original files or create versioned copies via
delete-originalconfiguration - Added debug logging configuration option
Documentation:
- Added comprehensive README with usage instructions, examples, and supported file types
- Added CONTRIBUTING guide with development setup and workflow instructions
- Added FAQ documentation file
- Added MIT LICENSE file
Maintenance:
- Added CI/CD pipeline configuration with
.gitlab-ci.yml - Added pre-commit hooks for code quality checks including
ruff,pytest,yamllint,jsonlint, andhadolint - Added
poetryfor dependency management withpython^3.12requirement - Added
flywheel-sdk==16.16.2,flywheel-gear-toolkit^0.6.18, andflywheel-migration^13.8.5dependencies - Added comprehensive test suite with unit tests for main modules, parser, and utilities
- Added
.dockerignoreand.gitignorefor build optimization - Added Dockerfile with
python3.12base image and security hardening