Physarum polycephalum time-lapse imaging

Sep 21, 2026

Time-lapse colour scans of the slime mould Physarum polycephalum growing among arrangements of oat flakes, collected by Kyle Harrington and Iris Harrington in 2023. In each of four experiments, six 90 mm dishes sat together on a flatbed scanner (Canon CanoScan LiDE 400), which scanned them every 2 or 5 minutes for 2.5 to 6 days. The release splits them into 24 dish series: 51,036 dish frames from 8,506 scans, 132.93 GB of OME-Zarr.

The dataset is scanned pixels only. It has no segmentations or derived measurements, so it is raw material for studying network formation, foraging and growth dynamics, and for training and testing image-analysis methods.

Dataset: Harrington, K. and Harrington, I. (2026). Physarum polycephalum time-lapse imaging: 24 dish series from four six-dish experiments (OME-Zarr). Zenodo. doi:10.5281/zenodo.22868368 · record · licensed CC-BY-4.0

Experiment 009, final public frame of all six dishes
Experiment 009 at its last public frame, 113 hours after the first. Dishes 0–2 on top, 3–5 below.

The experiments

experimentframesintervalrecorded (local time)size
0011,6965 min2023-08-26 → 09-0126.3 GB
0021,5275 min2023-09-01 → 09-0624.8 GB
0081,8912 min2023-09-29 → 10-0229.2 GB
0093,3922 min2023-10-08 → 10-1352.6 GB

Frames are per dish; each experiment has six dishes. Exact first and last timestamps are in the record’s manifests.

What changes from dish to dish is the arrangement of the oat flakes and of the Physarum inoculum. Scans were made in the Alexandria, VA area (America/New_York, UTC−04:00 throughout).

Two series are shorter than the recordings they come from. Experiment 002 stops before its last two frames, which are blown out to near white. Experiment 009 stops before an interval of suspected contamination. The full recordings are kept privately.

Every dish

Each strip shows one dish at four evenly spaced times, from the first to the last public frame, labelled with hours since the first frame. Frames are rendered straight from the released archives. Click a strip to enlarge it; the caption links that dish’s archive.

Experiment 001 · every 5 min · 141 hours

Dish 0 (r0c0) · 1,696 frames, four evenly spaced frames from first to last
Dish 0 (r0c0) · 1,696 frames · physarum-001-dish0-r0c0.ome.zarr.zip · 4.53 GB
Dish 1 (r0c1) · 1,696 frames, four evenly spaced frames from first to last
Dish 1 (r0c1) · 1,696 frames · physarum-001-dish1-r0c1.ome.zarr.zip · 4.38 GB
Dish 2 (r1c0) · 1,696 frames, four evenly spaced frames from first to last
Dish 2 (r1c0) · 1,696 frames · physarum-001-dish2-r1c0.ome.zarr.zip · 4.45 GB
Dish 3 (r1c1) · 1,696 frames, four evenly spaced frames from first to last
Dish 3 (r1c1) · 1,696 frames · physarum-001-dish3-r1c1.ome.zarr.zip · 4.32 GB
Dish 4 (r2c0) · 1,696 frames, four evenly spaced frames from first to last
Dish 4 (r2c0) · 1,696 frames · physarum-001-dish4-r2c0.ome.zarr.zip · 4.41 GB
Dish 5 (r2c1) · 1,696 frames, four evenly spaced frames from first to last
Dish 5 (r2c1) · 1,696 frames · physarum-001-dish5-r2c1.ome.zarr.zip · 4.23 GB

Experiment 002 · every 5 min · 127 hours

Dish 0 (r0c0) · 1,527 frames, four evenly spaced frames from first to last
Dish 0 (r0c0) · 1,527 frames · physarum-002-dish0-r0c0.ome.zarr.zip · 4.11 GB
Dish 1 (r0c1) · 1,527 frames, four evenly spaced frames from first to last
Dish 1 (r0c1) · 1,527 frames · physarum-002-dish1-r0c1.ome.zarr.zip · 4.14 GB
Dish 2 (r1c0) · 1,527 frames, four evenly spaced frames from first to last
Dish 2 (r1c0) · 1,527 frames · physarum-002-dish2-r1c0.ome.zarr.zip · 4.20 GB
Dish 3 (r1c1) · 1,527 frames, four evenly spaced frames from first to last
Dish 3 (r1c1) · 1,527 frames · physarum-002-dish3-r1c1.ome.zarr.zip · 4.16 GB
Dish 4 (r2c0) · 1,527 frames, four evenly spaced frames from first to last
Dish 4 (r2c0) · 1,527 frames · physarum-002-dish4-r2c0.ome.zarr.zip · 4.27 GB
Dish 5 (r2c1) · 1,527 frames, four evenly spaced frames from first to last
Dish 5 (r2c1) · 1,527 frames · physarum-002-dish5-r2c1.ome.zarr.zip · 3.93 GB

Experiment 008 · every 2 min · 63 hours

