PACS AI Logo
|
Documentation: Requirements

Get started

Requirements

Host sizing, storage, network egress and what the hospital PACS must allow.

Accounts and tools

  • Docker Engine 24.0 or newer with Docker Compose (the README states v2.24.7 or newer; check with docker compose version).
  • A Docker Hub account (to pull heartwisehub images; credentials go in DOCKER_USERNAME / DOCKER_PASSWORD when images are private). For a private registry, docker login <registry> first, then docker compose pull; skip git checkout when shipping images only.
  • A Google Cloud Platform project with Identity Platform and Firebase (one account; they are linked). The free tier is sufficient but a billing account must be attached.
  • A Mailgun account and a verified sending domain for transactional email (verification, invites, password resets).
  • A TLS certificate for nginx: customer-provided, ACME (Let's Encrypt) or an internal CA. Self-signed certificates are generated if none are supplied and browsers will warn.
  • make on the host (apt-get install make or dnf install make), jq and docker for the model deployment script, and dcmtk (echoscu, findscu, movescu) for connectivity checks.

Host sizing tiers

ComponentMinimumRecommendedProduction
OSRHEL 9 or Ubuntu 22.04RHEL 9 or Ubuntu 22.04RHEL 9 or Ubuntu 22.04
GPUNVIDIA RTX 3090 (24 GB)NVIDIA RTX 4090 (24 GB)NVIDIA A6000 (48 GB) or multi-GPU
GPU VRAM16 GB24 GB48 GB or more
System RAM64 GB128 GB256 GB
CPU8 cores16 cores32 or more cores
System storage256 GB SSD500 GB NVMe1 TB or more NVMe RAID
Network1 Gbps1 Gbps10 Gbps
CUDA / driver12.1 or newer, driver 525.x or newersamesame

The GPU tier applies only to hosts that run model containers. If inference runs on a separate GPU host, the api-pacs, Orthanc and data-store host can use the minimum CPU and RAM column without a GPU (see the no-GPU compose override in Configuration).

DICOM storage sizing

Orthanc is a rolling 24-hour cache, not an archive. Storage only needs to cover the working set in flight. Plan disk as average study size x studies per day x 1.3 (the 1.3 covers in-flight overlap at the cleanup boundary plus index overhead), then recalibrate on a two-week sample after the first install. The cache lifetime is ORTHANC_LOCAL_CACHE_EXPIRATION_IN_HOURS (default 24); if a customer needs a longer working window, for example for retries after a model failure, increase it and redo the disk math, because usage scales linearly with the window.

ModalityTypical rangePlanning valueNotes
Echo (US, TTE)100 to 500 MB300 MBCine-loop heavy; stress or pediatric echo can reach 1 GB
XA (coronary angiography)200 to 800 MB500 MBMultiple cine runs at 15 to 30 fps
CT (cardiac, CTA)300 MB to 1.5 GB800 MBThin-slice CCTA can reach 2 GB; chest-only CT closer to 200 MB

Outbound network access (HTTPS, port 443)

DestinationPurposeRequired
*.googleapis.com, securetoken.google.comFirebase authenticationYes
hub.docker.com, registry-1.docker.io, *.cloudflare.docker.comPull PACS-AI images from heartwisehubYes
huggingface.co, cdn-lfs.huggingface.coModel weights on first run or image buildYes
api.mailgun.netTransactional emailYes
*.api.mailchimp.comMarketing list syncOptional
*.docusign.net, *.docusign.comDocuSign e-signatureOptional
challenges.cloudflare.comCloudflare Turnstile bot challengeOptional (required when public registration or adaptive login is enabled)

DICOM connectivity with the hospital PACS

DirectionProtocolPortPurpose
api-pacs to remote PACSDICOM DIMSEcustomer-defined (104, 11112 or a hospital-assigned high port are common)C-FIND, C-MOVE
remote PACS to OrthancDICOM DIMSEORTHANC_DICOM_PORT (4242 in the development compose and the deployment guide)C-STORE study transfer

The customer must whitelist the api-pacs host, its AE title and IP on the source PACS. A static IP and resolvable hostname for the API endpoint are required (api.<customer-domain> A record to the host, optionally orthanc.<customer-domain> if Orthanc is exposed).

Port matrix (as shipped in the compose files)

ServiceContainer portHost bindingConsumer
nginx80 / 44380 / 443, publicBrowsers, API clients
pacs-ai viewer80not published (nginx only)nginx
api-pacs8000127.0.0.1:8000 onlynginx, local diagnostics
Orthanc REST80428042 on all interfaces, with Orthanc authentication disabledapi-pacs, study-service, smoke tests
Orthanc DIMSEORTHANC_DICOM_PORTsame port on all interfacesRemote PACS C-STORE
study-service8600not publishedapi-pacs
PostgreSQL control54325433 on all interfacesapi-pacs
PostgreSQL cardio54325434 on all interfacesstudy-service, Celery
Redis6379not publishedstudy-service, Celery, api-pacs
Elasticsearch9200not publishedapi-pacs
Kibana56015601 on all interfacesOperators
Ollama, orchestrator11434, 8585not published, optionalorchestrator, api-pacs
The deployment guide expects only nginx and the DIMSE port to be reachable from outside the host, but the shipped compose files publish Orthanc REST (8042, unauthenticated), both PostgreSQL instances (5433, 5434) and Kibana (5601) on all interfaces. Verify with ss -tlnp after install and block those ports at the host firewall or rebind them to 127.0.0.1 in a compose override. Never publish port 8000 externally as plain HTTP; the login endpoint carries passwords and must only be reached through the nginx TLS listener.
PACS AI Logo status Status Terms and Conditions Privacy Policy Privacy Impact Assessment Document (EFVP)

© 2026 HeartWise AI Lab, Montreal Heart Institute. All rights reserved.