Skip to main content

RSNA DICOM Anonymizer (V19)

Tests

Version 19.0.5 is the current V19 release on the master branch and PyPI. Requires Python 3.11 or 3.12 with tkinter built in. Python 3.13 is not supported.

Install

You need three things: uv, a Python 3.11/3.12 environment that includes tkinter, and (on macOS, for AI Features) libomp.

1. Install uv

uv installs Python, creates the venv, and pulls large AI dependencies.

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex

Confirm uv is on your PATH:

uv --version

2. Install Python with tkinter, then the app

The desktop UI needs tkinter. Install a Python that ships with it, then create the venv and install 19.0.5:

Platform Ensure tkinter is available
Windows Install Python 3.11 or 3.12 from python.org with Add to PATH and tcl/tk and IDLE checked
macOS Prefer uv python install 3.12 (Tk 9.x). Or Homebrew: brew install python@3.12 python-tk@3.12
Linux sudo apt install python3.12 python3.12-tk python3.12-venv (or the matching python3.11 / python3.11-tk / python3.11-venv packages)
uv python install 3.12                     # or: 3.11
uv venv rsna-anonymizer --python 3.12      # or: --python 3.11
source rsna-anonymizer/bin/activate        # Windows: rsna-anonymizer\Scripts\activate

uv pip install rsna-anonymizer             # version 19.0.5

3. Verify the install

python --version          # 3.11.x or 3.12.x
python -m tkinter         # a small Tk window must open — required for the UI
rsna-anonymizer --version # should report 19.0.5

If python -m tkinter fails, the venv’s Python was built without Tk: fix the platform step above, recreate the venv, and reinstall.

4. macOS only — OpenMP for AI Features

On macOS, AI Features that use TotalSegmentator / Harmonize contrast analysis need the C++ OpenMP runtime libomp. Install it once with Homebrew before you download or run those models:

brew install libomp

Without libomp, Harmonize contrast can crash (for example exit code 139 / XGBoost OpenMP errors). Face blur and other AI tools that depend on the same stack can be affected. Linux and Windows normally do not need this step.

5. Run

rsna-anonymizer

On first launch, use the Welcome screen AI Features button to download models and accept the face license when needed.

Run (modes)

rsna-anonymizer
rsna-anonymizer -c path/to/ProjectModel.json   # headless DICOM receive
rsna-anonymizer -c path/to/ProjectModel.json --ai-batch path/to/AiBatchConfig.json --ai-batch-run

Headless AI batch uses a companion AiBatchConfig.json (algorithms, modes, study selection, CT/MR resolution). OCR whitelists remain under the project whitelists/ directory.

Upgrade

source rsna-anonymizer/bin/activate
uv pip install --upgrade rsna-anonymizer

See CHANGELOG for release notes.

Documentation

Clinician user manual (MkDocs Material, English). Build locally: uv sync --group docs && uv run mkdocs serve. Maintainer notes: docs/README.md.

Development

git clone https://github.com/RSNA/anonymizer.git
cd anonymizer
git checkout V19          # for V19 work
uv sync --group dev
uv run pre-commit install
uv run rsna-anonymizer

macOS AI Features: brew install libomp (OpenMP runtime for Harmonize contrast / TotalSegmentator).

Hot-reload UI work: uv run python src/prototyping/dev_anonymizer.py (optional watchexec; falls back to watchfiles).

Experimental CLIs live under src/prototyping/.

Linting (Ruff)

Config: [tool.ruff] in pyproject.toml (scope: src/anonymizer/).

uv run ruff check ./src/anonymizer/
uv run ruff check ./src/anonymizer/ --fix   # safe auto-fixes; not used in CI
uv run pre-commit run ruff-check --all-files

Unit testing

Layout mirrors source: tests/controller/ → src/anonymizer/controller/. Prototyping tests: src/prototyping/*/tests/. See tests/README.md.

uv run pytest tests/controller/tseg -q
uv run pytest tests/controller tests/model -q   # CI suite (no view)
uv run pytest src/prototyping -q
uv run pytest -q                                # full local suite

Optional: tests/controller/.env with AWS_USERNAME / AWS_PASSWORD for S3 upload tests. Markers are documented in pyproject.toml and tests/README.md.

Translations

Languages: en_US, de, es, fr. Install gettext (brew install gettext, choco install gettext, or apt install gettext), then:

cd src/anonymizer/assets/locales/
./extract_translations.sh
./update_translations.sh

Software architecture

Class diagram

User manual (MkDocs)

uv sync --group docs
uv run mkdocs serve          # http://127.0.0.1:8000
uv run mkdocs build --strict

Metadata

Release files for rsna-anonymizer 19.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rsna-anonymizer 19.0.5
File Size Uploaded
rsna_anonymizer-19.0.5.tar.gz 39.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for rsna-anonymizer 19.0.5
File Interpreter ABI Platform
rsna_anonymizer-19.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 50.4 MB

Release files / rsna_anonymizer-19.0.5.tar.gz

Download URL rsna_anonymizer-19.0.5.tar.gz
Size 39.1 MB
Tags Source
SHA-256 checksum
How to use checksums
985115d07ac1e7da17f7896be8c9b6de6827c16b9c9c6ce974b67cb381eaadcd
BLAKE2b-256 checksum
How to use checksums
bacb57be1a13767a5327617beac1176d323f0e439a99dc490619b4ff808cab60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / rsna_anonymizer-19.0.5-py3-none-any.whl

Download URL rsna_anonymizer-19.0.5-py3-none-any.whl
Size 11.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
e173054e7b40471a616948cf0e5773c65f976534889e3764433fba2aa55374a3
BLAKE2b-256 checksum
How to use checksums
c1ba332da3783fed3d8b34c851a52b8e29fa1c203aeac5a209e466b2a423ffc4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release history Release notifications | RSS feed

19.0.9

2 release files

19.0.8

2 release files

19.0.7

2 release files

This release

19.0.5 This release

2 release files

18.0.7

2 release files

18.0.6

2 release files

18.0.3

2 release files

18.0.2

2 release files

17.4.1

2 release files

17.3.9

2 release files

17.3.8

2 release files

17.3.7

2 release files

17.3.6

2 release files

17.3.4

2 release files

17.3.2

2 release files

17.3.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page