Changelog¶
[0.5.3]¶
Fix¶
- Fix bug in AnnData backend where "raw" entry with encoding-type "null" is written by default in newer anndata versions, which causes compatibility issues with older anndata versions. Now the "raw" entry is removed after writing if it has encoding-type "null".
[0.5.2]¶
Fix¶
- Fix critical bug in masking roi image handling causing incorrect results when image and mask have different pixel sizes.
- Fix bug in loading masking roi images when paths other than default are used.
[0.5.1]¶
Fix¶
- Fix bug causing incorrect channel metadata when creating an image.
- Fix correctly setting the space and time units when creating an image.
- Fix minor bug in
set_channel_windows_with_percentilesmethod.
Chores¶
- Improve logging consistency across the codebase.
[v0.5.0]¶
Features¶
- Add support for OME-NGFF v0.5
- Move to zarr-python v3
- API to delete labels and tables from OME-Zarr containers and HCS plates.
- Allow to explicitly set axes order when building masking roi tables.
- New metadata modification APIs for
Image,Label, andOmeZarrContainer: set_channel_labels- Update channel labelsset_channel_colors- Update channel colorsset_channel_windows- Update channel display windows (start/end values)set_channel_windows_with_percentiles- Update display windows based on data percentilesset_axes_names- Rename axes in the metadataset_axes_unit- Set space and time units for axesset_name- Set the image/label name in metadata- Add translation support in all image/label creation and derivation APIs.
API Breaking Changes¶
- New
Roimodels, now supporting arbitrary axes. - The
compressorargument has been renamed tocompressorsin all relevant functions and methods to reflect the support for multiple compressors in zarr v3. - The
versionargument has been renamed tongff_versionin all relevant functions and methods to specify the OME-NGFF version. - Remove the
parallel_safeargument from all zarr related functions and methods. The locking mechanism is now handled internally and only depends on thecache. - Remove the unused
parentargument fromZarrGroupHandler. - Internal changes to
ZarrGroupHandlerto support cleanup unused apis. - Remove
ngio_loggerin favor of standard warnings module.
Migration Guide (v0.4 → v0.5)¶
Roi API Changes¶
The Roi class now uses a flexible slice-based model supporting arbitrary axes:
# Old (v0.4)
roi = Roi(x=34.1, y=10, x_length=321.6, y_length=330)
# New (v0.5)
roi = Roi.from_values(slices={"x": (34.1, 321.6), "y": (10, 330)}, name=None)
# Accessing coordinates
# Old: roi.x, roi.y, roi.x_length, roi.y_length
# New: roi.get("x").start, roi.get("y").start, roi.get("x").length, roi.get("y").length
Argument Renames¶
# compressor → compressors
# Old (v0.4)
create_empty_ome_zarr(..., compressor=Blosc())
# New (v0.5)
create_empty_ome_zarr(..., compressors=Blosc())
# version → ngff_version
# Old (v0.4)
create_empty_ome_zarr(..., version="0.4")
# New (v0.5)
create_empty_ome_zarr(..., ngff_version="0.4")
Removed Arguments¶
parallel_safe: No longer needed, locking is handled internallyngio_logger: Use Python's standardwarningsmodule instead
Deprecations¶
- Standardized all deprecation warnings to indicate removal in
ngio=0.6. - Deprecated
set_channel_percentilesmethod, useset_channel_windows_with_percentilesinstead.
Bug Fixes¶
- Fix bug in
consolidatefunction when using coarsening mode with non power-of-two shapes. - Fix HCS plate column name formatting to use standardized zero-padding (e.g., column
3is now stored as"03"). - Fix
_stringify_columnnot passingnum_digitsparameter to_format_int_column.
Documentation¶
- Fix incorrect and incomplete docstrings across the codebase:
compute_masking_roi: Added Args/Returns, fixed description (supports 2D, 3D, 4D).lazy_compute_slices: Added Args/Returns sections.LabelsContainer.list: Fixed description (was "Create the /labels group").build_masking_roi_table: Added Args/Returns sections.TablesContainer: Fixed class and method descriptions (were referencing labels instead of tables).NgioPlateMeta.add_well: Fixed description (was "Add an image to the well").NgioPlateMeta.derive: Fixed type annotation in docstring (NgffVersion→NgffVersions).- Added missing docstrings to several HCS helper functions.
[v0.4.7]¶
Bug Fixes¶
- Fix bug adding time axis to masking roi tables.
Bug Fixes¶
- Fix channel selection from
wavelength_id - Fix table opening mode to stop wrtiting groups when opening in append mode.
[v0.4.5]¶
Bug Fixes¶
- Pin Dask to version <2025.11 to avoid errors when writing zarr pyramids with dask (see https://github.com/dask/dask/issues/12159#issuecomment-3548421833)
[v0.4.4]¶
Bug Fixes¶
- Fix bug in channel visualization when using hex colors with leading '#'.
- Remove strict range check in channel window.
[v0.4.3]¶
Bug Fixes¶
- Fix bug in deriving labels and image from OME-Zarr with non standard path names.
- Add missing pillow dependency.
- Update pixi workspace config.
[v0.4.2]¶
API Changes¶
- Make roi.to_slicing_dict(pixel_size) always require pixel_size argument for consistency with other roi methods.
- Make PixelSize object a Pydantic model to allow for serialization.
Bug Fixes¶
- Improve robustness when rounding Rois to pixel coordinates.
[v0.4.1]¶
Bug Fixes¶
- Fix bug in zoom transform when input axes contain unknown axes (e.g. virtual axes). Now unknown axes are treated as virtual axes and set to 1 in the target shape.
[v0.4.0]¶
Features¶
- Add Iterators for image processing pipelines
- Add support for time in rois and roi-tables
- Building masking roi tables expanded to time series data
- Add zoom transformation
- Add support for rescaling on-the-fly masks for masked images
- Big refactor of the io pipeline to support iterators and lazy loading
- Add support for customize dimension separators and compression codecs
- Simplify AxesHandler and Dataset Classes
API Changes¶
- The image-like
get_*api have been slightly changed. Now if a single int is passed as slice_kwargs, it is interpreted as a single index. So the dimension is automatically squeezed. - Remove the
get_*_delayedmethods, now data cam only be loaded as numpy or dask array.Use theget_as_daskmethod instead, which returns a dask array that can be used with dask delayed. - A new model for channel selection is available. Now channels can be selected by name, index or with
ChannelSelectionModelobject. - Change
table_namekeyword argument tonamefor consistency in all table concatenation functions, e.g.concatenate_image_tables,concatenate_image_tables_as, etc. - Change to
Dimensionclass.get_shapeandget_canonical_shapehave been removed,getuses new keyword argumentsdefaultinstead ofstrict. - Image like objects now have a more clean API to load data. Instead of
get_arrayandset_array, they now useget_as_numpy, andget_as_daskfor delayed arrays. - Also for
get_roinow specific methods are available. For ROI objects, theget_roi_as_numpy, andget_roi_as_daskmethods. - Table ops moved to
ngio.images - int
labelas an explicit attribute inRoiobjects (previously only in stored in name and relying on convention) - Slight changes to
ImageandLabelobjects. Some minor attributes have been renamed for consistency.
Table specs¶
- Add
t_secondandlen_t_secondto ROI tables and masking ROI tables
[v0.3.5]¶
- Remove path normalization for images in wells. While the spec requires paths to be alphanumeric, this patch removes the normalization to allow for arbitrary image paths.
[v0.3.4]¶
- allow to write as
anndata_v1for backward compatibility with older ngio versions.
[v0.3.3]¶
Chores¶
- improve dataset download process and streamline the CI workflows
[v0.3.2]¶
API Changes¶
- change table backend default to
anndata_v1for backward compatibility. This will be chaanged again when ngiov0.2.xis no longer supported.