{"name":"napari-czitools","display_name":"CziReadTools","visibility":"public","icon":"","categories":["IO"],"schema_version":"0.2.1","on_activate":null,"on_deactivate":null,"contributions":{"commands":[{"id":"napari-czitools.get_reader_adv","title":"Open *.czi image files with CziTools","python_name":"napari_czitools._reader:napari_get_reader","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-czitools.celldivision_data","title":"Load 5D Data","python_name":"napari_czitools._sample_data:celldivision_data","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-czitools.wellplate_data","title":"Load WellPlate Data","python_name":"napari_czitools._sample_data:wellplate_data","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-czitools.zstack_data","title":"Load ZStack Data","python_name":"napari_czitools._sample_data:zstack_data","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-czitools.airyscan_zstack_data","title":"Load Airyscan ZStack Data","python_name":"napari_czitools._sample_data:airyscan_zstack_data","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-czitools.he_stain_data","title":"Load HE Stain Data","python_name":"napari_czitools._sample_data:he_stain_data","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-czitools.make_czireader_widget","title":"Create CZI Reader Widget","python_name":"napari_czitools._widget:CziReaderWidget","short_title":null,"category":null,"icon":null,"enablement":null}],"readers":[{"command":"napari-czitools.get_reader_adv","filename_patterns":["*.czi"],"accepts_directories":false}],"writers":null,"widgets":[{"command":"napari-czitools.make_czireader_widget","display_name":"Advanced CZI Reader","autogenerate":false}],"sample_data":[{"command":"napari-czitools.celldivision_data","key":"unique_id.0","display_name":"Celldivision 5D dataset"},{"command":"napari-czitools.wellplate_data","key":"unique_id.1","display_name":"WellPlate 6D dataset"},{"command":"napari-czitools.zstack_data","key":"unique_id.2","display_name":"Z-Stack dataset"},{"command":"napari-czitools.airyscan_zstack_data","key":"unique_id.3","display_name":"Airyscan Z-Stack dataset"},{"command":"napari-czitools.he_stain_data","key":"unique_id.4","display_name":"HE Stain dataset"}],"themes":null,"menus":{},"submenus":null,"keybindings":null,"configuration":[]},"package_metadata":{"metadata_version":"2.4","name":"napari-czitools","version":"0.0.11","dynamic":["license-file"],"platform":null,"supported_platform":null,"summary":"Plugin to read CZI image files and their metadata","description":"- [napari-czitools](#napari-czitools)\n  - [Installation](#installation)\n  - [Supported Operating Systems](#supported-operating-systems)\n  - [Usage - Core Functionalities](#usage---core-functionalities)\n    - [Open Complete CZI Files](#open-complete-czi-files)\n    - [Open CZI Sample Data](#open-czi-sample-data)\n      - [CellDivision 5D Stack](#celldivision-5d-stack)\n      - [Neurons 3D Stack](#neurons-3d-stack)\n      - [AiryScan 3D Stack](#airyscan-3d-stack)\n      - [Wellplate Data](#wellplate-data)\n    - [Advanced CZI Reader (CziReadTools) plugin](#advanced-czi-reader-czireadtools-plugin)\n  - [Current Limitations](#current-limitations)\n    - [Future plans](#future-plans)\n  - [Contributing](#contributing)\n  - [License](#license)\n  - [Issues](#issues)\n- [Disclaimer](#disclaimer)\n\n# napari-czitools\n\n[![License MIT](https://img.shields.io/pypi/l/napari-czitools.svg?color=green)](https://github.com/sebi06/napari-czitools/raw/main/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/napari-czitools.svg?color=green)](https://pypi.org/project/napari-czitools)\n[![Python Version](https://img.shields.io/pypi/pyversions/napari-czitools.svg?color=green)](https://python.org)\n[![tests](https://github.com/sebi06/napari-czitools/workflows/tests/badge.svg)](https://github.com/sebi06/napari-czitools/actions)\n[![codecov](https://codecov.io/gh/sebi06/napari-czitools/branch/main/graph/badge.svg)](https://codecov.io/gh/sebi06/napari-czitools)\n[![napari hub](https://img.shields.io/endpoint?url=https://api.napari-hub.org/shields/napari-czitools)](https://napari-hub.org/plugins/napari-czitools)\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\nPlugin to read CZI image file and metadata\n\n----------------------------------\n\nThis [napari] plugin was generated with [copier] using the [napari-plugin-template].\n\n![napari-czitools - Read CZI Metadata and load image Data](https://github.com/sebi06/napari-czitools/raw/main/readme_images/title_pic.png)\n\n<!--\nDon't miss the full getting started guide to set up your new package:\nhttps://github.com/napari/napari-plugin-template#getting-started\n\nand review the napari docs for plugin developers:\nhttps://napari.org/stable/plugins/index.html\n-->\n\n## Installation\n\nYou can install `napari-czitools` via [pip]:\n\n    pip install napari-czitools\n\nTo install latest development version :\n\n    pip install git+https://github.com/sebi06/napari-czitools.git\n\n## Supported Operating Systems\n\nCurrently this only tested on:\n\n- Linux\n- Windows\n\nMacOS is not supported yet out of the box yet, but [czitools] uses [pylibCZIrw]. But it should be possible to install it manually: [MaxOS wheels for pylibCZIrw] (read and write CZI files on MacOS).\n\n## Usage - Core Functionalities\n\nThe plugin provides a reader for CZI files and allows to load the image data into [napari]. It also reads the metadata from the CZI file and displays it in the metadata panel of [napari].\n\n### Open Complete CZI Files\n\n- Open complete CZI Files and display the metadata in Napari using the [czitools] package\n\n![Open complete CZI file](./readme_images/file_open_mdtable_lls7.png)\n\n- Open different CZI Image sample data\n- if not found locally in current directory `../src/napari_czitools/sample_data` it will be opened from remote repository (might be slow)\n\n![Open sample data](https://github.com/sebi06/napari-czitools/raw/main/readme_images/open_sample1.png)\n\n### Open CZI Sample Data\n\n#### CellDivision 5D Stack\n\n![Sample Data - 5D Stack](https://github.com/sebi06/napari-czitools/raw/main/readme_images/open_sample_5D.png)\n\n#### Neurons 3D Stack\n\n![Sample Data - 3D Stack](https://github.com/sebi06/napari-czitools/raw/main/readme_images/open_sample_3D.png)\n\n#### AiryScan 3D Stack\n\n![Sample Data - AiryScan 3D Stack](https://github.com/sebi06/napari-czitools/raw/main/readme_images/open_sample_airyscan.png)\n\n#### Wellplate Data\n\n![Sample Data - Wellpate](https://github.com/sebi06/napari-czitools/raw/main/readme_images/open_sample_wellplate.png)\n\n### Advanced CZI Reader (CziReadTools) plugin\n\nSelect the plugin to show the UI in the right panel of the Napari UI via \"Plugins > Advanced CZI Reader (CziReadTools)\"\n\n1) Select the CZI file to read its metadata\n2) Once the metadata are read the display can be toggled between a **table** and a **tree view**\n3) The metadata will update the dimension range sliders (powered by [superqt]'s `QLabeledRangeSlider`) and enable reading the pixel data\n\n<img src=\"https://github.com/sebi06/napari-czitools/raw/main/readme_images/reader_adv1.png\" alt=\"Advanced CZI Reader - Plugin\" style=\"width:30%; height:auto;\">\n\n1) Metadata will be shown as a **table** or as a **tree view**\n2) The **Load Pixel Data** button will be enabled once the metadata is read\n3) The **Dimension Sliders** (using [superqt]'s dual-handle range slider) will be enabled and allow to select a range to be read for all available dimensions. Both handles can be set to the same value for single-slice selection (e.g. 3-3)\n\n<img src=\"https://github.com/sebi06/napari-czitools/raw/main/readme_images/reader_adv2.png\" alt=\"Advanced CZI Reader - Plugin\" style=\"width:80%; height:auto;\">\n\n- The dimension range sliders (from [superqt]) allow to define the size of a CZI subset to be read\n- This allows to read parts of a CZI image dataset\n- Important - when reading a subset the metadata will still reflects the size of the complete CZI\n\n![Advanced CZI Reader - Plugin](./readme_images/load_pixel1.png)\n\n- Example for reading a subset\n  - Timepoints (4-7): 4 slices or T=4\n  - Channels (0-0): 1 slice or CH=1\n  - Z-Plane (7-10): 4 slices or Z=4\n\n![Advanced CZI Reader - Plugin](./readme_images/load_pixel2.png)\n\n## Current Limitations\n\nThe plugin is still in its very early stage, therefor expect bugs and breaking changes\n\n- reading CZI with multiple scenes only works when the scenes have equal size\n- opening the sample CZI files will not display the CZI metadata right now\n\n### Future plans\n\n- allow reading individual scenes when scenes have different sizes\n- upgrade [pylibCZIrw] to allow use [bioio-czi] for even better reading\n- export of metadata table\n\nFeedback is always welcome!\n\n## Contributing\n\nContributions are very welcome. Tests can be run with [tox], please ensure\nthe coverage at least stays the same before you submit a pull request.\n\n### Running Tests\n\nInstall test dependencies first (recommended for full local coverage):\n\n```bash\npip install -e \".[testing]\"\n```\n\nThis installs `pytest-qt`, which provides the `qtbot` fixture used by\nnapari/Qt tests.\n\n**Windows/macOS:**\n```bash\npytest\n```\n\n**Linux (recommended - use tox):**\n```bash\ntox -e py312-linux\n```\n(Replace `py312` with your Python version: `py312` or `py313`)\n\n**Linux (direct pytest):**\n```bash\npytest -v --forked --color=yes\n```\n\nNote: The `--forked` flag is required on Linux to prevent CZI + Qt crashes by running each test in its own process. This flag is not available on Windows.\n\n### Recent Compatibility Notes\n\n- `czitools>=0.14.0` is supported.\n- `czitools==0.15.0` changed `read_tools.read_stacks` to return\n  `(array6d, dims, num_stacks, metadata)`.\n- The plugin now supports both 3-value and 4-value `read_stacks`\n  return signatures for backward compatibility.\n- Newer `czitools` may return scene data as a list of xarray stacks when lazy\n  reading is enabled. The plugin now handles both single-stack and scene-list\n  outputs when creating channel layers.\n- Channel extraction uses positional indexing to support channel coordinates\n  represented by names (for example `\"DAPI\"`, `\"EGFP\"`) instead of numeric\n  labels.\n- URL metadata tests can be affected by transient remote read failures (for\n  example GitHub/network hiccups). The test suite retries and skips these\n  network-dependent checks if remote headers cannot be read reliably.\n- The custom dual-handle `DoubleRangeSlider` has been replaced with wrappers\n  around [superqt]'s `QLabeledRangeSlider` and `QRangeSlider`, reducing\n  custom painting/mouse handling code and using a well-tested community\n  component. The public slider API (`low()`, `high()`, `setLow()`,\n  `setHigh()`, single-value mode) is unchanged.\n- A small internal patch (`_allow_handle_overlap`) is applied to every\n  superqt range slider so that both handles can sit on the same value,\n  enabling single-frame extraction (e.g. T=4-4 to read one timepoint).\n\n## License\n\nDistributed under the terms of the [MIT] license,\n\"napari-czitools\" 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# Disclaimer\n\nThe software & scripts are free to use for everybody. The author undertakes no warranty concerning the use of this plugins and scripts. Use them on your own risk.\n\nBy using this plugin you agree to this disclaimer.\n\nVersion: 2025.08.20\n\n[napari]: https://github.com/napari/napari\n[copier]: https://copier.readthedocs.io/en/stable/\n[@napari]: https://github.com/napari\n[MIT]: http://opensource.org/licenses/MIT\n[napari-plugin-template]: https://github.com/napari/napari-plugin-template\n[file an issue]: https://github.com/sebi06/napari-czitools/issues\n[tox]: https://tox.readthedocs.io/en/latest/\n[pip]: https://pypi.org/project/pip/\n[czitools]: https://pypi.org/project/czitools/\n[pylibCZIrw]: https://pypi.org/project/pylibCZIrw/\n[MaxOS wheels for pylibCZIrw]: https://pypi.scm.io/#/package/pylibczirw\n[bioio-czi]: https://pypi.org/project/bioio-czi/\n[superqt]: https://pyapp-kit.github.io/superqt/\n","description_content_type":"text/markdown","keywords":null,"home_page":null,"download_url":null,"author":"Sebastian Rhode","author_email":"sebrhode@gmail.com","maintainer":null,"maintainer_email":null,"license":"The MIT License (MIT)\n\nCopyright (c) 2025 Sebastian Rhode\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","classifier":["Development Status :: 4 - Beta","Framework :: napari","Intended Audience :: Developers","License :: OSI Approved :: MIT License","Operating System :: Unix","Operating System :: MacOS","Operating System :: Microsoft :: Windows","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Topic :: Scientific/Engineering :: Image Processing"],"requires_dist":["numpy","magicgui","qtpy","superqt","scikit-image","pyqtgraph","czitools>=0.16.0","tox; extra == \"testing\"","pytest; extra == \"testing\"","pytest-cov; extra == \"testing\"","pytest-qt; extra == \"testing\"","pytest-timeout; extra == \"testing\"","pytest-forked; extra == \"testing\"","napari; extra == \"testing\"","pyqt5; extra == \"testing\""],"requires_python":"<3.14,>=3.12","requires_external":null,"project_url":["Bug Tracker, https://github.com/sebi06/napari-czitools/issues","Documentation, https://github.com/sebi06/napari-czitools#README.md","Source Code, https://github.com/sebi06/napari-czitools","User Support, https://github.com/sebi06/napari-czitools/issues"],"provides_extra":["testing"],"provides_dist":null,"obsoletes_dist":null},"npe1_shim":false}