This release is a pre-release and may not be stable for production use.
RSNA DICOM Anonymizer V18.0
Install Python with tkinter (GUI library)
Windows
- Download Python 3.12 from python.org (pytorch does not currently support 3.13)
- Run installer
- Select "Add python.exe to PATH"
- Enable "tcl/tk and IDLE"
macOS
- Install Homebrew if not present: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)'
- Install Python 3.12 with Tcl/Tk:
brew install python@3.12
brew install tcl-tk
Linux (Ubuntu/Debian)
- Install the required packages:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.12 python3.12-tk
Verify Installation
python --version
python -m tkinter
If python + tkinter has been installed successfully a small GUI window should open
Install rsna-anonymizer package from PyPI
Stable (V18):
pip install rsna-anonymizer
V19 development pre-release (requires --pre; does not replace the stable install above):
pip install --pre rsna-anonymizer
pip install --pre "rsna-anonymizer[tseg]" # optional TotalSegmentator extras
Execution
rsna-anonymizer
Headless Mode
You need to provide a path to a project configuration to run in headless mode
rsna-anonymizer -c path/to/ProjectModel.json
Upgrading
pip install --upgrade rsna-anonymizer
Documentation
Development
Setup
- Setup python environment (3.12) which includes Tkinter, recommend using pyenv with MacOS & Linux
- Ensure python is installed with Tkinter:
python -m tkinter, a small GUI window should open - Install uv:
curl -LsSf https://astral.sh/uv/install.sh | sh - Clone repository
- Create virtual environment and install dependencies:
uv sync --group dev - Optional — TotalSegmentator anatomy analysis for Harmonize:
uv sync --extra tseg --group dev - Enable Git pre-commit hooks (Ruff lint, same rules as CI):
uv run pre-commit install
For hot-reload during UI work: uv run python scripts/dev_anonymizer.py (requires watchexec).
Hooks run on every git commit, including commits from the VS Code / Cursor Source Control UI. To skip once: git commit --no-verify.
Linting (Ruff)
Configuration: [tool.ruff] in pyproject.toml (scope: src/anonymizer/).
uv run ruff check ./src/anonymizer/
uv run ruff check ./src/anonymizer/ --fix # safe auto-fixes only; not run in CI
uv run pre-commit run ruff-check --all-files
CI runs ruff check without --fix. Pre-commit uses the same check on staged Python files under src/anonymizer/.
Unit Testing
Test layout mirrors source: tests/controller/ → src/anonymizer/controller/, prototyping tests live under src/prototyping/*/tests/. See tests/README.md.
uv sync --extra tseg --group dev
uv run pytest tests/controller/tseg -q
uv run pytest src/prototyping -q # local only; excluded from CI
uv run pytest -q # CI suite with coverage (see pyproject.toml)
Optional: create tests/controller/.env with AWS_USERNAME and AWS_PASSWORD for S3 upload tests.
Markers (tseg_integration, dicom_integration, rsna_local_data) are documented in pyproject.toml and tests/README.md.
Translations
Languages for 17.3: en_US, de, es, fr
Ensure gettext is installed:
- Windows: Install instructions or
choco install gettext - Mac OSX:
brew install gettext - Linux:
sudo apt-get install gettext
Extracting messages from source files:
cd src/anonymizer/assets/locales/ ./extract_translations.sh
Updating translations:
cd src/anonymizer/assets/locales/ ./update_translations.sh
Software Architecture
Full class diagram on github here
Metadata
Release files for rsna-anonymizer 19.0.0.dev1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rsna_anonymizer-19.0.0.dev1.tar.gz | 18.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rsna_anonymizer-19.0.0.dev1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.0 MB
Release files / rsna_anonymizer-19.0.0.dev1.tar.gz
| Download URL | rsna_anonymizer-19.0.0.dev1.tar.gz |
|---|---|
| Size | 18.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d081726b59a546f73f0cfc45902b4de13552c5cb68a3238b637d129f8afc2c4
|
|
BLAKE2b-256 checksum How to use checksums |
313d0c69a8213a34dc4c7ad9e0689d086b7bd0b817d5f876af50f2ab37fcccd2
|
| 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 Aug 2, 2026.
Transparency logRelease files / rsna_anonymizer-19.0.0.dev1-py3-none-any.whl
| Download URL | rsna_anonymizer-19.0.0.dev1-py3-none-any.whl |
|---|---|
| Size | 11.0 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b3015edc885c5df948a69c40219f2d072ea9a26ca400a2c874b6d264759f30b7
|
|
BLAKE2b-256 checksum How to use checksums |
ef318bf6e36c89c473e1da0d363069f677f277bac4fe8b7317526d2204a5672b
|
| 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 Aug 2, 2026.
Transparency log