Policy-driven quality control and validation of DICOM metadata for research release.
Project description
dicomqc is a policy-driven, standards-aware audit framework for validating DICOM de-identification and research-release readiness.
dicomqc inspects DICOM metadata after pseudonymization or anonymization and produces redaction-safe audit evidence in JSON, CSV, and MultiQC-compatible formats.
Documentation: https://cnag-biomedical-informatics.github.io/dicomqc/
dicomqc is not an anonymizer. It never modifies original DICOM files. If it reports required changes, apply them with an external pseudonymization or anonymization tool and rerun the audit.
The intended operating mode is DICOM-in and DICOM-out: raw .dcm files are
pseudonymized into release-candidate .dcm files, and dicomqc audits those
outputs before research sharing.
Key Points
- Metadata-only DICOM scanning with
pydicom - Built-in research-release checks for direct PHI, pseudonym format, and private tags
- Redaction-safe reports that do not emit raw DICOM values
- JSON and CSV outputs for pipeline evidence
- MultiQC custom-content output with a styled example report
- Synthetic DICOM fixtures for reproducible tests and demonstrations
- Read-only design: remediation is performed by external tools such as DCMTK, Orthanc, XNAT workflows, or custom pipeline steps
- Future scope for policy DSLs, DICOM PS3.15 profiles, BIDS-oriented checks, plugin architecture, and vendor metadata fingerprinting
Installation
Install the release from PyPI in an isolated environment:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install dicomqc
dicomqc --version
From a source checkout, install the package in editable mode:
python3 -m pip install -e .
Contributors who need the test and coverage tools can install the test
optional dependency group:
python3 -m pip install -e ".[test]"
For local remediation workflows, install external DICOM tools separately. For
example, DCMTK provides dcmodify and dcmdump, but dicomqc itself remains
read-only.
Quick Start
Generate a complete synthetic DICOM demo and report bundle:
dicomqc demo
This creates dicomqc-demo/ with synthetic .dcm files, report.json,
findings.csv, and MultiQC custom-content files. The demo includes intentional
findings so users can see what a failed release gate looks like.
Run an audit on a directory of candidate release .dcm files:
dicomqc scan study/ --json report.json --csv findings.csv --multiqc
Exit codes:
0: no warnings or errors1: warnings only2: validation errors or fatal scan failure
Reports
| Output | Purpose |
|---|---|
| JSON | Full structured audit result for pipelines and archival evidence |
| CSV | One row per finding for review and spreadsheet workflows |
| MultiQC | Custom-content summary for projects that aggregate QC reports |
Render the demo with MultiQC, if installed:
multiqc dicomqc-demo/dicomqc --outdir dicomqc-demo --force
Use examples/multiqc/multiqc_config.yaml when rendering the demo report if you
want the repository logo and styling in local MultiQC output.
Documentation
The documentation site lives in docs-site/ and uses Docusaurus.
cd docs-site
npm install
npm run build
Important docs:
Prior Work
dicomqc is intended to build on and complement related work, not duplicate it. Known related projects include:
SPMIC-UoN/xnat-dicomqc: an XNAT container script for configurable tag-based QC on scan DICOMs.IUSCA/SQAN: Scalable Quality Assurance for Neuroimaging, a broader DICOM metadata ETL and QC verification system.
The initial dicomqc direction is a backend-independent, policy-driven audit framework focused on de-identification validation, release-readiness evidence, and future standards-aware rule packs.
Citation
dicomqc is early-stage research software. Until a stable release, archived DOI, or manuscript is available, cite the repository URL and the exact version or commit used in your analysis.
Author
Written by Manuel Rueda. GitHub repository: https://github.com/CNAG-Biomedical-Informatics/dicomqc.
Copyright and License
Copyright 2026 Manuel Rueda, CNAG.
dicomqc is distributed under the Apache License 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dicomqc-0.1.0.tar.gz.
File metadata
- Download URL: dicomqc-0.1.0.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b30ac4f22f553831a545260bab78654f6c739711c9624f7bd1bf4c623ee2204f
|
|
| MD5 |
f2212ce13bc6d67d1c95f3fd30d9ddcb
|
|
| BLAKE2b-256 |
88bf1349ec36a3cb13c268b8b2911e13af00cd7d489cb46b4d5b082f981d441d
|
Provenance
The following attestation bundles were made for dicomqc-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on CNAG-Biomedical-Informatics/dicomqc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dicomqc-0.1.0.tar.gz -
Subject digest:
b30ac4f22f553831a545260bab78654f6c739711c9624f7bd1bf4c623ee2204f - Sigstore transparency entry: 2201854702
- Sigstore integration time:
-
Permalink:
CNAG-Biomedical-Informatics/dicomqc@4658aa4c32349861aeff72299bb7c1b141cb63b6 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/CNAG-Biomedical-Informatics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@4658aa4c32349861aeff72299bb7c1b141cb63b6 -
Trigger Event:
release
-
Statement type:
File details
Details for the file dicomqc-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dicomqc-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22b3a63643529dda73f9399687745a59f21664a0e6b38ab3bb03b5d6491e3345
|
|
| MD5 |
810e98b25639626322bb6ad068127120
|
|
| BLAKE2b-256 |
4e3d7f1bc0f65e36cabca2b2e4f6b3b5375280f1dbbe4a9245d1c5f537fefe69
|
Provenance
The following attestation bundles were made for dicomqc-0.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on CNAG-Biomedical-Informatics/dicomqc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dicomqc-0.1.0-py3-none-any.whl -
Subject digest:
22b3a63643529dda73f9399687745a59f21664a0e6b38ab3bb03b5d6491e3345 - Sigstore transparency entry: 2201855096
- Sigstore integration time:
-
Permalink:
CNAG-Biomedical-Informatics/dicomqc@4658aa4c32349861aeff72299bb7c1b141cb63b6 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/CNAG-Biomedical-Informatics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@4658aa4c32349861aeff72299bb7c1b141cb63b6 -
Trigger Event:
release
-
Statement type: