Giter Club home page Giter Club logo

napari-hub's Introduction

napari hub

GitHub release (latest by date) frontend tests status backend tests status

The napari hub lets napari users find community-built plugins that solve their analysis needs. It hosts a growing ecosystem of plugins for segmentation, tracking, detection, registration, file loading, and more.

Our goal

We seek to support the napari community by seeding and growing a healthy ecosystem of napari plugins that enable the imaging community to perform advanced analysis of imaging and microscopy data sets within napari’s rich interactive interface. To do make this happen, we need to...

  1. enable the bioimaging analysis community to easily build, share and maintain napari plugins
  2. make it easy for biology researchers and imaging scientists to find, evaluate, and install these plugins
  3. make sure that plugin developers can get feedback for improvement and credit for their work

What are we building now?

Over the second half of 2021, we are committed to...

  • Improve the process of finding, evaluating, and installing napari plugins
  • Lower barriers for plugin developers to build, share, and maintain their plugins
  • Learn more about what metrics give plugin users signal about quality and give plugin developers actionable feedback

You can find our roadmap and other insights into our process (user research activities, tech specs, designs, and more) by visiting the napari hub’s wiki.

How can you help?

Interested in helping us grow a thriving community of plugins for napari? There are a few ways you can get involved.

Join a user research session

We rely heavily on User Experience Research (UXR) to understand the needs and challenges of the bioimaging community, identify opportunities for solutions to these challenges, and get feedback on our work. Whether you’re a bench scientist, work at an imaging core, or develop computational methods, email us and we’ll reach out when there’s an interview, focus group, usability study, or workshop that matches your background.

Share your ideas

Do you have ideas for new features that would help make the napari hub even better? Join the discussion, add your ideas, and give feedback on other’s ideas.

Report any bugs

Bugs happen. If something isn’t working right for you on the hub, please let us know by submitting an issue.

Help with open issues

Are you savvy with web development and want to contribute code? We’d love your help tackling some of the “good first issues” we’ve tagged.

Get involved in the napari community

There are lots of opportunities to get involved with our partners in the napari project.

Team

We're a cross-functional product team in the Imaging program at the Chan Zuckerberg Initiative.

Former members

Code of Conduct

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].

napari-hub's People

Contributors

0x00b1 avatar alexlokshin-czi avatar charles-testco avatar chili-chiu avatar codemonkey800 avatar dchudz avatar dependabot[bot] avatar dgmccart avatar dragadoncila avatar dstansby avatar joshkmartinez avatar kandarpksk avatar klai95 avatar kne42 avatar kuannie1 avatar lcobus avatar lgan-czi avatar liu-ziyang avatar manasav3 avatar mbarrien avatar neuromusic avatar richaagarwal avatar snigdhaagarwal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

napari-hub's Issues

spaces are improperly serialized/urlencoded when searching from the details page

Description

If I do a search with more than one term from a plugin details page, the space(s) are not serialized properly, returning no results.

Steps/Code to Reproduce

  1. start from any details page
  2. at the top bar, search for "cell counting"

Expected Results

image

Actual Results

image

Note URL has the search term as cell%2520counting when it should be cell%20counting. It appears to be getting serialized for the URL twice

signing up with en invalid email sometimes causes page to jump

from June 2020 pre-launch bug bash

Created by: Kira Evans

Description

