{"name":"ndevio","display_name":"ndevio","visibility":"public","icon":"","categories":["IO","Dataset","Utilities"],"schema_version":"0.2.1","on_activate":null,"on_deactivate":null,"contributions":{"commands":[{"id":"ndevio.get_reader","title":"Open file with ndevio","python_name":"ndevio._napari_reader:napari_get_reader","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_plugin_installer_widget","title":"Install BioIO Reader Plugins","python_name":"ndevio.widgets._plugin_install_widget:PluginInstallerWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_utilities_widget","title":"I/O Utilities","python_name":"ndevio.widgets._utilities_container:UtilitiesContainer","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_ndev_logo","title":"Load ndev logo","python_name":"ndevio.sampledata._sample_data:ndev_logo","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_scratch_assay","title":"Load scratch assay data","python_name":"ndevio.sampledata._sample_data:scratch_assay","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_neocortex","title":"Load neocortex data","python_name":"ndevio.sampledata._sample_data:neocortex","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_neuron_raw","title":"Load raw neuron data","python_name":"ndevio.sampledata._sample_data:neuron_raw","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_neuron_labels","title":"Load neuron labels data","python_name":"ndevio.sampledata._sample_data:neuron_labels","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"ndevio.make_neuron_labels_processed","title":"Load processed neuron labels data","python_name":"ndevio.sampledata._sample_data:neuron_labels_processed","short_title":null,"category":null,"icon":null,"enablement":null}],"readers":[{"command":"ndevio.get_reader","filename_patterns":["*.1sc","*.264","*.265","*.2fl","*.3fr","*.3g2","*.a64","*.acff","*.adp","*.afi","*.afm","*.aim","*.al3d","*.am","*.amiramesh","*.amr","*.amv","*.apl","*.apng","*.arf","*.arw","*.asf","*.avc","*.avi","*.avs","*.avs2","*.bay","*.bif","*.bin","*.bip","*.bmp","*.btf","*.c01","*.cdg","*.cfg","*.cgi","*.ch5","*.cif","*.cr2","*.crw","*.csv","*.ct","*.cxd","*.czi","*.dat","*.dcm","*.dcr","*.dib","*.dip","*.dir","*.dm2","*.dm3","*.dm4","*.dng","*.dnxhd","*.dti","*.dv","*.dvd","*.eps","*.erf","*.exp","*.exr","*.fdf","*.fff","*.ffr","*.fits","*.flex","*.fli","*.frm","*.gel","*.gif","*.grey","*.hdf","*.hdr","*.hed","*.his","*.htd","*.html","*.hx","*.i2i","*.icb","*.ics","*.ids","*.if","*.iiq","*.im3","*.img","*.ims","*.imt","*.inr","*.ipl","*.ipm","*.ipw","*.ism","*.jfif","*.jif","*.jng","*.jp2","*.jpg","*.jpk","*.jpx","*.l2d","*.labels","*.lei","*.lif","*.liff","*.lim","*.lms","*.lsm","*.mcidas","*.mdb","*.mnc","*.mng","*.mod","*.mov","*.mp4","*.mpo","*.mrc","*.mrw","*.msp","*.msr","*.mtb","*.mvd2","*.naf","*.nd","*.nd2","*.ndpi","*.ndpis","*.nef","*.nhdr","*.nii","*.nii.gz","*.nrrd","*.obf","*.obsep","*.oib","*.oif","*.oir","*.ome","*.ome.btf","*.ome.tf2","*.ome.tf8","*.ome.tif","*.ome.tiff","*.ome.xml","*.par","*.pbm","*.pcoraw","*.pcx","*.pdf","*.pds","*.pgm","*.pic","*.pict","*.png","*.pnl","*.ppm","*.pr3","*.ps","*.psd","*.qptiff","*.r3d","*.raw","*.rcpnl","*.rec","*.scn","*.sdt","*.seq","*.sif","*.sld","*.sldy","*.sm2","*.sm3","*.spc","*.spe","*.spi","*.spider","*.stk","*.stp","*.svs","*.sxm","*.tf2","*.tf8","*.tfr","*.tga","*.tif","*.tiff","*.tiles.ome.tif","*.tnb","*.top","*.txt","*.v","*.vms","*.vsi","*.vws","*.wat","*.wlz","*.xdce","*.xml","*.xqd","*.xqf","*.xv","*.xvthumb","*.xys","*.zarr","*.zarr*","*.zfp","*.zfr","*.zif","*.zvi"],"accepts_directories":true}],"writers":null,"widgets":[{"command":"ndevio.make_plugin_installer_widget","display_name":"Install BioIO Reader Plugins","autogenerate":false},{"command":"ndevio.make_utilities_widget","display_name":"I/O Utilities","autogenerate":false}],"sample_data":[{"command":"ndevio.make_ndev_logo","key":"ndevio.ndev_logo","display_name":"ndev logo"},{"command":"ndevio.make_scratch_assay","key":"ndevio.scratch_assay","display_name":"Scratch Assay Labeled (10T+2Ch) (4MB)"},{"command":"ndevio.make_neocortex","key":"ndevio.neocortex","display_name":"Neocortex (3Ch) (2MB)"},{"command":"ndevio.make_neuron_raw","key":"ndevio.neuron_raw","display_name":"Neuron Raw (2D+4Ch) (32MB)"},{"command":"ndevio.make_neuron_labels","key":"ndevio.neuron_labels","display_name":"Neuron Labels (2D+4Ch)"},{"command":"ndevio.make_neuron_labels_processed","key":"ndevio.neuron_labels_processed","display_name":"Neuron Labels Processed (2D+4Ch)"}],"themes":null,"menus":{},"submenus":null,"keybindings":null,"configuration":[]},"package_metadata":{"metadata_version":"2.4","name":"ndevio","version":"0.9.2","dynamic":null,"platform":null,"supported_platform":null,"summary":"Read, write, and manage images in napari","description":"# ndevio\n\n[![License BSD-3](https://img.shields.io/pypi/l/ndevio.svg?color=green)](https://github.com/ndev-kit/ndevio/raw/main/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/ndevio.svg?color=green)](https://pypi.org/project/ndevio)\n[![Python Version](https://img.shields.io/pypi/pyversions/ndevio.svg?color=green)](https://python.org)\n[![tests](https://github.com/ndev-kit/ndevio/workflows/tests/badge.svg)](https://github.com/ndev-kit/ndevio/actions)\n[![codecov](https://codecov.io/gh/ndev-kit/ndevio/branch/main/graph/badge.svg)](https://codecov.io/gh/ndev-kit/ndevio)\n[![napari hub](https://img.shields.io/endpoint?url=https://api.napari-hub.org/shields/ndevio)](https://napari-hub.org/plugins/ndevio)\n[![npe2](https://img.shields.io/badge/plugin-npe2-blue?link=https://napari.org/stable/plugins/index.html)](https://napari.org/stable/plugins/index.html)\n[![Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-grayscale-inverted-border-purple.json)](https://github.com/copier-org/copier)\n\n**A generalized image format reader for napari built on top of [bioio]**\n\n`ndevio` provides flexible, metadata-aware image I/O for images in napari.\nOriginally developed as part of napari-ndev (as a spiritual successor to [napari-aicsimageio]), `ndevio` has since been separated into its own plugin as part of the [ndev-kit] and is intended to be a feature-rich, metadata-aware image reader for a variety of formats in napari, with a focus on microscopy images.\n\n----------------------------------\n\n## Features\n\n- **Extensive format support** via [bioio] and its plugin system — read OME-TIFF, OME-Zarr, common image and movie formats, proprietary formats (CZI, LIF, ND2), and many more (with bioformats)!\n- **Multi-scene handling** — interactive widget for selecting between scenes/positions in multi-scene files\n- **Thorough metadata extraction** — extract and apply scale, units, axis labels, metadata (inc. OME) to napari layers\n- **Remote file support** — compatible Bioio readers,such as [bioio-ome-zarr], can read from remote filesystems (HTTP, S3, etc.) with dask-backed loading\n- **Native multiscale support** — automatically read and display multiscale images when supported by the reader. For best experience, turn on the asynchronous rendering experimental setting in napari.\n- **Configurable behavior** via [ndev-settings] — customize reader priority, multi-scene handling, and more\n- **Smart plugin installation** — automatic suggestions to install missing bioio reader plugins\n- **Programmatic API** — `nImage` class for napari-ready metadata extraction\n- **Batch utilities** — legacy widget for batch concatenation (with [nbatch]) and metadata management, with features being superseded by [napari-metadata]\n- **Sample data** — demonstrates ndevio metadata handling and capabilities\n\n![napari viewer showing scene selection widget and napari-metadata widget displaying the metadata provided by ndevio a .czi file](https://github.com/ndev-kit/ndevio/blob/main/resources/ndevio-scene-and-metadata.png?raw=true)\n\n## Installation\n\nYou can install `ndevio` from [PyPI] or via the napari plugin manager:\n\n```bash\npip install ndevio\n```\n\nIf you would like to try out ndevio, you can run napari in a temporary environment with [uv]:\n\n```bash\nuvx --with ndevio -p 3.13 \"napari[all]\"\n```\n\nYou can even try an example remote zarr image, like from the [OME-NGFF samples](https://idr.github.io/ome-ngff-samples/):\n\n```bash\nuvx --with ndevio --with pyqt6 -p 3.13 \"napari>=0.7.0\" --plugin ndevio \"https://uk1s3.embassy.ebi.ac.uk/idr/zarr/v0.4/idr0048A/9846152.zarr/\"\n```\n\nTo contibute to ndevio or experiment with the latest features, see [Contributing.md](CONTRIBUTING.md) for development setup instructions. Conda-forge availability is coming soon!\n\n### Additional Image Format Support\n\n**ndevio** uses [bioio](https://github.com/bioio-devs/bioio) for flexible image reading. Basic formats (TIFF, OME-TIFF, OME-Zarr, PNG, etc.) are supported out of the box via:\n\n- `bioio-ome-tiff` - OME-TIFF files\n- `bioio-ome-zarr` - OME-Zarr files\n- `bioio-tifffile` - General TIFF files\n- `bioio-imageio` - PNG, JPEG, and other common formats\n\nIf your image format is not supported by the default readers, then you will get a warning and (by default in napari) a widget to install the suggested reader.\nIf you know of your additional proprietary formats, install the appropriate bioio reader.\nSee the [bioio documentation](https://bioio-devs.github.io/bioio/) for the full list of available readers.\n**Note**: The use of `bioio-bioformats` requires an automatic, initial download of required Java files, this takes some time. Most native format readers do a better job reading metadata compared to `bioio-bioformats`.\n\nPlease [file an issue] if you encounter problems with image reading!\n\n## Usage\n\n### In napari\n\nSimply drag and drop image files into napari. `ndevio` handles the rest! To learn more about the decisions that ndevio (and its settings) makes when loading images, see [How ndevio Handles Images](#how-ndevio-handles-images) below.\n\n#### Multi-scene Images\n\nWhen opening multi-scene files (e.g., multi-position acquisitions, mosaics), a **Scene Widget** appears in the viewer, allowing you to select which scene to display. Configure default behavior via the Settings widget.\n\n#### Bioio Reader Plugin Installation Widget\n\nIf you open a file that requires a bioio reader not currently installed, ndevio will display a **BioIO Plugin Installation widget** in napari suggesting the appropriate plugin to install.\n\n![bioio plugin installation suggestion widget](https://github.com/ndev-kit/ndevio/blob/main/resources/bioio-plugin-install-widget.png?raw=true)\n\nThis widget taps into the `napari-plugin-manager` to install the bioio reader plugin from PyPI via a GUI. You may invoke this widget manually at any time via `Plugins > ndevio > Install BioIO Reader Plugins` to install any additional bioio reader plugin *and* update any currently installed plugins.\n\n#### Settings Widget\n\nAccess **ndevio settings** via `Plugins > ndev-settings > Settings` to customize:\n\n- **Preferred reader**: Override bioio's default plugin selection priority (useful for formats with multiple compatible readers)\n- **Multi-scene handling**: Choose whether to show the scene widget, view all scenes as a stack, or view only the first scene\n- **Plugin suggestions**: Enable/disable automatic plugin installation prompts for unsupported formats\n\n![ndevio settings via the ndev-settings widget in napari](https://github.com/ndev-kit/ndevio/blob/main/resources/ndev-settings.png?raw=true)\n\nThese settings are managed by [ndev-settings] and persist across napari sessions.\n\n#### Utilities Widget\n\nAccess via `Plugins > ndevio > Utilities` for:\n\n- **Batch concatenation** of images\n- **Metadata management**\n- **Export** as OME-TIFF or figure (PNG)\n\n**Note**: Elements of this widget are being superseded by [napari-metadata] for more comprehensive metadata handling.\n**Note 2:** This widget was built during napari-ndev mono-repo development and does not fully reflect the design goals of ndevio. It will remain functional, but expect future versions to look different.\n\n### Programmatic Usage with `nImage`\n\nThe `nImage` class extends [bioio]'s `BioImage` with napari-specific functionality:\n\n```python\nfrom ndevio import nImage\nfrom napari import Viewer\n\n# Load image with automatic metadata extraction\nimg = nImage(\"path/to/image.czi\")\n\n# Because nImage subclasses BioImage, all BioImage methods are available\nprint(img.dims)               # e.g., <Dimensions [T: 15, C: 4, Z: 1, Y: 256, X: 256]>\n\n# Access napari-ready properties, note that channel and singleton dimensions are dropped\nprint(img.reference_xarray)   # e.g., xarray.DataArray with dims (T, Y, X) and shape (15, 256, 256)\nprint(img.layer_data[0])      # e.g. the highest resolution array; a list is returned for multiscale image support\nprint(img.layer_scale)        # e.g., (1.0, 0.2, 0.2) - time interval + physical scale per dimension, napari ready\nprint(img.layer_axis_labels)  # e.g., ('T', 'Y', 'X')\nprint(img.layer_units)        # e.g., ('s', 'µm', 'µm')\nprint(img.layer_metadata)     # e.g., a dictionary containing the 1) full BioImage object, 2) raw_image metadata and 3) OME metadata (if parsed) - accessible via `viewer.layers[n].metadata`\n\n# A convenience method to get napari LayerDataTuples with nImage metadata for napari\nviewer = Viewer()\nfor ldt in img.get_layer_data_tuples():\n    viewer.add_layer(ldt)\n```\n\n### Sample Data\n\nndevio includes sample datasets accessible via `File > Open Sample > ndevio`.\nThese samples use the `nImage` API to demonstrate the metadata handling.\n\n![4 Channel 2D neural cells with segmentation labels](https://github.com/ndev-kit/ndevio/blob/main/resources/neuron-sampledata.png?raw=true)\n\n- 2D neural cells in a dish imaged with 4 channels, with corresponding segmentation labels\n- 2D brain slice with 3 different transcription factor antibody stains\n- A single 2D+Time sample from a scratched retinal epithelial cell culture, including auto-detected labels in the same file.\n- the napari-ndev logo as a .png\n\n## How ndevio Handles Images\n\n### Metadata\n\nImage metadata is extracted from bioio and converted to napari layer metadata based on the current napari convention to squeeze out singleton dimensions (i.e. drop dimensions of size 1):\n\n- **Full metadata** available at `viewer.layers[n].metadata`\n- **Time and physical scale** automatically applied to layers from OME metadata or file headers\n- **Dimension labels** (T, C, Z, Y, X) preserved in `axis_labels`\n- **Physical units** (µm, nm, etc.) stored in layer metadata\n\n### Memory Management\n\nImages are loaded **in-memory** or **lazily** (via dask) automatically based on:\n\n- File size < 4 GB **AND**\n- File size < 30% of available RAM\n- Remote files (e.g., S3, HTTP) and multiscale are always loaded lazily\n\n### Multi-channel Images\n\nMulti-channel images are **always split** into individual layers (one per channel), using channel names from metadata when available. Images are added with colorblind-friendly colormaps.\n\n### Mosaic/Tiled Images\n\nImages with tiles (e.g., stitched acquisitions) are **automatically stitched together** if the reader supports this behavior.\n\n### RGB Images\n\nRGB(A) images are currently added to the viewer as a single RGB(A) layer, according to napari conventions.\nRGB(A) images are identified by containing the Samples ('S') dimension by bioio, which nominally exists for images with the last (`-1`) dimension being of size 3 or 4.\n\n### Detection of Labels/Segmentation Layers\n\nIf an image contains a channel name or file name suggestive of a labels layer, ndevio will add that channel as a labels layer in napari. Mixed image and label files are possible by having information in the channel names (e.g., `[\"DAPI\", \"DAPI-labels\"]`).\n\n### Customization\n\nIf you need different behavior for any of these automated handling rules, please [file an issue] — we may be able to add settings to configure them!\n\n## Coming Soon\n\n**Writers for OME-TIFF and OME-Zarr** with round-trip napari metadata support!\n\n## Contributing\n\nContributions are very welcome! Please see [Contributing.md](CONTRIBUTING.md) for development setup and guidelines.\n\n## License\n\nDistributed under the terms of the [BSD-3] license,\n\"ndevio\" is free and open source software\n\n## Issues\n\nIf you encounter any problems, please [file an issue] along with a detailed description.\n\n[file an issue]: https://github.com/ndev-kit/ndevio/issues\n[napari]: https://github.com/napari/napari\n[copier]: https://copier.readthedocs.io/en/stable/\n[BSD-3]: http://opensource.org/licenses/BSD-3-Clause\n[napari-plugin-template]: https://github.com/napari/napari-plugin-template\n[PyPI]: https://pypi.org/project/ndevio/\n[tox]: https://tox.readthedocs.io/en/latest/\n[bioio]: https://github.com/bioio-devs/bioio\n[napari-aicsimageio]: https://github.com/AllenCellModeling/napari-aicsimageio\n[ndev-settings]: https://github.com/ndev-kit/ndev-settings\n[napari-metadata]: https://github.com/napari/napari-metadata\n[nbatch]: https://github.com/ndev-kit/nbatch\n[uv]: https://docs.astral.sh/uv/\n[ndev-kit]: https://github.com/ndev-kit\n[bioio-ome-zarr]: https://github.com/bioio-devs/bioio-ome-zarr\n","description_content_type":"text/markdown","keywords":null,"home_page":null,"download_url":null,"author":"Tim Monko","author_email":"timmonko@gmail.com","maintainer":null,"maintainer_email":null,"license":null,"classifier":["Development Status :: 2 - Pre-Alpha","Framework :: napari","Intended Audience :: Developers","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Topic :: Scientific/Engineering :: Image Processing"],"requires_dist":["bioio-base","bioio-imageio","bioio-ome-tiff>=1.2.0","bioio-ome-zarr>=3","bioio-tifffile","bioio>=3.2.0","magic-class","magicgui","napari","napari-plugin-manager>=0.1.7","natsort","nbatch>=0.0.4","ndev-settings>=0.4.2","pooch","xarray","zarr>=3.1.3","napari[all]; extra == 'all'"],"requires_python":">=3.11","requires_external":null,"project_url":["Bug Tracker, https://github.com/ndev-kit/ndevio/issues","Documentation, https://github.com/ndev-kit/ndevio#README.md","Source Code, https://github.com/ndev-kit/ndevio","User Support, https://github.com/ndev-kit/ndevio/issues"],"provides_extra":["all"],"provides_dist":null,"obsoletes_dist":null},"npe1_shim":false}