QuPath Tooling
The group’s cluster of QuPath-adjacent repositories — PACS integration, annotation tooling, QC pipelines, viewers, and downstream deep-learning toolchains.
Purpose
A curated index so that the right extension or script is found before a new one is started.
Data used
Not a data project. Consumes WSIs from the Memorial share and Sectra PACS.
Methods
PACS and scanner integration: sectra-qupath-extension (Groovy), sectra-python-qupath-extension (Python, for automation). Annotation and curation: QuickAnnotator (browser-based rapid annotation feeding GeoJSON into QuPath), HistomicsML (interactive region labeling), CohortFinder (batch-level project curation), TissueSelector (tissue-region filtering — but see stepbystep: it is a file-for-file copy of that project’s 30_qupath_integration/, and the copy’s relative-path arithmetic resolves one directory too high, so its Python bridge exits on import. Treat stepbystep as the source and this as a stale duplicate until that is fixed). QC: HistoQC (slide-level QC, outputs used as QuPath-project filters), GrandQC Quality Study (not a QC-reproducibility study as previously described here — it is the group’s 502-slide comparison of GrandQC against its own technicians, and the one place in this cluster where a QC model has actually been measured on Memorial material; κ = 0.10, because 70% of the defects technicians record have no GrandQC class), PathProfiler (whole-cohort profiling). Provenance and redaction: ScanTools — label/macro extraction, in-place .svs label redaction, barcode decoding, pyramid hashing, scan dates and tissue masks; from the same Northwestern group as HistomicsML above, and a candidate rather than adopted. Read its page before running any of it: scandate is broken as shipped and deidentify works in place. Model-driven extensions: QuPath Hepatocyte Extension — the group’s own QuPath 0.6+ extension, adding an Extensions → Hepatocyte menu that runs the hepatocyte-app liver segmentation model on selected annotations and imports predictions back as classified polygons with per-class counts. Inference runs outside QuPath through a Python bridge, so the extension bundles no PyTorch — the pattern to copy for any future model-backed extension. Do not point QuPath at its catalog yet: catalog.json advertises a v0.1.0 JAR that returns 404 because the release was never cut. Two distinct licensing problems sit behind it, with different fixes — hepatocyte-app has no licence file at all, and the extension’s own LICENSE intends Apache-2.0 (declared in five places) but its text differs from the canonical Apache wording in four operative sections. Read both pages first.
Viewers and I/O: DIYWSI, simple_wsi_viewer, slide_viewer_47, video-wsi, imageTypes. Downstream DL: pathml and pathml-tutorial (Dana-Farber / Weill Cornell WSI framework), tiatoolbox (Warwick), pathology-hooknet (HookNet segmentation), DL4MicEverywhere. Two tiatoolbox capabilities are worth knowing are there, because they were nearly duplicated from elsewhere: DFBRegister does deep-feature cross-stain WSI registration with affine plus optional non-rigid refinement (see Cross-Stain Registration), and its visualisation utilities write pyramidal OME-TIFF heatmaps and QuPath-readable JSON for prediction overlays. DFBRegister is now the pairwise half of a two-tool answer rather than the whole of it. Evaluated 2026-08-01 and not adopted, but recommended when the question arises: VALIS (Moffitt) registers a whole series of slides rather than a pair — automatic ordering, rigid then non-rigid then optional micro-registration, Bio-Formats and OpenSlide input, pyramidal OME-TIFF output QuPath opens directly, and a public warp_xy that carries annotation vertices and cell centroids between stains, which is the draw-once payoff this index has been describing and not implementing. Dormant since 2025-06 but finished, published and MIT. Two caveats belong here rather than on its page: the per-pair error table it writes is a training residual over its own fitted keypoints, so it cannot be used as an acceptance threshold, and it needs a JVM plus pyvips plus a NumPy 1.x pin, so on this group’s Windows workstations the maintainers’ Docker image is the realistic route. Its desktop front end Valis-GUI is evaluated and rejected — on the branch you get by cloning, the Register button’s only call into the backend is commented out while the interface still marks the run complete, and the developed code sits on a non-default branch that has diverged from it.
Everything above only estimates a transform, and that distinction is the point of the third entry. Evaluated 2026-08-10 and not adopted, because it cannot open a slide: elastix (UMC Utrecht / Image Sciences Institute) is a parameter-file-driven ITK registration engine — 23 metrics, 18 transforms, 18 optimisers in any combination, including the mutual-information metrics that suit cross-stain work and bending-energy and rigidity penalties that constrain a deformable warp physically. It has no whole-slide input of any kind (six ITK IO modules, none of them OpenSlide or Bio-Formats) and its 2D support is float-scalar only, fixed at compile time, so an RGB slide plane must be reduced to one channel first. It is therefore not a replacement for either tool above.
It earns its place here for one capability neither has: transformix -def warps arbitrary held-out points through a fitted transform, which is an independent target registration error rather than a residual over the fitted keypoints, and -jac all writes a Jacobian determinant that detects a folded deformation with no ground truth at all. Checked directly that VALIS does not already depend on it — its pyproject.toml declares simpleitk, not simpleelastix. Unlike most of this index it is vigorously maintained: 203 commits in the trailing year, release 5.3.1 in March 2026, 48 contributors.
A fourth entry, and deliberately a line rather than a page. jeremyyu64/curvereg (CC BY-NC 4.0, © UHN, five commits all dated 2026-07-22, single author) is the companion code for Zabihollahy 2026 — CurvReg (multi-stain liver biopsy registration) — curvature-aware registration of curved liver needle biopsies, piecewise affine over manually drawn cutlines plus a VoxelMorph-style deformable stage running on tissue masks rather than stained images, so stain appearance cannot drive the warp. Read at source level 2026-08-13. No separate project page, per the §6 gate and the precedent set by jin-2026-llm-medical-research: it is a paper’s companion implementation rather than a tool to adopt, everything found in it is a fact about the paper’s method, and splitting one evaluation across two files would help nobody. It is documented inside the paper note instead.
Two things from the code that bear on this index. It is not a VALIS replacement because it is not fully automatic — train.py and evaluate.py both assert one hand-drawn cutline mask per slide and abort without it. And in the head-to-head on 42 liver cores it did not significantly beat VALIS on landmark error (p = 0.091), which is the strongest independent evidence this index has that the VALIS recommendation above is sound. Evaluated and not adopted: WSITools (Mayo) — patch extraction, tissue detection, ImageScope-XML annotation parsing, translation-only registration, patch mosaicking. Dormant since 2024, TensorFlow-era, licence ambiguous, and superseded by tiatoolbox/pathml on every axis; read it for reference, do not depend on it. See Patch Extraction.
The drafts umbrella, indexed 2026-07-27. Digital Pathology Drafts holds roughly fifty folders; read that page before any of the rest, because .gitmodules declares three submodules the index does not register, so a clone --recursive is silently incomplete. Those that earned their own page: stepbystep, Stain Quality, stain-normalisation-qupath (cannot open an SVS as shipped — it calls slide_thumbnail with a keyword TIAToolbox does not have, and where it does run it normalises each image to itself), GrandQC-QuPath, svs-viewer-annotator and Drafts Helpers.
The rest, with the reason each stayed a line. QuPathScripts — 23 Groovy scripts for tile export, annotation round-trips and density maps, several ESDIP-prefixed; the closest thing here to a reusable script library and the first place to look before writing a new exporter. macroCalibrate — ruler-based scale recovery for gross photographs, written up as Macroscopic Specimen Photography; its sample images carry a visible cassette identifier. TimeLogger — a biopsy-evaluation timer (HTML plus a Python logger writing a CSV); relevant to Laboratory Workload Measurement rather than to QuPath. grid_overlay_app and grid_overlay_start_stop — screen-overlay grid tools shipped as PyInstaller builds; screen-space rather than slide-space, so the caveat on Reading-Behaviour Capture applies. Gizmopath-QuANTUM — three Groovy modules (welcome, StarDist nuclei detection, cellularity results) from Gizmopath’s published QuANTUM pipeline, which measures tumour cellularity before molecular testing — a real need, and a partial copy here, so use the upstream. melanocytic_triage, GNCnn, slide2vec and liverquant — reference collections, not code: each is a downloaded paper plus a flattened text dump of somebody else’s repository, kept for reading. instantseg — a downloaded bioimage.io model release (weights plus ImageJ macros), not source. SPIDER — a large local Python workspace of numbered app revisions that predates and duplicates spider-qupath; the submodule is the maintained one. monoai — a two-file stub. output — a single stray classification JSON, the artefact of Stain Quality writing to a hardcoded relative path. pdfs — a coherent stain-colour reading list, now the basis of Colour Calibration. uscap_2026_abstracts and TileExporter — empty directories, zero files each.
Annotation tools, checked 2026-07-29. A histopathology/labelme clone sits on K:. Read against its own local upstream ref, exactly one commit is unique to the fork — and it adds a .gitignore entry and a personal dev-setup note, nothing else. No WSI support, no GeoJSON export, no tiling, no DICOM. It is an out-of-sync copy of upstream labelme (behind by about two and a half months) with one housekeeping commit, not a pathology fork. Nothing to adopt and nothing to lift; if fork work is ever intended, it needs rebasing onto current upstream first. Recorded as a line so the next person does not read the repository name and assume there is pathology code in it. MIKAIA is evaluated separately and has its own page.
The remainder, read in a second pass. imagebank — a Docker deployment of Digital Slide Archive plus HistomicsUI and MONAI Label, mirrored here from a Linux host; the group’s most serious attempt at a shared annotation platform, and the natural home for anything that outgrows single-workstation QuPath. It now has its own page — imagebank — after a source-level read on 2026-07-31, and that read splits the verdict. The description above stands and is the reason to keep it: it is the estate’s only multi-user browser-based platform, which is the one capability nothing in this index provides, and Server-Side Slide Platforms sets out what the architecture buys and costs in general. But do not run its quality-control plugins. All three are hand-rolled threshold heuristics with no trained model; one compares a score that is bounded above by 0.25 against a threshold of 0.5, so its warning fires on every image; and two of them carry the GrandQC name while their container ships no deep-learning framework at all — which collides directly with GrandQC-QuPath and GrandQC Quality Study in this same index. apps — the stock MONAI Consortium pathology sample app, unmodified, companion to that deployment. ecosystem (MemorialPath org) — a Turkish Quarto compendium of the laboratory’s digital-pathology methods and references, plus the design notes for exporting from the hospital LIS and PACS with an anonymisation step; the closest thing the group has to a written plan for its own image bank. ESDIPAcademy — despite the name, not course slides: a from-scratch U-Net segmentation training project with two checkpoints and ~1760 tile/mask pairs, and its three Groovy scripts are byte-identical copies of files in QuPathScripts. PubMedSearchClient — an NCBI E-utilities client with a digital-pathology filter, chaining results into an LLM for literature-grounded answers; relevant to Citation Network Analysis rather than to slides. RwithFileMaker — an R-to-FileMaker ODBC demo, notable only for the caveat below. shiny-server — the personal site, including a client-side WebAssembly Shiny export. LOP — a project-idea scratchpad. bibliometrics, makalesaati, Statistical-Methods-In-Pathology-Articles, patoloji-ve-bilisim, patoloji-bilgi-yonetim-sistemi, rutinde-dijital-patoloji, dijital-patoloji-hakkinda, molekuler-patoloji-hakkinda, rapordakikelimeler — writing and teaching output rather than tooling, several DOI-archived; rapordakikelimeler is an unrealised stub.
Three of these carry credential or identifier exposure that belongs on a governance list rather than in a tooling index, all in private repositories, none of them patient-facing but none of them things to leave: imagebank commits a MONAI Label API key in plaintext (corrected 2026-07-31 from a direct read: three markdown files under docs/, not two, and three of the five commits, not all five — the deployment configuration itself was properly remediated to an environment variable, and the separate, wholly unremediated problem is a bespoke admin password in 37 tracked files including both .env.example templates; see imagebank); LOP commits publisher and portal access tokens in an exported bookmark dump; and apps retains a runtime log naming a local slide path and about a dozen slide identifiers. RwithFileMaker ships a real FileMaker binary named for liver core-needle biopsies which its own notes call a sample — a surface scan of the file found no plaintext patient data, but the format is proprietary and compressed, so it stays [unverified] rather than cleared. Rotating the key is the only one of these that cannot wait, since deleting the line does not undo the history.
Current state / open questions
Active as an index rather than a single deliverable. Conventions: GeoJSON is the interchange format between QuPath and every downstream tool, with annotations named {organ}__{class}__{reviewer}.geojson; scripts live in the project repo where they are used and only truly generic scripts belong in the extension repos; .qpproj project files for cohorts containing patient identifiers must not be committed and stay on the Memorial share. That rule is still being broken in the group’s own teaching repository — QuPath Atölye’s hands-on .qpproj and its .backup were flagged on 2026-07-26 and are unchanged at HEAD on 2026-07-30. Containment was re-tested after an intervening site regeneration and holds; the risk has moved forward to the next OSF release, see that page. Teaching: QuPath Atölye and QuPath Atölye Extension back a hands-on Turkish-language workshop at atolye.patoloji.dev — 79 published pages: 13 modules, 61 appendices and 5 top-level pages, read from the repository’s tracked _site/sitemap.xml on 2026-07-30. (An earlier note here of “twenty-odd appendices” was an undercount; ekler/ held 61 .qmd files then too.) The appendices are where the breadth is — ICC colour management, OMERO / PACS / Pathomation / SlideScore integration, HPC batch processing, OME-Zarr/NGFF, spatial point processes, nuclear morphometry, TIL scoring, WSInfer, SAM, reproducibility. A separate OSF data package, DOI 10.17605/OSF.IO/V7MJQ, ships four workshop slides (~7 GB), the tumour/stroma classifier, the scripts and the extension JAR. The previous description here — cell counting, IHC quantification, tumour segmentation — was written from a Quarto chapter and understated it substantially. Read from the tree on 2026-07-26 and re-verified 2026-07-30, the extension ships 85 Groovy modules: eight mitosis detectors plus a comparison harness, ER/PR H-score and Ki-67 including a heterogeneity module, stain-vector and cohort-wide stain QC, GrandQC, StarDist / Cellpose / InstanSeg / SPIDER / Kaiko / generic foundation-model wizards, spatial statistics (Delaunay, nearest-neighbour, peritumoural bands), stromal TILs, tumour budding, OME-Zarr and tile export, Sectra import, an ICC auditor, and a WSI anonymisation wizard. Thirteen release tags, Zenodo DOI live — but the newest is still the release candidate v0.2.2-rc4 (2026-06-27), now with four commits of unreleased work behind it. Its LICENSE is the same byte-identical defective Apache template as QuPath Hepatocyte Extension — see either page.
Atlas access: QuPath Patoloji Atlası Extension — adds a DZI ImageServer so QuPath can open the public Patoloji Atlası slides streamed over HTTP with nothing downloaded, plus a browsable catalogue. It also carries a blinded-reader-study instrument (focus/) with ICC agreement analysis in both R and Python. MIT, canonical licence, working release, live DOI, CI configured — of the three QuPath extensions the group publishes, this is the one whose packaging should be copied by the other two.
The imagebank entry and the credential correction above were written back on 2026-07-31 from the source-level read recorded on imagebank; the registration entry on 2026-08-01 from the reads recorded on VALIS and Valis-GUI, extended 2026-08-13 from the source read recorded on Zabihollahy 2026 — CurvReg (multi-stain liver biopsy registration), and extended on 2026-08-10 from the read recorded on elastix; the rest of this index has not been re-verified since 2026-07-30 and last_reviewed is unchanged for that reason.
Derived from: patoloji-ai/qupathrepositories.qmd, patoloji-ai/qupathworkshop.qmd; drafts cluster read from D:/DigitalPathologyDrafts on 2026-07-27 — see Digital Pathology Drafts for the full inventory and what was and was not read. Workshop and extension figures refreshed 2026-07-30 from full-depth clones of both repositories (2902deb and ac0784f), the D:/ trees being unreachable from that machine.