{"name":"napari-omero","display_name":"napari-omero","visibility":"public","icon":"","categories":[],"schema_version":"0.1.0","on_activate":null,"on_deactivate":null,"contributions":{"commands":[{"id":"napari-omero.widget","title":"Open OMERO widget","python_name":"napari_omero.widgets.main:OMEROWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-omero.omero_roi_manager","title":"Load/Upload Annotations to OMERO","python_name":"napari_omero.widgets:omero_roi_manager","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-omero.get_reader","title":"OMERO reader","python_name":"napari_omero.plugins._napari:napari_get_reader","short_title":null,"category":null,"icon":null,"enablement":null}],"readers":[{"command":"napari-omero.get_reader","filename_patterns":["*omero*"],"accepts_directories":false}],"writers":null,"widgets":[{"command":"napari-omero.widget","display_name":"OMERO Browser","autogenerate":false},{"command":"napari-omero.omero_roi_manager","display_name":"Load/Upload Annotations to OMERO","autogenerate":false}],"sample_data":null,"themes":null,"menus":{"napari/file/io_utilities":[{"command":"napari-omero.widget","when":null,"group":null,"alt":null},{"command":"napari-omero.omero_roi_manager","when":null,"group":null,"alt":null}]},"submenus":null,"keybindings":null,"configuration":[]},"package_metadata":{"metadata_version":"2.4","name":"napari-omero","version":"0.6.0","dynamic":null,"platform":null,"supported_platform":null,"summary":"napari/OMERO interoperability","description":"# napari-omero\n\n[![License](https://img.shields.io/pypi/l/napari-omero.svg?color=green)](https://github.com/tlambert03/napari-omero/raw/main/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/napari-omero.svg?color=green)](https://pypi.org/project/napari-omero)\n[![Python Version](https://img.shields.io/pypi/pyversions/napari-omero.svg?color=green)](https://python.org)\n[![CI](https://github.com/tlambert03/napari-omero/actions/workflows/ci.yml/badge.svg)](https://github.com/tlambert03/napari-omero/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/tlambert03/napari-omero/branch/main/graph/badge.svg)](https://codecov.io/gh/tlambert03/napari-omero)\n[![conda-forge](https://img.shields.io/conda/vn/conda-forge/napari-omero)](https://anaconda.org/conda-forge/napari-omero)\n\nThis package provides interoperability between the\n[OMERO](https://www.openmicroscopy.org/omero/) image management platform, and\n[napari](https://github.com/napari/napari): a fast, multi-dimensional image\nviewer for python.\n\nIt provides a GUI interface for browsing an OMERO instance from within napari,\nas well as command line interface extensions for both OMERO and napari CLIs.\n\n![demo](https://github.com/tlambert03/napari-omero/blob/main/demo.gif?raw=true)\n\n## Features\n\n- GUI interface to browse remote OMERO data, with thumbnail previews.\n- Load remote nD images from an OMERO server into napari\n  - Planes are loading on demand as sliders are moved (\"lazy loading\").\n  - Loading of pyramidal images as napari multiscale layers\n  - OMERO rendering settings (contrast limits, colormaps, active channels, current\n  Z/T position) are applied in napari\n- Load ROIs from OMERO server into napari as `Shapes` or `Points`\n- Upload napari annotation Layers (`Labels`, `Shapes` and `Points`) to OMERO.\n- Session management (login memory)\n\n> [!NOTE]\n> The user experience when working with remote images, particularly large multiscale (pyramidal) ones, like whole slide images, can be significantly improved by enabling the experimental asynchronous mode (n the GUI in `Preferences > Experimental > Render Images Asynchronously` or with the environmental variable `NAPARI_ASYNC=1`).\n\n### as a napari dock widget\n\nTo launch napari with the OMERO browser added, [install](#installation) this\npackage and run:\n\n```bash\nnapari-omero\n```\n\nThe OMERO browser widget can also be manually added to the napari viewer using the Plugins menu\nor programmatically using:\n\n```python\nimport napari\n\nviewer = napari.Viewer()\nviewer.window.add_plugin_dock_widget('napari-omero')\n\nnapari.run()\n```\n\n### as a napari reader contribution\n\nThis package provides a napari reader contribution that accepts OMERO resources as\n\"proxy strings\" (e.g. `omero://Image:<ID>`) or as [OMERO webclient\nURLS](https://help.openmicroscopy.org/urls-to-data.html).\n\n```python\nimport napari\nviewer = napari.Viewer()\n\n# omero object identifier string\nviewer.open(\"omero://Image:1\", plugin=\"napari-omero\")\n\n# or URLS: https://help.openmicroscopy.org/urls-to-data.html\nviewer.open(\"http://yourdomain.example.org/omero/webclient/?show=image-314\", plugin=\"napari-omero\")\n```\n\nthese will also work on the napari command line interface, e.g.:\n\n```bash\n# quotes are needed if using zsh\nnapari \"omero://Image:1\"\n# or\nnapari \"http://yourdomain.example.org/omero/webclient/?show=image-314\"\n```\n\n### as an OMERO CLI plugin\n\nThis package also serves as a plugin to the OMERO CLI\n\n```bash\nomero napari view Image:1\n```\n\n- ROIs created in napari can be saved back to OMERO via a \"Save ROIs\" button.\n- napari viewer console has BlitzGateway 'conn' and 'omero_image' in context.\n\n## installation\n\nWhile this package supports anything above python 3.9,\nin practice, python support is limited by `omero-py` and `zeroc-ice`,\ncompatibility, which is limited to python <=3.12 at the time of writing.\n\n### from conda\n\nIt's easiest to install `omero-py` from conda, so the recommended procedure\nis to install everything from conda, using the `conda-forge` channel.\nFor example, to install the plugin, napari, and the default Qt backend, use:\n\n```sh\nconda install -c conda-forge napari-omero pyqt\n```\n\n### from pip\n\n`napari-omero` itself can be installed from pip, but you will still need\n`omero-py`\n\n```sh\nconda create -n omero -c conda-forge python=3.10 omero-py\nconda activate omero\npip install napari-omero[all]  # the [all] here is the same as `napari[all]`\n```\n\n## issues\n\n| ❗  | This is alpha software & some things will be broken or sub-optimal!  |\n| --- | -------------------------------------------------------------------- |\n\n- experimental & definitely still buggy!  [Bug\n  reports](https://github.com/tlambert03/napari-omero/issues/new) are welcome!\n- remote loading can be very slow still... though this is not strictly an issue\n  of this plugin.  Datasets are wrapped as delayed dask stacks, and remote data\n  fetching time can be significant.  Enabling [asynchronous\n  rendering](https://napari.org/stable/guides/rendering.html#asynchronous-slicing) in\n  napari improves the subjective performance... but remote data loading\n  will likely always be a limitation here.\n  To try asyncronous loading, start the program with `NAPARI_ASYNC=1 napari-omero`\n  or look in the Preferences on the Experimental tab.\n  Also, keep an eye on the [napari progressive loading implementation progress](https://github.com/napari/napari/issues/5561).\n- For plugin developers: As napari-OMERO provides images as lazily-loaded [dask arrays](https://docs.dask.org/en/stable/array.html),\n  napari-plugins need to account for this when retrieving data from napari layers.\n  Keep in mind that forwarding the data to processing steps in plugins may lead to signficant loading\n  and processing times.\n\n## contributing\n\nContributions are welcome!  To get setup with a development environment:\n\n```bash\n# clone this repo:\ngit clone https://github.com/tlambert03/napari-omero.git\n# change into the new directory\ncd napari-omero\n# create conda environment\nconda env create -n napari-omero python=3.10 omero-py\n# activate the new env\nconda activate napari-omero\n\n# install in editable mode with dev dependencies\npip install -e \".[dev]\"      # quotes are needed on zsh\n```\n\nTo maintain good code quality, this repo uses\n[ruff](https://github.com/astral-sh/ruff),\n[mypy](https://github.com/python/mypy).\n\nTo enforce code quality when you commit code, you can install pre-commit\n\n```bash\n# install pre-commit which will run code checks prior to commits\npre-commit install\n```\n\nThe original OMERO data loader and CLI extension was created by [Will\nMoore](https://github.com/will-moore).\n\nThe napari reader plugin and GUI browser was created by [Talley\nLambert](https://github.com/tlambert03/)\n\n## release\n\nTo push a release to PyPI, one of the maintainers needs to do, for example:\n```sh\ngit tag -a v0.2.0 -m v0.2.0\ngit push upstream --follow-tags\n```\nThen, the workflow should handle everything!\n","description_content_type":"text/markdown","keywords":"OMERO.CLI,napari,napari-plugin,plugin","home_page":null,"download_url":null,"author":"Peter Sobolewski","author_email":"Talley Lambert <talley.lambert@gmail.com>, Will Moore <w.moore@dundee.ac.uk>, Johannes Soltwedel <johannes_richard.soltwedel@tu-dresden.de>","maintainer":null,"maintainer_email":null,"license":"GPL-2.0-or-later","classifier":["Development Status :: 4 - Beta","Environment :: X11 Applications :: Qt","Framework :: napari","Intended Audience :: Developers","Intended Audience :: Education","Intended Audience :: End Users/Desktop","Intended Audience :: Science/Research","License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)","Natural Language :: English","Operating System :: OS Independent","Programming Language :: Python :: 3","Programming Language :: Python :: 3.9","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Topic :: Scientific/Engineering","Topic :: Scientific/Engineering :: Bio-Informatics","Topic :: Scientific/Engineering :: Information Analysis","Topic :: Scientific/Engineering :: Visualization","Topic :: Software Development :: Libraries :: Python Modules","Topic :: Utilities","Typing :: Typed"],"requires_dist":["dask[array]>=2021.10.0","napari>=0.5.0","omero-marshal","omero-py","omero-rois","qtpy>=1.10.0","superqt>=0.6.7","napari[all]; extra == 'all'","ipython; extra == 'dev'","mypy; extra == 'dev'","napari[all]; extra == 'dev'","pdbpp; extra == 'dev'","pre-commit; extra == 'dev'","pytest; extra == 'dev'","pytest-cov; extra == 'dev'","pytest-qt; extra == 'dev'","pytest-regressions; extra == 'dev'","pywin32; (sys_platform == 'win32') and extra == 'dev'","rich; extra == 'dev'","ruff; extra == 'dev'","pytest; extra == 'test'","pytest-cov; extra == 'test'","pytest-qt; extra == 'test'","pytest-regressions; extra == 'test'","pywin32; (sys_platform == 'win32') and extra == 'test'"],"requires_python":">=3.9","requires_external":null,"project_url":["homepage, https://github.com/tlambert03/napari-omero","repository, https://github.com/tlambert03/napari-omero"],"provides_extra":["all","dev","test"],"provides_dist":null,"obsoletes_dist":null},"npe1_shim":false}