A GUI tool for visualizing and annotating immunofluorescence microscopy cell images.
Project description
AnnotateEZ
A lightweight GUI tool for visualizing and annotating immunofluorescence (IF) microscopy cell images stored in HDF5 format.
Features
- Tile-based grid view of single-cell images with configurable layout
- Multi-class annotation with customizable label names and colors
- Configurable RGB channel mapping with per-channel gain control
- Optional mask boundary overlay (binary or multi-cell instance masks)
- Click-and-drag annotation for fast bulk labeling
- Per-page lazy image loading with background prefetch — handles large datasets without loading everything into memory
- Sort events by any DataFrame column without modifying the underlying data
- Undo / redo with configurable depth
- Dark and light themes
- Full keyboard shortcut support
- Annotations saved back to the source HDF5 file and exported to TSV
Input Format
The tool expects an HDF5 file with the following datasets:
| Key | Shape | dtype | Description |
|---|---|---|---|
images |
(N, H, W, C) |
uint16 |
Multi-channel cell images |
features |
— | pandas DataFrame | Per-cell features (stored via df.to_hdf) |
channels |
(C,) |
string | Channel names |
masks (optional) |
(N, H, W) or (N, H, W, 1) |
int | Binary or instance-segmentation masks |
Installation
pip install annotate-ez
Usage
# bash command
annotate-ez
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
→ / ← |
Next / previous page |
Alt+0 – Alt+6 |
Switch active label |
0 |
Switch to RGB composite view |
1 – 9 |
Switch to single-channel grayscale view (by channel index) |
Ctrl+S |
Save annotations |
Ctrl+Z |
Undo last annotation change |
Ctrl+Y |
Redo |
Annotation Tips
Single-click annotation Left-click any tile to assign the currently selected label. Right-click to reset it to the background class (label 0).
Click-and-drag annotation
Hold the mouse button and drag across tiles to annotate multiple cells in one motion. The entire drag gesture counts as a single undo step, so you can reverse it with one Ctrl+Z.
Batch labeling Use the All button to assign the active label to every tile on the current page, or None to reset the entire page to background. Both actions are undoable.
Sorting for faster review Use the sort panel to reorder cells by any feature column (e.g., a confidence score or size metric) before annotating. Sort order is display-only — the saved DataFrame is never reordered.
Undo depth
The default undo history keeps the last 3 steps. Increase max undo steps in Settings if you want a deeper history, keeping in mind that each step stores a full copy of all labels.
Configuration
On first launch, a default configuration file is created at:
~/.config/annotate-ez/config.yml
All settings are also editable via the Settings dialog inside the app. Key options:
| Setting | Description |
|---|---|
theme |
dark or light |
tile_size |
Pixel size of each image tile (always kept odd) |
x_size / y_size |
Number of columns / rows in the tile grid |
max_undo_steps |
Maximum number of undo steps stored in memory |
image_key / data_key |
HDF5 dataset keys for images and features |
output_dir |
Directory where the TSV export is written |
Requirements
- Python 3.8 – 3.9 (tested)
- PyQt5 ≥ 5.15
- h5py ≥ 3.1
- pandas ≥ 1.3
- numpy ≥ 1.21
- tables ≥ 3.8
- PyYAML ≥ 6.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file annotate_ez-0.1.0.tar.gz.
File metadata
- Download URL: annotate_ez-0.1.0.tar.gz
- Upload date:
- Size: 46.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d25f8b4c8bbfa9549b44140e2ac7e62bd66f7ff3cd535f091da2a81b953b8fc0
|
|
| MD5 |
ad9a22b5045bfbd46795bcf855dfa31c
|
|
| BLAKE2b-256 |
6a9fb69ab0468ce0cb3dbc673dfd770a2cfccc26bc324a4985df0cc0a87fb722
|
Provenance
The following attestation bundles were made for annotate_ez-0.1.0.tar.gz:
Publisher:
publish.yml on aminnaghdloo/annotateEZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
annotate_ez-0.1.0.tar.gz -
Subject digest:
d25f8b4c8bbfa9549b44140e2ac7e62bd66f7ff3cd535f091da2a81b953b8fc0 - Sigstore transparency entry: 1275019147
- Sigstore integration time:
-
Permalink:
aminnaghdloo/annotateEZ@4015f6eb043018b898b8955b0a5fc2b679867eed -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/aminnaghdloo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4015f6eb043018b898b8955b0a5fc2b679867eed -
Trigger Event:
release
-
Statement type:
File details
Details for the file annotate_ez-0.1.0-py3-none-any.whl.
File metadata
- Download URL: annotate_ez-0.1.0-py3-none-any.whl
- Upload date:
- Size: 46.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
feacac7d72e2f017c2d6eeb84d5e529e1e9fc33bdab848257957305a235a7275
|
|
| MD5 |
0f3952474bab99ab3c11c99405073cc0
|
|
| BLAKE2b-256 |
985b396b9e790a6f59b723fdaf2fe53757de0a7ff7b9f88cccf4a4c5ddfe983e
|
Provenance
The following attestation bundles were made for annotate_ez-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on aminnaghdloo/annotateEZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
annotate_ez-0.1.0-py3-none-any.whl -
Subject digest:
feacac7d72e2f017c2d6eeb84d5e529e1e9fc33bdab848257957305a235a7275 - Sigstore transparency entry: 1275019237
- Sigstore integration time:
-
Permalink:
aminnaghdloo/annotateEZ@4015f6eb043018b898b8955b0a5fc2b679867eed -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/aminnaghdloo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4015f6eb043018b898b8955b0a5fc2b679867eed -
Trigger Event:
release
-
Statement type: