← All posts · Michael Baffour Awuah

Phage plaque measurement instrument

Turn a plate photo into defensible numbers.

Point Plaque Toolkit at a Petri-dish photo and read back per-plaque size, turbidity, count, and titer — the quantities you need to compare wild-type against mutant phages with data, not just pictures.

Desktop app + CLI Runs offline Reads iPhone HEIC CSV + annotated figure
4detection engines — one peer-reviewed and citable
7per-plaque metrics measured on every plate
8drag-and-drop launchers, no terminal needed
3platforms — Windows, macOS, Linux
Channels

Every quantity you'd otherwise argue about, read off the pixels

Plaque Toolkit takes the task every phage lab does constantly — counting and sizing clearings on a plate — and moves it off the eyeball and onto the image, so a wild-type-versus-mutant comparison rests on numbers you can sort, filter, and defend.

CH 01SIZE

Size in mm and pixels

Area (px² and mm²) and diameter (px and mm) for every plaque. Pass your dish diameter with -p 100 and the pixel math calibrates to real millimeters; without it, values stay in pixels.

CH 02TURBIDITY

Turbidity, measured not guessed

Instead of eyeballing "clear vs. turbid," it reports grayscale intensity (MEAN_GRAY, 0–255) and a within-plate relative clarity (TURBIDITY_REL) per plaque — a number you can defend.

CH 03COUNT · TITER

Counts and titer

Total plaques per plate, and PFU/mL straight from the counts. The same plate photographed twice gives the same count — the noise you were quietly adding to every titer is gone.

CH 04PUBLISHED

An engine you can cite

Published mode is the peer-reviewed Plaque Size Tool (Trofimova & Jaschke, Virology 2021) — independently validated, and suitable for a paper without extra validation work on your end.

CH 05PRECISE

Precise mode for dense plates

The third-party PlaqSeg YOLO segmentation model, the published Plaque Size Tool, and a ResNet-18 plaque-vs-texture classifier I trained work together to pull crowded, countable plates apart. The fusion — artifact masks, density switch, gated recall, dedup — is the in-house part.

CH 06SENSITIVE

Sensitive mode for tiny plaques

Lowered size gates catch sub-0.4 mm plaques a default pass skips — useful for exploratory work where the small clearings are exactly the ones you care about.

CH 07EDIT

Interactive editor

Detection is a starting point, not the final word. Click to add a plaque the model missed or remove a speck it shouldn't have counted. The canvas stays editable until you're happy.

CH 08BATCH

Batch a whole folder

Drop a folder of plate photos and get one CSV per plate, automatically. The overnight scan you took can be measured before your coffee's done.

CH 09COMPARE

Cross-phage comparison

The Compare Turbidity tool measures absolute optical density across phages and assembles publication-ready box plots and histograms for multi-phage comparisons.

CH 10FIGURE

Scale-bar stamping

Overlay a physical "5 mm" reference directly onto the annotated photo, so the figure that lands in your slide deck or manuscript carries its own scale.

CH 11HEIC

Reads iPhone HEIC photos

The plate photo on your phone works as-is. Native HEIC conversion means no round-tripping every image through a converter before measuring.

CH 12EXPORT

One-click export

"Export all" writes the CSV of measurements and the annotated figure together. Plaques are numbered row by row from the top, so numbers on the image match rows in the table.

Why this exists

The reviewers wanted the difference quantified

Here is where this tool actually started: I wanted to measure plaques. Not describe them, not photograph them and hope the reader saw what I saw — measure them, so I could put a real number next to a wild-type phage and a real number next to its mutant and say, with a straight face, that these two things are different.

Because for a long time I did it the way everyone does. You take the plate off the bench, hold it to the light, and start tallying clearings by eye. You decide, mostly on feel, which ones look turbid and which look clear. Then you photograph the plate, drop it into a figure, and let the picture do the arguing. Look — the mutant makes smaller, cloudier plaques. You can see it, right?

The reviewers could not see it. Or rather, they weren't willing to take my eyes' word for it — and honestly, they were right not to. The pictures weren't enough. They wanted the difference quantified: how much smaller, how much more turbid, with what spread, across how many plaques. Not a representative photo. Numbers you could put a statistic on.

"Show us" wasn't enough. They wanted "how much." Fair.

That pushback is the whole reason this exists. A photo says the mutant looks different. A table says the mutant's mean diameter is 1.32 mm versus 1.84 mm for wild type, across 142 plaques — and that is a sentence a reviewer can actually check. So I set out to build the thing that turns the first sentence into the second: point it at the plate photo I already had, and get back size, turbidity, count, and titer for every plaque, as a CSV I could analyze and a figure I could publish.

Writing it forced an honesty the eyeball never demands. I couldn't hide behind "clear" and "turbid" anymore — I had to decide what turbidity is in pixels (mean gray relative to the surrounding lawn) and defend that choice. I had to work out exactly how a dish diameter in millimeters maps to pixels, and what breaks when someone forgets to pass it. You cannot fake your way through that.

I'll be straight about how it got built, because it matters: the science is mine — what to measure, why turbidity is defined the way it is, which engine should be the citable one, the whole reviewer-shaped frustration that kicked it off. The engineering I did alongside Claude. I'm a scientist who's gotten good at building tools with AI, not a career software engineer, and I'd rather say that plainly than pretend the Qt interface wrote itself. It let me turn a real, specific piece of reviewer feedback into a working instrument far faster than I could have alone — and now the difference between wild type and mutant isn't something I ask you to see. It's something I can hand you as a number.

Signal chain

From plate photo to comparable numbers

Install once, then either double-click a launcher or run the command line. See INSTALL.md and USER_GUIDE.md in the repo for platform details.

Free · Apache-2.0 · offline

Stop asking reviewers to see it. Hand them the number.

Free, open-source, and it runs entirely on your own machine. Desktop app or command line.