Desktop application for quantifying cells in microscopy images. Segmentation, per-cell measurements, assays and export, through a graphical interface.
Install · Quick start · What it does · Limitations · Citing
CellCounter reads a folder of microscopy images, segments the cells with a choice of models, and reports per-cell measurements, size distributions and assay results. It handles the file formats microscopes write, Z-stacks and multi-channel images, and covers counts, size classes, marker-positive fractions, colocalization, confluence, wound closure, foci per cell and migration.
These analyses are usually done with an ImageJ macro or a CellProfiler pipeline. CellCounter does them through a graphical interface instead. It applies to any cell type a supported model can segment.
Processing is local. There is no account, no upload, and no network transfer of image data.
Cellpose provides its own graphical interface, and CellCounter does not replace it. It covers requirements the general-purpose tools do not provide directly:
| Installation without environment setup | The installer sets up the Python environment in the background. There is no conda, pip, or PATH configuration. |
| Size classes in addition to masks | Cells are binned into size categories in micrometres, using a pixel size read from the image metadata. |
| Assays in addition to counts | Marker-positive fraction, colocalization, confluence, wound closure, foci per cell, and others. |
| Local processing | Everything runs on the local machine. For images derived from patient material this is a requirement. |
| Model | Best for |
|---|---|
| Cellpose-SAM | Large or irregular cells — where cyto3 merges neighbours into one mask |
Cellpose cyto3 cyto2 nuclei |
General cytoplasm and nuclei |
| StarDist | Crowded, roughly convex nuclei |
| Omnipose | Bacteria and elongated / filamentous cells |
| Threshold + watershed | No weights, no download, no GPU — instant and deterministic |
| Your own model | Load a fine-tuned Cellpose checkpoint or a StarDist model directory |
Plus a second-opinion mode: run two detectors and review only the cells where they disagree.
Reads Zeiss .czi, Nikon .nd2, Leica .lif, Olympus .oif .oib .oir, and TIFF / OME-TIFF / PNG —
no conversion step. Handles Z-stacks (max / sum / mean projection) and multi-channel images,
including which channel to segment on.
|
Per cell
|
Per image
|
|
Fluorescence
|
Time series & morphology
|
- Manual correction — add, delete, merge, split, resize, or trace a cell by hand. Corrections persist and the exported count is the corrected count.
- Compare two conditions with a Mann-Whitney U test and effect size — read the limitations first.
- Score against ground truth — F1, precision, recall vs. your own hand counts.
- Export — PDF report, annotated images, per-cell CSV, per-image summary CSV with one column per size bin, ImageJ ROI sets, and GeoJSON (QuPath).
- Analysis protocols — save model, diameter, bins and calibration to a file so a whole lab runs identical settings.
- Duplicate detection (SHA-256) so the same field is never counted twice.
Requires macOS 15 or later. Universal binary (Apple silicon and Intel).
- Download
CellCounter-v*.zipfrom the Releases page. - Unzip and move
CellCounting.appinto Applications. (The application is called CellCounter; the bundle on disk is still namedCellCounting.app.) - The app is not notarized, so the first launch is blocked. Open System Settings → Privacy & Security, scroll to the bottom, and click Open Anyway. Full walkthrough: docs/INSTALL.md.
- On first use, open the Models tab and click Install. The app sets up its own Python environment — a few minutes, once.
macOS says the app is "damaged"
It isn't. That message is Gatekeeper blocking an unsigned, quarantined download. Move the app to Applications and run:
xattr -cr /Applications/CellCounting.appThen open it normally. This applies to all unsigned builds here, including the cross-platform .dmg.
A rebuild (Tauri + React, in desktop/) is published as a desktop-v* prerelease:
| Platform | File | Note |
|---|---|---|
| Windows | CellCounter_*_x64-setup.exe |
Unsigned — SmartScreen warns; More info → Run anyway |
| macOS | CellCounter_*_universal.dmg |
Unsigned — right-click → Open |
| Linux | — | Builds in CI; no packaged installer yet |
uv is bundled, so nothing extra to install. On first run, open the Models tab and install Cellpose.
Note
The preview installs and runs but has not been verified at runtime on real data, and it lags the macOS app: it has Cellpose-SAM and the per-cell shape metrics, but not the vendor formats, Z-stacks or the assay suite.
- Open a folder of images.
- Pick a model in the Models tab and install it if needed.
- Set the pixel size — filled in automatically when the files carry calibration metadata.
- Run detection, then review the overlay and fix any misses by hand.
- Open Compare to test two conditions, or Export for a PDF, CSV, ROI set or GeoJSON.
The interface handles loading, calibration, correction, size-binning, assays, statistics and export. A local Python sidecar does the segmentation. They talk over a pipe. No data leaves the computer.
Your images ──▶ CellCounter GUI ──▶ Python sidecar (Cellpose)
▲ │
└────── masks, counts ───┘
calibration · size bins · assays · stats · export
Important
CellCounter is a measurement tool; its built-in statistics are for exploration. Read this before a number from it goes into a paper.
The replication unit is the biological replicate, not the cell
The Compare tab's Mann-Whitney U test pools every individual cell across all images in a condition and treats them as independent. For condition-level inference this is pseudoreplication: it inflates n by orders of magnitude and returns very small p-values for biologically trivial differences.
For publication, aggregate first. Export the per-cell CSV, compute one summary per image (or per patient, or per well) — for example the median diameter — and test on those replicate-level values, or use a mixed-effects model with image or patient as a random effect. Treat the in-app pooled test as descriptive only.
No multiple-comparison correction
Comparing more than two conditions by re-selecting pairs gives uncorrected p-values and significance markers. Apply Holm or Benjamini-Hochberg (or an omnibus Kruskal-Wallis first) when reporting several contrasts.
Segmentation is not bit-for-bit reproducible across machines
Counts depend on the model version, the device (GPU or CPU), and the PyTorch and NumPy versions. Expect small run-to-run and machine-to-machine differences. For a reproducible methods section, record the model, the app version and the resolved dependency versions — the exported provenance sidecar captures model, calibration and parameters.
"Size" is an equivalent diameter
Each cell's size is the diameter of a circle with the same segmented area (2·√(area/π)) — a shape-agnostic
proxy, not a measured long or short axis. Per-cell "confidence" is a monotonic transform of Cellpose's
cell-probability, not a calibrated probability.
Assay results are withheld rather than guessed
Where a number cannot be produced honestly the app says so. For example, % marker-positive is withheld when the population shows no evidence of two distinct groups — an automatic threshold will otherwise split a single uniform population and report a confident, meaningless percentage.
Done and in CI:
- Windows, Linux and macOS from one Tauri + React codebase
- One-command environment setup via
uv - Cellpose-GUI parity — draw, merge, split, undo/redo,
_seg.npyinterchange - Persistent-worker engine — the model stays loaded across a batch
Not yet:
- Verified cross-platform release, after the pipeline is checked on real batches
- Feature parity between the cross-platform app and macOS
- In-browser version — Cellpose
cyto3client-side on WebGPU, no installation - Train-from-GUI — the Fine-tune screen is currently an illustrative demo on synthetic data; training on your own corrected cells is not wired up yet
Several tools share the name "Cell Counter". This project is not affiliated with, and is distinct from, the 2014 application CELLCOUNTER: Novel Open-Source Software for Counting Cell Migration and Invasion In Vitro (BioMed Research International, for Boyden-chamber assays) and the ImageJ / Fiji Cell Counter plugin (manual tally counting). CellCounter here is a Cellpose-driven counting and size-classification desktop application.
If CellCounter is useful in your work, please cite it (see CITATION.cff) and the segmentation model you ran. Because segmentation is entirely Cellpose-mediated:
- Stringer, C., Wang, T., Michaelos, M., & Pachitariu, M. (2021). Cellpose: a generalist algorithm for cellular segmentation. Nature Methods 18, 100–106.
- Pachitariu, M., & Stringer, C. (2022). Cellpose 2.0: how to train your own model. Nature Methods 19, 1634–1641.
- Using
cyto3 + restoreor Cellpose-SAM? Also cite the Cellpose 3 and Cellpose-SAM papers listed in the Cellpose repository. - Using StarDist or Omnipose? Cite their papers too.
Cellpose (BSD-3-Clause) performs the segmentation. PyTorch, NumPy, SciPy, scikit-image and tifffile provide the computation; vendor microscope formats are read with permissive BSD-3 readers. Full inventory and licenses: THIRD_PARTY_LICENSES.md.
MIT — see LICENSE. Contributions welcome; see CONTRIBUTING.md.