Releases: TissueImageAnalytics/tiatoolbox
TIAToolbox 2.0.1
TIAToolbox v2.0.1 (2026-03-16)
Bug Fixes and Other Changes
- Fixes filtering of tiles for post-processing within masked region (#1037).
- Fixes Calculation of
max_inst_valuefor Instances where overlap is empty (#1038)
Full Changelog: v2.0.0...v2.0.1
TIAToolbox 2.0.0
TIAToolbox v2.0.0 (2026-03-11)
✨ Major Updates and Feature Improvements
⚙️ Engine Redesign (PR #578)
TIAToolbox 2.0.0 introduces a completely re-engineered inference engine designed for significant performance, scalability, and memory-efficiency improvements.
Key Enhancements
- A modern processing stack built on Dask (parallel/distributed execution) and Zarr (chunked, out-of-core storage)
- Standardised output formats across all engines:
- Python
dict - Zarr
- AnnotationStore (SQLite-backed)
- QuPath JSON
- Python
- Cleaner runtime behavior with reduced warning noise and a unified progress bar
- More predictable memory usage through chunked streaming
- Broader test coverage across engine components
🗺️ Improved QuPath Support
Enhancements include:
- Better handling of GeoJSON
- Support for multipoint geometries (#841)
- Improved semantic output helpers:
🔬 New Nucleus Detection Engine
A dedicated nucleus detection pipeline has been added, built on the redesigned engine for improved accuracy and efficient large-scale processing.
🧠 KongNet Model Family
TIAToolbox 2.0.0 introduces KongNet, a high-performance architecture that achieved top results across multiple international challenges:
- 🥇 1st place: MONKEY Challenge (overall detection)
- 🥇 1st place: MIDOG (mitosis detection)
- ⭐ Top-tier performance on PUMA
Multiple pretrained variants are available (CoNIC, PanNuke, MONKEY, PUMA, MIDOG), each with standardised IO configurations.
🧬 Expanded Foundation Model Support
Additional foundation models are now supported (#906), broadening the range of high-capacity architectures available for feature extraction and downstream tasks.
🖼️ SAM Segmentation in TIAViz
TIAViz now integrates Meta’s Segment Anything Model (SAM), enabling:
- Interactive segmentation
- Rapid region extraction
- Exploratory annotation workflows
Simplified SAM usage (#968) streamlines its integration into analysis pipelines.
🖼️ Multichannel Image (mIF) Support in WSIReader
- Multichannel image support (PR #825) for immunofluorescence and non-RGB modalities
🖼️ WSI Registration Visualization in TIAViz
TIAViz now supports interactive WSI registration visualisation, allowing users to compare aligned slides in two modes:
- Side‑by‑side view — view fixed and moving WSIs next to each other for direct comparison
- Overlay mode — blend registered WSIs with adjustable transparency for visual inspection of alignment quality
This feature enables intuitive, high‑resolution exploration of slide registration results directly within TIAViz.
🧩 Enhanced WSIReader & Metadata Handling
Major improvements include:
- More robust cross-vendor metadata extraction (#1001)
- Simplified Windows installation using
openslide-bin(no manual DLL steps) - macOS Tileserver fix (#976)
- Improved DICOM reading (#934)
☁️ New Cloud-Native Reader: FsspecJSONWSIReader (PR #897)
A new reader supporting fsspec-compatible filesystems, enabling seamless access to WSIs stored on:
- S3
- GCS
- Azure
- HPC clusters
- Any fsspec-supported backend
This enables cloud-native and distributed data workflows.
Contributed by @aacic
🤗 Pretrained Models Migrated to Hugging Face
All pretrained models and sample assets have been migrated (#945, #983), improving:
- Download reliability
- Versioning and reproducibility
- Caching and CI integration
- Licensing clarity per model family
🛡️ Security, Compatibility & Tooling
🔐 Security & Dependency Updates
- Dependency upgrades
- Internal security improvements
- Explicit workflow permissions added (#1021, #1023)
🐍 Python Version Support
- Dropped: Python 3.9
- Added: Python 3.13
- Supported: Python 3.10–3.13
- Updated CUDA wheel source to cu126
🛠️ Developer Tooling & CI/CD
- Expanded mypy type-checking coverage (#912, #931, #935, #951)
- Updated pre-commit hooks and general formatting
- CI uses CPU-only PyTorch for faster, more reliable builds (#974, #979)
- Updated pip install workflow (#1013)
- Added new Python 3.13 Docker images (#1014, #1019)
🧹 Bug Fixes & Stability Improvements
- Fixed multi-GPU behaviour with
torch.compile(#923) - Fixed DICOM reading issue (#934)
- Fixed annotation contour handling with holes (#956)
- Fixed consecutive annotation load bug (#927)
- Fixed SCCNN model issues (#970)
- Fixed MapDe
dist_filtershape issue (#914) - Improved notebook reliability on Colab (#1026–#1030)
- macOS TileServer issues resolved (#976)
🧭 Migration Guide for Users
🔄 Updating from 1.x to 2.0.0
Update calls: replace .predict() with .run()
# Old
results = segmentor.predict(imgs=[...], ioconfig=config)
# New
results = segmentor.run(images=[...], ioconfig=config)Use patch_mode: replace mode="patch" with patch_mode=True and mode="tile" or "wsi" with patch_mode=False
# Old
results = segmentor.predict(imgs=[...], mode="patch", ioconfig=config)
# New
results = segmentor.run(images=[...], patch_mode=True, ioconfig=config)# Old
results = segmentor.predict(imgs=[...], mode="wsi", ioconfig=config)
# New
results = segmentor.run(images=[...], patch_mode=False, ioconfig=config)Use the new I/O configs
from tiatoolbox.models.engine.io_config import IOSegmentorConfig
config = IOSegmentorConfig(
patch_input_shape=(256, 256),
stride_shape=(240, 240),
input_resolutions=[{"resolution": 0.25, "units": "mpp"}],
save_resolution={"units": "baseline", "resolution": 1.0},
)Specify the output format
results = segmentor.run(
images=[...],
ioconfig=ioconfig,
output_type="zarr", # or "dict", "annotationstore", "qupath"
save_dir="outputs/",
)Update imports
tiatoolbox.typing→tiatoolbox.type_hints
Install requirements
- Python 3.10+ required
- On Windows: install OpenSlide via
pip install openslide-bin
Full Changelog: v1.6.0...v2.0.0
TIAToolbox 1.6.0
TIAToolbox v1.6.0 (2024-12-12)
Major Updates and Feature Improvements
- Foundation Models Support via
timmAPI (#856, contributed by @GeorgeBatch)- Introduced
TimmBackbonefor running additional PyTorch Image Models. - Tested models include
UNI,Prov-GigaPath, andH-optimus-0. - Added an example notebook demonstrating feature extraction with foundation models.
timmadded as a dependency.
- Introduced
- Performance Enhancements with
torch.compile(#716)- Improved performance on newer GPUs using
torch.compile.
- Improved performance on newer GPUs using
- Multichannel Input Support in
WSIReader(#742) - AnnotationStore Filtering for Patch Extraction (#822)
- Python 3.12 Support
- Deprecation of Python 3.8 Support
- CLI Response Time Improvements (#795)
API Changes
- Device Specification Update (#882)
- Replaced
has_gpuwithdevicefor specifying GPU or CPU usage, aligning with PyTorch'sModel.to()functionality.
- Replaced
- Windows Compatibility Enhancement (#769)
- Replaced
POWERwith explicit multiplication.
- Replaced
Bug Fixes and Other Changes
- TIFFWSIReader Bound Reading Adjustment (#777)
- Fixed
read_boundto use adjusted bounds. - Reduced code complexity in
WSIReader(#814).
- Fixed
- Annotation Rendering Fixes (#813)
- Corrected rendering of annotations with holes.
- Non-Tiled TIFF Support in
WSIReader(#807, contributed by @GeorgeBatch) - HoVer-Net Documentation Update (#751)
- Corrected class output information.
- Citation File Fix for
cffconvert(#869, contributed by @Alon-Alexander) - Bokeh Compatibility Updates
- Updated
bokeh_appfor compatibility withbokeh>=3.5.0. - Switched from
sizetoradiusforbokeh>3.4.0compatibility (#796).
- Updated
- JSON Extraction Fixes (#772)
- Restructured SQL expression construction for JSON properties with dots in keys.
- VahadaneExtractor Warning (#871)
- Added warning due to changes in
scikit-learn>0.23.0dictionary learning (#382).
- Added warning due to changes in
- PatchExtractor Error Message Refinement (#883)
- Immutable Output Fix in
WSIReader(#850)
Development-Related Changes
- Mypy Checks Added
- Applied to
utils,tools,data,annotation, andcli/common.
- Applied to
- ReadTheDocs PDF Build Deprecation
- Formatter Update
- Replaced
blackwithruff-format.
- Replaced
- Dependency Removal
- Removed
jinja2.
- Removed
- Test Environment Update
- Updated to
Ubuntu 24.04.
- Updated to
- Conda Environment Workflow Update
- Implemented
micromambasetup.
- Implemented
- Codecov Reporting Fix (#811)
Full Changelog: v1.5.1...v1.6.0
TIAToolbox 1.5.1
1.5.1 (2023-12-16)
Development related changes
- Specifies compatible Python versions
- Fixes
tiatoolbox-feedstockbuild for conda-forge release #763
- Fixes
Full Changelog: v1.5.0...v1.5.1
TIAToolbox 1.5.0
1.5.0 (2023-12-15)
Major Updates and Feature Improvements
- Adds the bokeh visualization tool. #684
- The tool allows a user to launch a server on their machine to visualise whole slide images, overlay the results of deep learning algorithms or to select a patch from whole slide image and run TIAToolbox deep learning engines.
- This tool powers the TIA demos server. For details please see https://tiademos.dcs.warwick.ac.uk/.
- Extends Annotation to Support Init from WKB #639
- Adds
IOConfigfor NuClick inpretrained_model.yaml#709 - Adds functions to save the TIAToolbox Engine outputs to Zarr and AnnotationStore files. #724
- Adds Support for QuPath Annotation Imports #721
Changes to API
- Adds
model.to(device)andmodel.load_model_from_file()functionality to make it compatible with PyTorch API. #733 - Replaces
pretrainedwithweightsto make the engines compatible with the new PyTorch API. #621 - Adds support for high-level imports for various utility functions and classes such as
WSIReader,PatchPredictorandimread#606, #607, - Adds
tiatoolbox.typingfor type hints. #619 - Fixes incorrect file size saved by
save_tiles, issue with certain WSIs raised by @TomastpPereira - TissueMasker transform now returns mask instead of a list. #748
- Fixes #732
Bug Fixes and Other Changes
- Fixes
pixmanincompability error on Colab #601 - Removes
shapely.speedups. The module no longer has any affect in Shapely >=2.0. #622 - Fixes errors in the slidegraph example notebook #608
- Fixes bugs in WSI Registration #645, #670, #693
- Fixes the situation where PatchExtractor.get_coords() can return patch coords which lie fully outside the bounds of a slide. #712
- Fixes #710
- Fixes #738 raised by @xiachenrui
Development related changes
- Replaces
flake8andisortwithruff#625, #666 - Adds
mypychecks torootandutilspackage. This will be rolled out in phases to other modules. #723 - Adds a module to detect file types using magic number/signatures #616
- Uses
poetryfor version updates instead ofbump2version. #638 - Removes
setup.cfgand usespyproject.tomlfor project configurations. - Reduces runtime for some unit tests e.g., #627, #630, #631, #629
- Reuses models and datasets in tests on GitHub actions by utilising cache #641, #644
- Set up parallel tests locally #671
Full Changelog: v1.4.0...v1.5.0
TIAToolbox 1.4.1
Bug Fixes and Other Changes
Full Changelog: v1.4.0...v1.4.1
TIAToolbox 1.4.0
1.4.0 (2023-04-24)
Major Updates and Feature Improvements
- Adds Python 3.11 support [experimental] #500
- Python 3.11 is not fully supported by
pytorchpytorch/pytorch#86566 andopenslideopenslide/openslide-python#188
- Python 3.11 is not fully supported by
- Removes Python 3.7 support
- This allows upgrading all the dependencies which were dependent on an older version of Python.
- Adds Neighbourhood Querying Support To AnnotationStore #540
- This enables easy and efficient querying of annotations within a neighbourhood of other annotations.
- Adds
MultiTaskSegmentorengine #424 - Fixes an issue with stain augmentation to apply augmentation to only tissue regions.
- #546 contributed by @navidstuv
- Filters logger output to stdout instead of stderr.
- Fixes #255
- Allows import of some modules at higher level for improved usability
WSIReadercan now be imported asfrom tiatoolbox.wsicore import WSIReaderWSIMetacan now be imported asfrom tiatoolbox.wsicore import WSIMetaHoVerNet,HoVerNetPlus,IDaRS,MapDe,MicroNet,NuClick,SCCNNcan now be imported asfrom tiatoolbox.models import HoVerNet, HoVerNetPlus, IDaRS, MapDe, MicroNet, NuClick, SCCNN
- Improves
PatchExtractorperformance. UpdatesWSIPatchDatasetto be consistent. #571 - Updates documentation for
Licensefor clarity on source code and model weights license.
Changes to API
- Updates SCCNN architecture to make it consistent with other models. #544
Bug Fixes and Other Changes
- Fixes Parsing Missing Omero Version NGFF Metadata #568
- Fixes #535 raised by @benkamphaus
- Fixes reading of DICOM WSIs at the correct level #564
- Fixes #529
- Fixes
scipy,matplotlib,scikit-imagedeprecated code - Fixes breaking changes in
DICOMWSIReaderto make it compatible with latestwsidicomversion. #539, #580 - Updates
shapelydependency to version >=2.0.0 and fixes any breaking changes. - Fixes bug with
DictionaryStore.bqueryandgeometry=None, i.e. only a where predicate given. - Fixes local tests for Windows/Linux
- Fixes
flake8,deepsourceerrors. - Uses
loggerinstead ofwarningsandprintstatements to properly log runs.
Development related changes
- Upgrades dependencies which are dependent on Python 3.7
- Moves
requirements*.txtfiles torequirementsfolder - Removes
tox - Uses
pyproject.tomlforbdist_wheel,pytestandisort - Adds
joblibandnumbaas dependencies.
Full Changelog: v1.3.3...v1.4.0
TIAToolbox 1.3.3
Major Updates and Feature Improvements
- Restricts dependency versions for long term stability of the current version
Changes to API
None
Bug Fixes and Other Changes
- Fix bug related to reading scikit-image
Development related changes
- Restricts dependency versions for compatibility
TIAToolbox 1.3.2
Major Updates and Feature Improvements
- None
Changes to API
- None
Bug Fixes and Other Changes
- Fix bug related to reading DICOM files
Development related changes
- Restricts wsidicom version to <0.7.0 for compatibility
TIAToolbox 1.3.1
Major Updates and Feature Improvements
- Adds NuClick architecture #449
- Adds Annotation Store Reader #476
- Adds DFBR method for registering pair of images #510
Changes to API
- Adds a sample SVS loading function
tiatoolbox.data.small_svs()to the data module #517
Bug Fixes and Other Changes
- Simplifies example notebook for image reading for better readability
- Restricts Shapely version to <2.0.0 for compatibility
Development related changes
- Adds GitHub workflow for automatic generation of docker image
- Updates dependencies
- Updates bump2version config
- Enables flake8 E800 checks for commented codes.
- Fixes several errors generated by DeepSource.
- Prevent test dumping file to root
- Removes duplicate functions to generate parameterized test scenarios
Note: Please note that Python 3.7 support will be removed after this release. We plan to add support for Python 3.11 in the next release.