What’s New in playNano 0.3.0¶
Release date: 2026-03-06
This release extends the plugin system, adds new parameters to particle tracking and feature detection, and introduces three breaking changes to output field names and data structures.
Added¶
3D Stack Plugins: The processing pipeline now supports 3D stack operations via a new
playnano.video_processingentry point, alongside the existingplaynano.filtersentry point for 2D frame plugins. The CLI and interactive wizard recognise and expose video plugins as a step type.Morphological Opening in Feature Detection:
FeatureDetectionModulenow acceptsmorph_openingandsep_radiusparameters to optionally separate touching or overlapping particles using per-object morphological opening with a configurable disk structuring element.Gap-Tolerant Particle Tracking:
ParticleTrackingModulenow accepts two new parameters:max_missing— allows tracks to persist across frames with missing detections (default: 0, preserving previous behaviour).distance_scale— scales the distance threshold with time since last detection using"constant"(default),"linear", or"sqrt"modes.
Crop Padding:
intersection_cropandcrop_squarenow accept apadparameter to expand the crop region outward beyond the finite-pixel intersection, filling new pixels with NaN.CI Improvements: Pre-commit and test workflows now trigger on
devbranch pull requests. The test workflow also supportsworkflow_dispatchfor manual triggering.CONTRIBUTING.md covering development setup, project structure, code style, type hint and docstring requirements, branching workflow, and plugin contribution guidance.
Changed¶
Breaking Changes¶
Particle Tracking output structure:
Track key
centroidsrenamed tocoords.Tracks now use a dense representation spanning from first to last detection. Frames where a particle was not detected have
Noneentries incoordsandpoint_indices.Migration: replace
track["centroids"]withtrack["coords"]and handleNoneentries wheremax_missing > 0.
flatten_particle_featuresoutput columns:mean_intensity,min_intensity,max_intensityrenamed tomean,min,max.Migration: update any downstream code or saved pipelines referencing the old column names.
intersection_cropandcrop_squaremetadata:boundskey replaced byintersection_bounds(exclusive-end coordinates).New keys added:
intersection_shape,requested_bounds,applied_pad,pad_param.Migration: replace
meta["bounds"]withmeta["intersection_bounds"].
Pre-commit Python version pinned to 3.11; demo notebook kernels updated to 3.11.
markdownlint-cli2downgraded to v0.10.0 as a workaround for a CI dependency conflict.Author name updated to “Daniel E. Rollins” in
pyproject.toml.
Fixed¶
Numerous typos corrected across docstrings, inline comments, docs, and tests.
CLI
SKIP_PARAM_NAMESexpanded to prevent internal array parameter names (imarray,array,frame,video) from appearing in the interactive wizard.
Documentation¶
API reference restructured with captioned sections: Core, Analysis, Analysis Modules, Processing, IO, CLI, and GUI.
Module-level docstrings improved for
feature_detectionandparticle_tracking, includingSee Alsocross-references, version directives, and AI transparency notes.processing.rstupdated to document theplaynano.video_processingplugin entry point and link to the plugins repository.Various improvements to quickstart, processing, and notebook documentation pages.
Pytest Coverage Added¶
Morphological opening: single blob preservation, two-blob splitting, small blob fallback, label contiguity, dtype and shape checks.
Particle tracking: gap tolerance, distance scaling modes, detection module fallback logic, missing coord and mask key handling.
Video plugin resolution and step type identification.
Crop padding:
_normalize_padvalid and invalid inputs,_crop_with_padin- and out-of-bounds behaviour,intersection_cropandcrop_squarewith and without padding.AFMImageStack.apply()branches: video filter, video plugin, stack edit, method, and unrecognised step type.