This release extends named-channel multiplex support with a channelwise strategy, adds
several pinned patch and slide encoders, and includes a set of correctness and
release-safety fixes. The v0.1 store layout and existing brightfield workflows remain
unchanged.
Correctness and reproducibility
- Redact command-line secrets and persist credential-free canonical source URIs while
still supporting query-authenticated HTTP Zarr stores in memory. - Bind stores and receipts to their source and requested output, reject duplicate cohort
output IDs before dispatch, make receipt writes atomic, and propagate worker-startup
failures to the command exit status. - Enforce immutable model revisions at load time. Patch and slide outputs now carry a
per-model fingerprint covering their effective weights, preprocessing, pooling,
dimension, resolved AMP, and loader contract; a stale or legacy-unfingerprinted output
is recomputed without changinggrid_hashor unrelated model arrays. - Verify composite checkpoints before deserialisation, validate expected embedding
dimensions during completion checks, and mark SEAL experimental until its upstream
base-model fetch can be pinned end to end. - Make colliding human-readable grid labels unique, produce explicitly requested
thumbnails/QC/GeoJSON/slide embeddings when missing, and validate receipts against the
requested grid rather than unioning same-named models across grids. - Harden partial-store recovery and conformance validation, preserve per-axis scale in
slide-relative STAMP coordinates, place clipped border pixels at their true offsets,
reject invalid AMP/batch/geometry settings before model loading, and avoid attributing
an enclosing unrelated Git checkout to an installed wheel.
Models and interoperability
- Add a pluggable multiplex-strategy layer and a built-in
channelwisestrategy for
applying registered RGB patch encoders to named-channel multiplex tissue images. It
records positional channel identity (including a strict metadata-file fallback), marker
selection and order, normalization, RGB conversion, base-model identity, mean/concat
aggregation, and model-agnostic slide pooling without changing brightfield outputs. - Bind native multiplex outputs to the complete effective positional panel. Nuclear
masking accepts one unambiguous nuclear channel or a recognized same-stain group, such
as DNA1/DNA2 or repeated DAPI channels. It averages each multi-channel group in float32
and binds every physical index into grid identity;--no-segremains supported. - Add pinned, forward-validated H0-mini, KEEP, OpenMidnight, and OpenPath patch encoders,
with their licenses, access requirements, preprocessing, and weight hashes recorded. - Add the paired GigaPath-Flash tile and slide encoders with immutable weight and loader
pins, and align original GigaPath's default extraction with its released whole-slide
path: non-overlapping 256-pixel tiles on a 256-pixel lattice, followed by a centre crop
to 224. LongNet receives the stored level-0 coordinates and uses each tile's level-0
extent as its runtime positional divisor, normalizing raw2features' coordinate units
into the tile-index frame of upstream's default 256-pixel tiling. - Repair HIPT downloads by replacing the unavailable unofficial mirror with Mahmood Lab's
commit-pinned, SHA-verified Git LFS checkpoint and record its Commons Clause accurately. - Correct cached OME-Zarr reads for noncanonical spatial axis order. The reader accepts
x/y in either order (with an optional channel axis) and warns whenever another
non-singleton axis is reduced to index zero. Unnamedomero.channelsentries now
retain their physical positions instead of shifting later marker identities. - Refresh the development lock to current
ngff-zarr/ome-zarrreleases while retaining
the existing declared compatibility floor. - Choose the float-pixel
[0,1]versus[0,255]convention once per opened slide instead
of independently for every patch.
API, documentation, and release safety
- Bless
embed_slideas the high-level Python entry point while retainingrun_slideas
the explicit single-grid primitive, resolve injected embedders from their own model
specifications, and make inline-s/--slide-encoderrequests produce missing outputs
on otherwise-complete runs. - Correct the multi-grid, additive-append, readback, and SLURM documentation, and use the
compact PNG project banner so GitHub and PyPI render it consistently. - Add a genuine dependency-lean import/CLI check, built-wheel and source-distribution
smoke installs, package metadata validation, and a release tag/version gate.
Compatibility and migration
- Existing v0.1 stores remain readable; the store layout/schema and model-independent
grid-identity contract are unchanged. Multiplex nuclear masking now binds the resolved
physical nuclear-channel indices. Averaging a recognized same-stain group is an
intentional value change from v0.1 and therefore creates a new grid. Compatible
historical native-multiplex grids remain appendable only when the original OME panel
proves that the v0.1 selector used the same single physical channel. - Original GigaPath now defaults to the released 256-pixel non-overlapping extraction
lattice followed by a centre crop to 224. Existing 224-pixel grids remain readable and
distinct; an unmodified default request creates or selects the correctly keyed
256-pixel grid. - The first request for a model output created before fingerprints were introduced will
recompute that model in place. The old header is deliberately not treated as proof that
pre-v0.2.0 revision pins were enforced. - Plain local output IDs remain basename-based for v0.1 compatibility. Source comparison
prevents accidental reuse, and manifest preflight rejects duplicate derived IDs. - Credentials already persisted by v0.1.0 are not rewritten by this release and should be
rotated separately if the store was shared.