Dish 0 (r0c0) · 1,891 frames, four evenly spaced frames from first to last
Dish 0 (r0c0) · 1,891 frames · physarum-008-dish0-r0c0.ome.zarr.zip · 5.00 GB
Dish 1 (r0c1) · 1,891 frames, four evenly spaced frames from first to last
Dish 1 (r0c1) · 1,891 frames · physarum-008-dish1-r0c1.ome.zarr.zip · 4.78 GB
Dish 2 (r1c0) · 1,891 frames, four evenly spaced frames from first to last
Dish 2 (r1c0) · 1,891 frames · physarum-008-dish2-r1c0.ome.zarr.zip · 4.95 GB
Dish 3 (r1c1) · 1,891 frames, four evenly spaced frames from first to last
Dish 3 (r1c1) · 1,891 frames · physarum-008-dish3-r1c1.ome.zarr.zip · 4.74 GB
Dish 4 (r2c0) · 1,891 frames, four evenly spaced frames from first to last
Dish 4 (r2c0) · 1,891 frames · physarum-008-dish4-r2c0.ome.zarr.zip · 4.91 GB
Dish 5 (r2c1) · 1,891 frames, four evenly spaced frames from first to last
Dish 5 (r2c1) · 1,891 frames · physarum-008-dish5-r2c1.ome.zarr.zip · 4.80 GB

Experiment 009 · every 2 min · 113 hours

Dish 0 (r0c0) · 3,392 frames, four evenly spaced frames from first to last
Dish 0 (r0c0) · 3,392 frames · physarum-009-dish0-r0c0.ome.zarr.zip · 9.22 GB
Dish 1 (r0c1) · 3,392 frames, four evenly spaced frames from first to last
Dish 1 (r0c1) · 3,392 frames · physarum-009-dish1-r0c1.ome.zarr.zip · 8.38 GB
Dish 2 (r1c0) · 3,392 frames, four evenly spaced frames from first to last
Dish 2 (r1c0) · 3,392 frames · physarum-009-dish2-r1c0.ome.zarr.zip · 9.32 GB
Dish 3 (r1c1) · 3,392 frames, four evenly spaced frames from first to last
Dish 3 (r1c1) · 3,392 frames · physarum-009-dish3-r1c1.ome.zarr.zip · 8.17 GB
Dish 4 (r2c0) · 3,392 frames, four evenly spaced frames from first to last
Dish 4 (r2c0) · 3,392 frames · physarum-009-dish4-r2c0.ome.zarr.zip · 9.15 GB
Dish 5 (r2c1) · 3,392 frames, four evenly spaced frames from first to last
Dish 5 (r2c1) · 3,392 frames · physarum-009-dish5-r2c1.ome.zarr.zip · 8.40 GB

Final frames

The last public frame of the other three experiments.

Experiment 001, final frame of all six dishes
Experiment 001, 141 hours.

Experiment 002, final frame of all six dishes
Experiment 002, 127 hours.

Experiment 008, final frame of all six dishes
Experiment 008, 63 hours.

Format

Each dish series is one OME-NGFF 0.5 image (Zarr v3), packaged as an uncompressed ZIP64 archive so the Zarr chunks can be read without unpacking:

  • s0: uint8 array with axes t, c, y, x (RGB), compressed losslessly with Blosc zstd level 5.
  • acquisition/timestamp_utc_ns: exact capture time of every frame. The OME t scale is the nominal interval; use these timestamps for anything quantitative.
  • dish_support, registration/dish_circle_xyr_px: the region kept for the dish and the dish circle fitted to each frame.

Pixels inside the dish support are bit-exact copies of the source scans, and pixels outside it are zero. The scanner images each dish from below, through its base, so every frame is a mirror image of the dish as seen from above. The images are not registered: dish positions drift slightly between scans, and the per-frame circle fits record that drift. Every scan covers the scanner’s full 216 × 297 mm bed at 300 dpi, so the pixel pitch is 0.08467 mm (11.81 px/mm) for every dish. Use that value rather than the millimetre scale stored in the images: it was estimated from the fitted dish diameter and ranges from 11.02 to 11.73 px/mm. The record’s notes carry the same correction.

The record also holds a per-frame manifest for every series (timestamp, source filename, checksum, fitted circle), SHA256SUMS, QC notes, CITATION.cff, and release-summary.json, which has every number above in machine-readable form.

Reading the data

Pooch can download any dish by name. It reads the file list and checksums from the Zenodo record, verifies each download, and caches it, so later calls return the local copy. Archives are 4–9 GB each.

import pooch  # pooch >= 1.8; install tqdm for the progress bar
import zarr   # zarr >= 3.1

physarum = pooch.create(
    path=pooch.os_cache("physarum"),
    base_url="doi:10.5281/zenodo.22868368/",
)
physarum.load_registry_from_doi()

path = physarum.fetch("physarum-009-dish3-r1c1.ome.zarr.zip", progressbar=True)

root = zarr.open_group(zarr.storage.ZipStore(path, mode="r"), mode="r", zarr_format=3)
frames = root["s0"]                               # (3392, 3, 1169, 1276) uint8
frame = frames[0]                                 # (3, y, x) RGB
times = root["acquisition/timestamp_utc_ns"][:]   # int64, UTC nanoseconds

To open an archive you already have, pass its path to zarr.storage.ZipStore. zarr-python 3 and TensorStore are tested. Older OME-NGFF 0.4 / Zarr v2 viewers may not open the files.

Citation

Please cite the dataset by its DOI, 10.5281/zenodo.22868368:

@dataset{harrington_2026_physarum,
  author    = {Harrington, Kyle and Harrington, Iris},
  title     = {Physarum polycephalum time-lapse imaging: 24 dish series
               from four six-dish experiments (OME-Zarr)},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.22868368},
  url       = {https://doi.org/10.5281/zenodo.22868368}
}

Related work on Physarum in spatial ecosystems: Complex population dynamics in a spatial microbial ecosystem with Physarum polycephalum (Biosystems, 2021).