A modular image processing framework developed at the NSF Ex-FAB BioFoundry, focused on arrayed colony phenotyping on solid media.
PhenoTypic provides a modular toolkit designed to simplify and accelerate the development of reusable bio-image analysis pipelines. PhenoTypic provides bio-image analysis tools built-in, but has a streamlined development method to integrate new tools.
See more on installing uv
Regular Install (recommended when deploying on a cluster)
uv add phenotypicInteractive / GUI Install (Plotly dashboards, Jupyter, Dash hub)
uv add phenotypic --extra guinapari Desktop Viewer Install (for image.*.napari(), point picker, sweep viewer)
uv add phenotypic --extra napariRegular Install
pip install phenotypicInteractive / GUI Install
pip install "phenotypic[gui]"napari Desktop Viewer Install
pip install "phenotypic[napari]"Note: may not always be the latest version. Install from repo when latest update is needed
git clone https://github.com/exfab/PhenoTypic.git
cd PhenoTypic
uv sync
For extending PhenoTypic.
git clone https://github.com/exfab/PhenoTypic.git
cd PhenoTypic
uv sync --group dev --all-extras
PhenoTypic installs the polars-lts-cpu build by default so it runs on
older CPUs (e.g. pre-AVX2 HPCC nodes) without crashing. On AVX2-capable machines
you can swap in the faster stock polars build for quicker measurement
compilation — see
Choosing the polars CPU build.
PhenoTypic ships optional deep-learning detectors backed by Meta's Segment Anything Model 2 and micro-sam.
See GPU Detection Setup for model downloads and SLURM deployment instructions.
On macOS and Windows, the [gui] extra installs the official
pyvips[binary] distribution, including a
self-contained native libvips. No Homebrew install or loader-path configuration is
needed for the normal GUI installation.
Linux and HPC installations keep the smaller pyvips binding and may provide native
libvips through the operating system or an
environment module:
# Debian or Ubuntu
sudo apt install libvips-dev --no-install-recommendsVerify that Python can load the native library from the same shell that will launch the GUI:
uv run python -c "import pyvips; print('pyvips', pyvips.__version__, 'libvips', '.'.join(str(pyvips.version(i)) for i in range(3)))"The bundled build contains the common image loaders needed by the GUI but omits optional
facilities such as PDF and OpenSlide. Users who intentionally prefer a fuller Homebrew
libvips can install it with brew install vips. If vips --version then works but
Python cannot find libvips.42.dylib, expose Homebrew's library directory before
launching PhenoTypic:
export DYLD_FALLBACK_LIBRARY_PATH="$(brew --prefix vips)/lib${DYLD_FALLBACK_LIBRARY_PATH:+:$DYLD_FALLBACK_LIBRARY_PATH}"If native libvips or its loader is unavailable on any platform, PhenoTypic automatically retains the Pillow fallback. Browse still works, but preparing large pyramids can be slower and use more memory.
To extract metadata from raw images, PhenoTypic uses the PyExifTool module. This
requires the external ExifTool application. If
it is unavailable, some RAW metadata may not be imported. See the
PyExifTool dependency documentation.
Process a directory of plate images through a saved pipeline:
uv run python -m phenotypic --mode full --pipeline pipeline.json --input ./images --output ./outUse --mode process --layer {rgb|gray|detect_mat|objmap} for an apply-only export run that
writes a single image layer per input (mirroring the input tree) and skips the
measurement/analysis suite — handy for previewing detection or enhanced layers.
The unified GUI hub bundles the pipeline builder, results viewer, and run console
under one URL. Start it with the phenotypic-gui console script:
uv run phenotypic-gui --root ./images --port 8050--root freezes the sandbox the GUI's file browser is allowed to see (defaults to
the current working directory). --host 127.0.0.1 (the default) keeps the server
loopback-only — pair with SSH port forwarding for remote workstations:
ssh -L 8050:localhost:8050 user@clusterOpen http://localhost:8050/ in your browser. The
GUI hub guide walks through the file
browser, builder, run console, and results viewer.
For Open OnDemand-style proxies, pass only the browser-visible path prefix:
uv run phenotypic-gui --root /rhome/ejaco020 --host 0.0.0.0 --port 30099 --url-prefix /node/hz01/30099/Then open the full proxy URL, for example
https://ondemand.hpcc.ucr.edu/node/hz01/30099/.
Note: phenotypic gui (no hyphen, as a subcommand) is not supported. Use
phenotypic-gui.
Search an ImagePipeline's parameters to minimize a scorer-defined cost with the tuning engine:
uv run phenotypic-tune run spec.json -i ./plates -o ./outGrid and random search work out of the box; the Optuna samplers
(tpe/cmaes/gp/nsga2) need the tune extra. See the
tuning how-to for an end-to-end walkthrough.
| Module | Description |
|---|---|
phenotypic.analysis |
Tools for downstream analysis of the data from phenotypic in various ways such as growth modeling or statistical filtering |
phenotypic.correction |
Different methods to improve the data quality of an image such as rotation to improve grid finding |
phenotypic.data |
Sample images to experiment your workflow with |
phenotypic.detect |
A suite of operations to automatically detect objects in your images |
phenotypic.enhance |
Preprocessing tools that alter a copy of your image and can improve the results of the detection algorithms |
phenotypic.grid |
Modules that rely on grid and object information to function |
phenotypic.measure |
The various measurements PhenoTypic is capable of extracting from objects |
phenotypic.detect.nn |
GPU-accelerated detectors (SAM2, micro-sam) with checkpoint management — see setup guide |
phenotypic.refine |
Different tools to edit the detected objects such as morphology, relabeling, joining, or removing |
phenotypic.prefab |
Various premade image processing pipelines that are in use at ExFAB |
phenotypic.tune |
Hyperparameter-tuning engine: grid/random search plus Optuna samplers (behind the tune extra), pluggable scorers, robust held-out evaluation, a shared-journal SLURM worker array with terminal publication, and a /tune/ GUI co-pilot |