Skip to main content

plate-overview

Whole-plate overview images for multiwell fluorescence microscopy: one thumbnail per well, laid out in plate geometry, with each channel's contrast normalized across the whole plate so wells are comparable to each other by eye.

Vendor-neutral. This package knows nothing about acquisition formats — you hand it pixels through a small typed port and it draws.

Status: pre-alpha. The renderer landed in #2. The API can still change.

Why this exists as its own package

There is exactly one renderer. Every acquisition format reaches it through an adapter, so overviews from different instruments stay comparable. pyphenix (Opera Phenix) is the first consumer. A Leica Thunder .lif adapter is the second.

Install

pip install plate-overview

Use it

Write an adapter with one method, describe the plate in one dict, and call the renderer.

from plate_overview import render_plate_overview


class MySource:
    """Adapter over one acquisition format."""

    def read_well(
        self,
        *,
        row,
        column,
        field,
        stitch_fields,
        timepoint,
        channels,
        z_slices,
        apply_ffc,
    ):
        # Read the well from your format. Return a (C, Z, Y, X) array at
        # acquisition resolution, with C in the order of *channels*.
        # Do not project it and do not resample it.
        return my_format.read(row, column, field, ...)


plate = {
    "plate_id": "PLATE-001",
    "plate_rows": 8,
    "plate_columns": 12,
    "channel_ids": [1, 2],
    "channel_names": {1: "Nuclei", 2: "Marker"},
    "timepoints": [0],
    "fields": [1, 2, 3, 4],
    "well_field_map": {(1, 1): [1, 2, 3, 4], (1, 2): [1, 2, 3, 4]},
    "image_size": (1080, 1080),
    "pixel_size_m": (2.97e-07, 2.97e-07),
}

written = render_plate_overview(MySource(), plate, "overviews/")

render_plate_overview writes one PNG per non-empty channel combo (2**N - 1 PNGs for N channels) plus one JSON sidecar, and returns every path it wrote. Every PNG shares one set of plate-wide per-channel contrast limits, so the wells are comparable by eye.

Three rules bind an adapter:

  • Return full-resolution pixels. The package projects and downsamples once, and an adapter that resamples first shifts the plate contrast.
  • Read on demand. The package discards each well before it reads the next one, so a plate never has to fit in memory.
  • Keep paths out of source_name. The package records a basename.

help(plate_overview.PlateFacts) documents every key, required and optional.

Design notes

CONTEXT.md covers the render port, the gathering loop, and the resampling rule. docs/adr/ records the decisions behind them.

Contributing

Two house rules beyond the usual:

  • No real acquisition data, anywhere. No fixture, example, sidecar or docstring may derive from a real acquisition. No plate identifiers, no operator-bearing paths, no source filenames. Test fixtures are synthetic. This repository is public and the upstream acquisitions are not.
  • Output paths are basenames. The JSON sidecar records a filename, never an absolute path, so a sidecar pasted into an issue does not leak a filesystem layout.

License

BSD 3-Clause. See LICENSE.

Metadata

Release files for plate-overview 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plate-overview 0.1.0
File Size Uploaded
plate_overview-0.1.0.tar.gz 133.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for plate-overview 0.1.0
File Interpreter ABI Platform
plate_overview-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 154.3 kB

Release files / plate_overview-0.1.0.tar.gz

Download URL plate_overview-0.1.0.tar.gz
Size 133.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ceb4c118293fea9f8538257e47697438348fca55d2527d30824ca8b9166ba350
BLAKE2b-256 checksum
How to use checksums
aeec2c65b5dc85e2fedbf74c12b14e6b450383f9b03252f24531a46359989783
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release files / plate_overview-0.1.0-py3-none-any.whl

Download URL plate_overview-0.1.0-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
767210c23e6b551fa368958dacc1a63e4a03d98bb14674f3de818dd451489cab
BLAKE2b-256 checksum
How to use checksums
d6b1c3adb66152efb9840979b3b37084287731967162756ebb26288c8737de68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page