EXACT

July 17, 2026 · View on GitHub

EXACT

Open-source platform for collaborative annotation of medical and scientific images

PyPI License: MIT DOI

EXACT — collaborative medical image annotation

EXACT (EXpert Algorithm Collaboration Tool) is a web-based platform for labeling whole slide images, 3D volumes, DICOM series, video, and standard raster images — built for multidisciplinary research teams that need version control, AI-assisted workflows, and a full REST API.


What's New

Tabular Data (2026)

Attach structured spreadsheet data directly to any image set — a full in-browser spreadsheet editor with version history.

  • CSV and XLSX import / export with a dark-themed spreadsheet editor
  • Full version history with diff-based storage and one-click restore
  • Per-column filtering, column reordering, hidden rows and columns
  • Drag-and-drop CSV onto the imageset page to import as a table or attach as an auxiliary file
  • Paste any EXACT URL into a cell — it renders as a rich reference chip ("Image set: Tumor Slides")
  • Right-click context menu to insert or remove references, with a tree picker for lazy-loaded imagesets and images
  • Exported XLSX files include clickable hyperlinks for all EXACT references

Admin Impersonation (2026)

Superusers can temporarily act as any other user for support and debugging. A persistent banner makes the impersonation state clear; the original session is fully restored on exit.

Folder Upload for DICOM and MRXS (2026)

Upload an entire DICOM series or MRXS dataset as a folder — EXACT assembles the series automatically.

Team Statistics (2026)

A new statistics dashboard shows annotation progress per team: coverage, verification rates, and annotator breakdowns.

Search (2026)

Full-text search within image sets (press Ctrl+F) and across teams from the main navigation.

Modernised UI (2026)

  • Refreshed imageset page with a new LightRoom v2 viewer and improved image list
  • Reworked annotation type management under Products & Types
  • Upload images directly from the image list view
  • Image creator information shown in the viewer
  • Beautified login and logout screens
  • New logo

NIfTI 3D Volume Support (2026)

Upload .nii and .nii.gz volumetric files. The viewer renders axial slices with z-scaling from the NIfTI voxel geometry header; coronal and sagittal reconstructions use standard NIfTI coordinate remapping. Includes a z-slider for manual cross-section registration.

Passkeys (2025)

Passwordless login via FIDO2/WebAuthn — Windows Hello, Apple Passkeys, and hardware security keys. Users register keys in their profile and sign in with a single gesture. See Passkeys setup guide.


Features

AreaWhat EXACT provides
Image typesWSI via OpenSlide, DICOM, NIfTI (.nii/.nii.gz), CZI, CellVizio, MRXS, Olympus VSI, PNG, JPG, MP4, AVI
AnnotationBounding box · circle · polygon · segmentation tiles · paint brush · scissors & glue · knife split
CollaborationTeams, shared image sets, concurrent editing, annotation verification workflow
Version controlFull annotation history with diff-based storage and per-version links
Tabular dataSpreadsheet editor per image set, CSV/XLSX import/export, cell-level references
AI integrationPlugin system for algorithm-assisted labeling; density maps; segmentation overlays
Screening modeTile-by-tile WSI review with keyboard-driven navigation
REST APIBrowsable DRF API + dynamic OpenAPI/Swagger schema; EXACT-Sync Python client
AuthenticationPassword, passkeys (FIDO2/WebAuthn), optional LDAP
Offline syncBidirectional sync with SlideRunner desktop tool
ExportConfigurable export formats, annotation maps, density maps
CachingRedis-backed tile and session caching — see Caching docs

Quick Start

git clone https://github.com/DeepMicroscopy/Exact.git
cp exact/exact/settings.py.example exact/exact/settings.py
docker-compose -f docker-compose.yml up -d --build

Navigate to http://localhost:8000/ · Default credentials: exact / exact

Production

cp env.dev env.prod && cp env.dev.db env.prod.db
# Edit env.prod, env.prod.db, and settings.py for your environment

docker-compose -f docker-compose.prod.yml up -d --build
docker-compose -f docker-compose.prod.yml exec web python3 manage.py migrate --noinput
docker-compose -f docker-compose.prod.yml exec web python3 manage.py createsuperuser
docker-compose -f docker-compose.prod.yml exec web python3 manage.py collectstatic --no-input --clear

Navigate to http://localhost:1337/

After each upgrade

python3 manage.py migrate
python3 manage.py compilemessages
python3 manage.py collectstatic

See UPGRADE.md for version-specific migration notes.

Native (macOS / Linux)

Expand native install instructions

Prerequisites (Ubuntu/Debian)