how to reproduce (on iPad):

  1. load https://staging.napari-hub.org/plugins/napari-btrack-reader or any other plugin page
  2. click "Installation" to navigate to that header (link should be https://staging.napari-hub.org/plugins/napari-btrack-reader#installation)
  3. click subscribe on the signup form with an invalid email
  4. your page will scroll back to the Installation header

this does not occur with valid emails and I cannot reproduce on Desktop

Info

Bug source: unknown

Browser: Safari, Firefox, Edge, Chrome

PR: none

Attachments

broken markdown & nav for napari-properties-viewer

Description

Rendering the description for napari-properties-viewer appears to be broken.

  • right nav doesn't work
  • missing image
  • "image" in h2

Steps/Code to Reproduce

visit https://www.napari-hub.org/plugins/napari-properties-viewer

Expected Results

A cleanly rendered description :D

Actual Results

image

It seems like the markdown parser might be mis-interpreting what is intended to be a horizontal line as designating the image (which can't render b/c it is referenced as a relative link) as a heading?

Markdown here: https://raw.githubusercontent.com/kevinyamauchi/napari-properties-viewer/main/README.md

(meta)data sources

For our initial launch of the napari hub, we have identified some of the key pieces of data re: napari plugins that we want to pull in from PyPI and Github to help users find the right plugin for their needs.

This metadata will be used for the following.

  • shown on the plugin detail page
  • previewed on plugin search listings
  • available for filtering on plugin search listings
  • available for sorting on plugin search listings
  • indexed for searching

For much of this data, the source is clear, but for some data there are either (a) have multiple possible sources, (b) no clear source, or (c) do not have a source.

(for a full breakdown of what metadata will be shown/used where, see Metadata Fields for v0)

source for napari plugin description?

Nearly all napari plugins have a PyPI description sourced from their Github README, however we would like to let plugin developers provide a description of their plugin tailored to napari hub users.

This is especially important for plugins that are offered as general purpose Python packages... These will likely will want to have distinct intros, descriptions, and usage guidance for different platforms and audiences so as not to confuse users.

The proposed source of this napari-specific description would be a markdown file in the plugin developer's code repository.

For example...

  • NAPARI.md in the top level of the repo

There is other metadata that we'd like to let plugin developers control independently of fields in PyPI as well, including author information and (eventually) tags or categories.

In this case, it might be better to define a hidden folder for napari config info (.napari/) then put the description in there, along with any other config files...

  • .napari/DESCRIPTION.md
  • .napari/README.md

Thoughts?

add info on frequency of updates

some people might be curious to know when they can expect to see some upstream change reflected on the hub. For example, how frequently is PyPI scraped, and if someone makes a change to their github .napari metadata, when is that detected...

Might be a nice item to add to the FAQ.

Refining of functional breakpoints needed

from June 2020 pre-launch bug bash

Created by: Lia

Description

Since the breakpoints that exist exclusively for the home page are based on the width that things are rendered, they need a little refining since the rendering of some elements in HTML is not exactly the same as the design (i.e. spacing between bullet disc and bullet text, etc). This is fine, but slightly affects the point at which the breakpoint itself should occur.

Work with Lia to refine. Dependent on #66 being completed first

Info

Bug source: <875px

Browser: unknown

PR: none

Attachments

https://dl.airtable.com/.attachments/e9db5ba7de6fd2a90f43b1d42583e77e/29a11dd5/ScreenShot2021-06-16at3.31.43PM.png

format for napari-specific metadata?

There are a number of metadata fields that we want to support in our first release and beyond that either aren't available in PyPI or that we want to let plugin developers customize while maintaining separate fields in PyPI (authors, description].

To support customization of these fields, we would like to let plugin devs put a napari-specific config file in their plugin repo, similar to the config files used for CI/CD tooling (.flake8, .travis.yml, .readthedocs.yml)

This brings about two questions:

  1. What format should we use? YAML? TOML?
  2. Where should this metadata be defined? .napari.yml? .napari/CONFIG.yml? setup.cfg?

License filter options for the common licenses

from June 2020 pre-launch bug bash

Created by: Allen

Description

License filter options for the common licenses people want to exclusively use (e.g. GNU General Public License)

Info

Bug source: unknown

Browser: unknown

PR: none

Attachments

source for operating system metadata?

There are multiple available sources for this metadata:

Trove Classifiers

PyPI lets package developers tag their package with the operating system that it supports through trove classifiers, but its not clear how widely this is used. The napari plugin cookie-cutter sets this to 'Operating System :: OS Independent'.

Inspect the name of the wheel

If the plugin developer has built wheels that are specific to a certain OS, then this information is encoded in the filename of the wheel: "any" for OS-agnostic builds vs "win_amd64" for a 64-bit windows build, for example (see https://realpython.com/python-wheels/#building-a-platform-wheel-macos-and-windows)

Filter dependencies for plugins

Primary persona(s)

  • Research Biologist
  • Imaging Scientist
  • Bioimage Analyst

Job Stories

  • When I browse for plugins I want to know only the dependencies specifically required for installation so that I know the minimum requirements / conflicts with my current environment.

Acceptance Criteria

  1. [If I do A, B should happen.]

If I browse napari plugins, only required dependencies should be shown:

image

(Nothing with "extra" should be shown, OR it should be separated into an accordian view?)
(source: aicsimageio napari-hub page)

instant search?

Don't know anything about how the search is implemented here... but instant search (ala algolia) might be a nice feature for the search field. Doesn't seem like we should have too much data for that sort of thing for quite a while?

Provide an API to request napari plugins information

It would be great if hub provides and API napari could query to get information on plugins without having to query pypi directly.

This would allow to display information in the plugin/package manager inside napari that matches the look feel and information of napari hub.

add PartSeg to exclusion list b/c not a napari plugin?

can we add "PartSeg" to the exclusion list? even though it has the "Framework :: napari" trove classifier, it isn't a napari plugin

in the future, we should consider automatically excluding packages that have the trove classifier but don't have hook implementations, but until then, we can manually clean up the listings for users.

cc @Czaki

Use current plugin installer image for the install instructions

Description

in the modal dialog that pops up when you click an "install" button, the text says "... paste it where it says “Install by name/url…”, but the image shown is from before napari had the "install by name" option. That might be a bit confusing?

Untitled

add "back to search results" button

from June 2020 pre-launch bug bash

Created by: unknown

Description

No description

Info

Bug source: unknown

Browser: unknown

PR: none

Attachments

typo in Privacy Notice

Privacy Notice has link to plausible.io/napari.dev instead of plausible.io/napari-hub.org

Uninstallation feedback

Description

I was surprised that "Removing" a plugin from napari uninstalled it from my environment.

Steps/Code to Reproduce

  • Start napari
  • open "Plugins" > "Install/Uninstall Packages"
  • find ome-zarr under "Installed Plugins"
  • click on "remove"

Expected Results

I perhaps naively assumed this would just remove the plugin from the current context.

Actual Results

The package was uninstalled.

source for author info?

There are multiple sources to pull author info from:

Author field in pypi

PyPI requires an author field & email, but it only supports one author. Further, it is often a group-level author, not an individual.

Let plugin dev define authors in custom

We could enable plugin devs to explicitly list the Authors of the plugin through a custom metadata file in the repo (e.g. .napari.yml). This would have the benefit of letting plugin devs explicitly list and order the authors of the plugin (including PIs or other non-code contributors).

Show list of contributors from the git history

We could also get the full list of contributors to the repository and present this info... however, this would only include code contributions and could get unwieldy for plugins with large efforts behind them.

clearing chip tags "hovers" over next plugin on iPad

from June 2020 pre-launch bug bash

Created by: Kira Evans

Description

steps to reproduce (on iPad):

  1. apply a filter
  2. clear the filter by clicking on the X on the tag chip

Info

Bug source: unknown

Browser: Firefox, Safari, Edge, Chrome

PR: none

Attachments

https://dl.airtable.com/.attachments/5b1c1f58a54c165c107c2125ee9b06b8/b52837a4/2750B669-64FF-4296-A716-949AAF45797A.png https://dl.airtable.com/.attachments/27f16db378a761d6afb62394db0668e8/6f1d0453/B1AF92AA-4073-4351-AC77-FC3C7265A1C3.png

Link to napari in about page.

the about page of napari hub doesn't directly link to napari github or home page. There's a link to the governance model, a link to czi imaging, and a link to this repository... but the only actual link to napari seems to be the icon on the bottom right. Perhaps the first "napari" word could be a link to napari

Does anyone care about "First released?"

from June 2020 pre-launch bug bash

Created by: Allen

Description

Does anyone care about "First released?" Why?

Info

Bug source: unknown

Browser: unknown

PR: none

Attachments

"Install" button text should be semi-bold

from June 2020 pre-launch bug bash

Created by: Lia

Description

Currently regular weight; applies to Install button at top / right margin and at bottom

Info

Bug source: All

Browser: Chrome + Safari

PR: none

Attachments

Chips don't quite match design

from June 2020 pre-launch bug bash

Created by: Lia

Description

A little too tall
Not right color grey (too dark)
Not enough space between end of “x” and end of chip

Info

Bug source: All

Browser: Chrome

PR: none

Attachments

source for "License" metadata?

To identify the license of a napari plugin, there are multiple possible sources of this metadata:

  • “License” in PyPI JSON (free text set in setup.py)
  • “License” Classifier in PyPI JSON (controlled vocabulary set in classifiers)
  • Github API for the repository

Note: The current behavior of the napari plugin cookiecutter is to give the user 6 choices, then set ALL of the above fields.

Which field should the napari hub rely on to identify the license for a plugin? If we pick one as primary/preferred, should one or more of the others be a fallback?

Radio button vertical spacing too tall

from June 2020 pre-launch bug bash

Created by: Lia

Description

The vertical spacing between the radio buttons + their labels is to tall compared to design

Info

Bug source: on wider than mobile sizes

Browser: Chrome

PR: none

Attachments

source for Python version metadata?

There are two available sources

“Python_requires” in PyPi (looks like “>=3.7”)

  • This is what pip relies on to decide whether a plugin can be installed, so we can be fairly confident that plugin devs are keeping it up to date
  • Would we want to parse it to provide an explicit list of versions? E.g. “>=3.8” would become “3.8, 3.9” and filtering on 3.7 would exclude this plugin?

Trove classifier in PyPI (looks like “Programming Language :: Python :: 3.7” etc)

General discussion around language used on hub and napari.dev

I'm very excited about the upcoming hub release and want to thank you for your efforts!

I'd would, though, like to open a discussion and share some thoughts/concerns on some of the "sales-pitchy/marketing" language that I see used on services like the hub and napari.dev. First: I think these are both awesome services: I'm super appreciative and I can't wait to see them get off the ground. I do, however, sometimes find myself feeling uncomfortable as I read them. Some of the wording comes off sounding like an advertisement, and feels a bit out of place in a scientific environment. I do recognize that there is generally language somewhere else on the page that clarifies that "some of this is aspirational", as opposed to "this is already concretely available". But that approach can feel like a bit of a trick... as though it's left as an exercise to the perceptive reader to realize that you can't really do these things yet. (I'd kind of prefer that we underpromise/overdeliver... rather than be seen as a community that likes to wrap things in an overly sunny package)

Some examples from the hub

  • "plugin users can ... be confident they've found the right plugin for their data and "it just works"

that feels extremely hard to do ... and i'm not immediately sure how we can promise that? if it's anything like most scientific communities, i suspect it will be more like a typical "try some of the more popular plugins until you hit on something that eventually works for you". no?

  • "plugin builders can capture reliable actionable feedback...

I mean, I hope that's the case. but since the feedback is coming from the community, how can we promise that the feedback is either reliable or actionable?

  • "Install into napari with confidence"

feels like marketing talk for "we'll remind you how install plugins" ... but whether they install correctly is out of our hands...

and from napari.dev ...

  • big bold type at the top: "Share your analysis tool with researchers everywhere — No GUI development required."... "napari is designed with researchers’ needs in mind and takes the GUI work off your hands."

there too, that's an aspiration that we have, but have definitely not achieved... but that's not really clear anywhere on that page at all. it also makes it sound like napari was designed by some organization that may or may not actually be researchers, but with them as a target market... which is definitely not the case. This one particularly feels like it needs to be wrapped in a "we hope to someday" sort of preamble

  • "Commit your changes. We’ll handle the testing."

again... that would be amazing... but as we all know... that's proven to be quite challenging, and it reads like we've already achieved it.

Anyway, just want to re-emphasize that I recognize these things are meant to be aspirational, and not necessarily taken literally... but as a core developer on the program being referenced they make me feel a little uncomfortable. While it probably does work to build excitement, it doesn't quite feel "authentic". I find myself wondering why it needs to be stated as such.

Hope you don't mind me saying so, and thanks again for the awesome, exciting resource.

Functionality to ignore a plugin

Is your feature request related to a problem? Please describe.
I'm developing a few plugins, and often new ideas take over, but old plugins remain on PyPI. I'd like to ensure that those stale plugins are not visible on the napari hub, potentially confusing users (e.g. should they use napari-cellfinder or cellfinder-napari?)

Describe the solution you'd like
Some way of easy marking the repository as not for the napari hub, e.g. .napari/.hub-ignore

Describe alternatives you've considered
I could remove them from PyPI, but I'd like to keep them there to support existing projects.

Timeliness of metadata from GitHub

With the definition of metadata being laid out here: https://github.com/chanzuckerberg/napari-hub/blob/main/docs/customizing-plugin-listing.md, there are references sourced from GitHub, this becomes an issue across multiple versions, since the GitHub tag may not necessarily correspond to the PyPI release number, for example, a v0.0.1 release may be tagged as 0.0.1 in GitHub, I wonder what people think about managing metadata from github in regards to versions?

exclude ortho-view-napari

requested by the author, @JoOkuma:

You can manually exclude it from the Napari hub and once it is more mature I can get in touch to make it available.

Vertical spacing between radio + label is too large on wide screens

from June 2020 pre-launch bug bash

Created by: Jeremy

Description

One tiny thing I am adding now, but can be done for bug bash (or later, if not triaged for bug bash time):The vertical spacing between the radio buttons + their labels (on wider than mobile sizes) is a little too tall.

Info

Bug source: >875

Browser: All Browsers

PR: none

Attachments

https://dl.airtable.com/.attachments/f4afb407ff0428cc149d7c87e90fff82/fbca0571/image.png

search param isn't added to URL for empty string searches

from June 2020 pre-launch bug bash

Created by: Allen

Description

When searching for the empty string, "", the search parameter is not added to the URL. I consider this a design issue rather than a functionality issue.

Info

Bug source: unknown

Browser: unknown

PR: none

Attachments

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.