ADIT (Automated DICOM Transfer) is a Swiss army knife to exchange DICOM data between various systems by using a convenient web frontend.
The detailed documentation of ADIT can be found at https://openradx.github.io/adit/.
Developed at
![]() CCIBonn.ai |
in Partnership with
![]() Universitätsklinikum Bonn |
![]() Thoraxklinik Heidelberg |
![]() Universitätsklinikum Heidelberg |
Important
ADIT is currently in early beta stage. While we are actively building and refining its features, users should anticipate ongoing updates and potential breaking changes as the platform evolves. We appreciate your understanding and welcome feedback to help us shape the future of ADIT.
Many existing PACS servers, while robust, rely on older, specialized DICOM protocols (DIMSE) and often have web-based access (like DICOMweb) either not implemented or explicitly turned off for security reasons. This creates a significant hurdle for modern applications, especially those built for the web or requiring automated, scriptable access.
ADIT acts as a translation layer between modern web APIs and traditional DICOM protocols:
sequenceDiagram
participant Client as Your Script/App
participant ADIT as ADIT Server
participant PACS as PACS Server
Client->>ADIT: HTTP GET .../qidors/studies?Modality=CT
Note over ADIT: Receives DICOMweb/REST request
Note over ADIT: Converts REST → DIMSE
ADIT->>PACS: C-FIND (DIMSE Protocol)
PACS-->>ADIT: DICOM Response
Note over ADIT: Converts DIMSE → REST
ADIT-->>Client: HTTP 200 + JSON Response
- Transfer DICOM data between DICOM-compatible servers
- Download DICOM data to a specified folder
- Pseudonymize DICOM data on the fly
- Specify a trial name for the transferred data (stored in the DICOM header)
- Easy web interface to select which studies to transfer or download
- Upload a batch file to make multiple queries on a DICOM server
- Upload a batch file to transfer or download multiple studies
- Mass transfer of large volumes of imaging data over a date range using include and exclude filters
- Convert downloaded DICOM series to NIfTI
- Protect downloaded archives with a password
- Explore the DICOM data of a server interactively (DICOM Explorer)
- A DICOMweb API (QIDO-RS, WADO-RS, STOW-RS) and a Python client to query, retrieve and store DICOM data programmatically
- Priority-based processing of jobs (urgent jobs first) and scalable worker replicas to control the load on a PACS
- Fine-grained control of what users can or can't do and what they can access
- Help modals with detailed information for the most important features
- An upload portal to upload DICOM images through a web interface that can be pseudonymized on the client (before the transfer happens)
ADIT Client is a Python library that allows you to programmatically query, retrieve, and upload DICOM images from a Python script. It communicates with DICOM servers, such as PACS systems, via an ADIT server.
The backend of ADIT is built using the Django web framework, and data is stored in a PostgreSQL database. For DICOM transfer pynetdicom of the pydicom project is used.
A transfer job contains one or more transfer tasks that describe what studies or series to transfer. A task contains how to transfer it (source, destination, pseudonym). Tasks are queued with Procrastinate (a PostgreSQL-backed task queue) and processed by background workers running in their own Docker containers. There are three worker services, each consuming one queue: default_worker (default queue, e.g. periodic maintenance), dicom_worker (dicom queue, selective transfers, batch queries and batch transfers) and mass_transfer_worker (mass_transfer queue). The number of DICOM and mass transfer workers can be scaled with the DICOM_WORKER_REPLICAS and MASS_TRANSFER_WORKER_REPLICAS settings.
When the DICOM data to transfer needs to be modified (e.g. pseudonymized) it is downloaded temporarily by the worker, then transformed and uploaded to the destination server resp. moved to the destination folder.
Downloading data from a DICOM server can done by using a DIMSE operation or by using DICOMweb REST calls. When using DIMSE operations C-GET is prioritized over C-MOVE as a worker can fetch the DICOM data directly from the server. When downloading data using a C-MOVE operation, ADIT commands the source DICOM server to send the data to a C-STORE SCP server of ADIT running in a separate container (Receiver) that receives the DICOM data and sends it back to the worker using a TCP socket connection (FileTransmitServer in the receiver, FileTransmitClient in the worker).
ADIT is intended for research purposes only and is not a certified medical device. It should not be used for clinical diagnostics, treatment, or any medical applications. Use this software at your own risk. The developers and contributors are not liable for any outcomes resulting from its use.
AGPL 3.0 or later