apt-get update && apt-get install \
  python3-pip dos2unix python3-openslide python3-opencv libvips libvips-dev
sudo apt install postgresql

Ubuntu 20.04: Known issue with OpenSlide — rebuild pixman to fix it.

Database

sudo -iu postgres psql
CREATE USER exact PASSWORD 'exact';
CREATE DATABASE exact WITH OWNER exact ENCODING UTF8;

Application

pip3 install -r requirements.txt
cp exact/exact/settings.py.example exact/exact/settings.py
# Edit: SECRET_KEY · DEBUG · ALLOWED_HOSTS · database · UPLOAD_FS_GROUP

python3 manage.py migrate
python3 manage.py createsuperuser
python3 manage.py runserver

Email verification — add to settings.py:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST     = 'smtp.googlemail.com'
EMAIL_PORT     = '587'
EMAIL_HOST_USER     = 'you@gmail.com'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_USE_TLS  = True

Keyboard Shortcuts

Annotation Viewer

KeyAction
Del xDelete selected annotation
EscapeCancel editing
EnterConfirm / save
Ctrl+ZUndo
cToggle annotation mode
yToggle annotation visibility
bPush annotation type to background
Ctrl+ADraw on top of existing annotation
04Change local annotation label
Shift+04Change global annotation label
q / ePrevious / next image
Shift+q / ePrevious / next frame
rRotate image
fFlip image
sScissors — delete from selection
gGlue — add to selection
dKnife — split object
Shift+scrollResize paint brush
Arrow keysPan viewing window
Ctrl+FSearch images

Screening Viewer

KeyAction
a / dScreen left / right tile
w / sScreen up / down tile
j / lNavigate left / right tile
i / kNavigate up / down tile

REST API

Authentication

curl -X POST -H 'Content-Type: application/json' \
  -d '{"username":"exact","password":"top_secret"}' \
  http://127.0.0.1:8000/api/auth/token/login/

Query examples

# Filter by name, expand related objects
GET /api/v1/images/image_sets/?name__contains=Tumor&expand=product_set,main_annotation_type

# Select specific fields
GET /api/v1/images/image_sets/?fields=id,name

# Exclude fields
GET /api/v1/images/image_sets/?omit=images,product_set
All available endpoints
users/users               /api/v1/users/users/
users/teams               /api/v1/users/teams/
users/team_membership     /api/v1/users/team_membership/
images/images             /api/v1/images/images/
images/image_sets         /api/v1/images/image_sets/
images/set_tags           /api/v1/images/set_tags/
images/screening_modes    /api/v1/images/screening_modes/
annotations/annotations        /api/v1/annotations/annotations/
annotations/annotation_types   /api/v1/annotations/annotation_types/
annotations/verifications      /api/v1/annotations/verifications/
annotations/log_image_actions  /api/v1/annotations/log_image_actions/
administration/products        /api/v1/administration/products/

Citation

If you use EXACT in your research, please cite:

Marzahl et al. EXACT: A collaboration toolset for algorithm-aided annotation of almost everything. Scientific Reports 11, 4343 (2021). https://doi.org/10.1038/s41598-021-83827-4

@Article{marzahl2021exact,
  title   = {EXACT: a collaboration toolset for algorithm-aided annotation of images with annotation version control},
  author  = {Marzahl, Christian and Aubreville, Marc and Bertram, Christof A. and Maier, Jennifer
             and Bergler, Christian and Kr{\"o}ger, Christine and Voigt, J{\"o}rn
             and Breininger, Katharina and Klopfleisch, Robert and Maier, Andreas},
  journal = {Scientific Reports},
  year    = {2021},
  volume  = {11},
  pages   = {4343},
  doi     = {10.1038/s41598-021-83827-4}
}

Built on imagetagger by Fiedler et al. (RoboCup 2018).


Documentation

Notebooks for API usage, inference, segmentation, density maps, cluster workflows, and more live in doc/ and can be viewed at NBViewer.

Video tutorials (older, cover core features)
TopicVideo
Installation with Docker
First steps
Products & annotation type setup
Study and annotation modes
Annotation maps
Density maps
Cluster annotations
Annotation versioning
Inference
Segmentation
Image registration
SlideRunner sync
Dependencies
LibraryLicense
DjangoBSD
djangorestframeworkBSD
OpenSlide PythonLGPL 2.1
OpenSeadragonBSD-3
numpyBSD
opencv-pythonMIT
PillowPIL License
openpyxlMIT
BootstrapBSD
jQueryMIT
nibabelMIT
psycopg2LGPL
gunicornMIT

MIT License · © DeepMicroscopy · exact.cs.fau.de