8000 Releases · napari/napari · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Releases: napari/napari

0.6.2a1

13 Jun 13:15
cffde61
Compare
Choose a tag to compare
0.6.2a1 Pre-release
Pre-release

napari 0.6.2

⚠️ Note: these release notes are still in draft while 0.6.2 is in release candidate testing. ⚠️

Mon, Jun 23, 2025

We're happy to announce the release of napari 0.6.2!
napari is a fast, interactive, multi-dimensional image viewer for Python.
It's designed for browsing, annotating, and analyzing large multi-dimensional
images. It's built on top of Qt (for the GUI), vispy (for performant GPU-based
rendering), and the scientific Python stack (numpy, scipy).

For more information, examples, and documentation, please visit our website,
https://napari.org.

Highlights

  • Qt controls for thick slicing (#6146)
  • Add grid overlay (#7827)
  • Grid mode using vispy ViewBox and linked cameras (#7870)
  • Features table widget as builtin (#7877)
  • Move napari into src layout (#7952)
  • Add public API to get access to docked widgets (#7965)

New Features

  • Qt controls for thick slicing (#6146)
  • Add automatic area and perimeter measurement for shapes + action (#7262)
  • Add canvas color to public API (#7778)
  • Add grid overlay (#7827)
  • Tiling canvas overlays (#7836)
  • Features table widget as builtin (#7877)

Improvements

  • Allow use functions from PartSegCore-compiled-backend as numba alternative for data to texture mapping (#6617)
  • Reduce warmup of numba if non numba backend is selected (#7917)
  • Optional rotation handle for selection box overlay + simplify inheritance for Vispy overlays (#7958)
  • Add public API to get access to docked widgets (#7965)
  • Implement pasting spatial information into higher dimensions (#7973)
  • Allow to use ViewerModel as annotation of plugin constructor argument (#8002)
  • speedup edge width set by use batched_updates context manager (#8006)

Performance

  • Allow use functions from PartSegCore-compiled-backend as numba alternative for data to texture mapping (#6617)
  • [Shapes] Use the plural methods to update colors of all selected shapes at once (#7995)

Bug Fixes

  • Fix scalebar theme connection (#7902)
  • Don't add widgets to non-contributable menus (#7926)
  • Fix handle mouse events (#7936)
  • Fix moving of first/last vertex of polygons added in ring mode (#7942)
  • Update shapes highlight on zoom (#7953)
  • Fix invalidate of extent cache in Layers (#7972)
  • [Points] Fix events.data_indices for ActionType.ADDED event when adding single point (#7983)
  • Fix interaction box initialization (#8011)
  • Fix angles not showing correctly in UI (#8013)

API Changes

  • Expose force_sync context manager (#7908)

Documentation

  • Add example linking the cameras of two viewers (#6881)
  • Update README to use imshow and add example to generate image (#7989)
  • Update version switcher for 0.6.1 (docs#713)
  • Update contributing docs page (docs#715)
  • Update code of conduct committee members (docs#716)
  • Add initial documentation about widget communication (docs#721)
  • Update installation.md to link to conda getting started not miniconda (docs#726)
  • Update governance docs (docs#729)
  • Initial release notes for alpha of 0.6.2 (docs#734)

Other Pull Requests

  • Layer controls widgets refactor (#7355)
  • Add codespell support (config, workflow to detect/not fix) and make it fix few typos (#7619)
  • Add docs constraints for python 3.12 (#7714)
  • Include Qt PyPI server for pre-releases (#7803)
  • Refactor layer overlays visuals from VispyLayer to VispyCanvas (#7835)
  • Use information about units when calculate scale of layers when render (#7889)
  • Add cron check to update reader extensions (#7907)
  • Update dask, hypothesis, numpy, tensorstore, vispy (#7948)
  • Move export ROI implementation into qt_viewer (#7950)
  • [pre-commit.ci] pre-commit autoupdate (#7951)
  • Add cron check to update reader extensions v2 (#7957)
  • Restore image in Readme (#7959)
  • Add cron check to update reader extensions v3 (#7966)
  • Update coverage, dask, fsspec, hypothesis, pydantic, tifffile, vispy (#7967)
  • fix vendored script and trigger workflow on pull_request (#7968)
  • [pre-commit.ci] pre-commit autoupdate (#7970)
  • Remove layers_change event that is marked to be removed in 0.5.0 (#7971)
  • [maintenance] Use Wandalen/wretry.action to auto-retry fail in --pre tests (#7986)
  • Update hypothesis, ipython, jsonschema, tifffile (#7987)
  • [pre-commit.ci] pre-commit autoupdate (#7988)
  • Stop status thread on Keyboard Interruption (Ctrl+C) (#7994)
  • Update hypothesis, magicgui, pandas, pyqt6, pytest, pytest-pretty (#8000)
  • Update pyproject.toml to fix coverage paths (alt) (#8001)
  • [Maintenance] Remove redundant initialization in Points layer and restructure for clarity (#8005)
  • Update[shortcuts]: add Ctrl/Cmd-A as secondary keybinding for select_all_shapes (#8015)
  • Fix comment and manual dispatch triggered build jobs (docs#723)

10 authors added to this release (alphabetical)

(+) denotes first-time contributors 🥳

13 reviewers added to this release (alphabetical)

(+) denotes first-time contributors 🥳

Read more

0.6.1

19 May 15:37
7933ed5
Compare
Choose a tag to compare

napari 0.6.1

Tue, May 20, 2025

We’re happy to announce the release of napari 0.6.1! This release is a follow-up to 0.6.0, with a few bug fixes and new features.

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

The HiLo👋 Colormap!

Introducing the HiLo colormap to napari! 🎨 This much-loved colormap (LUT) is like grayscale, except it displays values at or above the maximum contrast limit as red 🔴 and values at or below the minimum contrast limit as blue 🔵. In the scientific imaging world, the HiLo colormap is often used to assess overexposed (saturated) ☀️ and underexposed (dark) 🌑 regions in images.
Enjoy this animation of the HiLo colormap in action! 👇
HiLo colormap animation

The HiLo colormap is now available as a result of the dependency bump to VisPy 0.15.0 (#7846), which will soon unlock even more great new features in the coming napari releases.

The dims widget shines brighter! ✨

Have you ever tried to use the dims pop-up widget (accessed by right clicking on the third viewer button) and found it to not work as expected? As part of our bugfixes #7937 , the dims widget will continue to interact as expected. The widget is now available in 3D view!
❓Did you know that the dims widget allows you to rename the axis labels of your data?
dims popup widget

New Features

  • Add inheritance of spatial data for functional plugin that return layer data. (#6986)
  • Bump to vispy 0.15 and update Colormap model (#7846)
  • Add multiplicative blending (#7868)

Improvements

  • Copy units from layer to layer (#7727)
  • Check return value is valid LayerDataTuple (#7851)
  • Fix broken dims order popup and add to 3D (#7937)

Bug Fixes

  • Refresh extent on async slicing (#7853)
  • Do not expose vispy BaseColormaps (#7858)
  • Properly determine dtype for view of Labels (#7883)
  • Prevent Shapes corruption when drawing tiny polygons with lasso (#7914)
  • Better refresh extent on async slicing (#7925)
  • Fix async refresh extent (#7929)
  • Mark key events as handled when processed (#7933)
  • Fix broken dims order popup and add to 3D (#7937)

Documentation

  • Update the version switcher for 0.6.0 (docs#697)
  • Update conf.py to try to fix opengraph image for dev and future deployments (docs#700)
  • Update sidebar-nav-bs.html to try to fix links (docs#702)
  • Draft release notes for 0.6.1 (docs#704)
  • release 0.6.1 notes update (docs#706)
  • Fix release notes header for 0.6.1 (docs#707)
  • Update release notes for 0.6.1 (docs#708)
  • Update viewer.md to mention that you can rename axes using the roll dims popup (docs#709)
  • 0.6.1 full release notes (docs#712)

Other Pull Requests

  • Remove outdated QSS styling elements (#7655)
  • Update hypothesis, ipython, numpy, pillow, pydantic (#7823)
  • Update builtins read extensions (#7826)
  • Skip tests that are failing because of Qt bug (#7884)
  • Use ViewerModel instead of make_napari_viewer in test_toggle_axes_scale_bar_attr (#7885)
  • Update pydantic, pyqt6, xarray (#7886)
  • [pre-commit.ci] pre-commit autoupdate (#7891)
  • Fix test_view_menu.py::test_toggle_menubar to pass locally (#7892)
  • Add information about launch command to napari info dialog (#7897)
  • Add information about installed plugins to info dialog (#7899)
  • Surface original error when a selected plugin fails to read file. (#7901)
  • Update hypothesis, matplotlib, psygnal, scipy, tifffile, virtualenv (#7906)
  • Change @brisvag affiliation (#7909)
  • [pre-commit.ci] pre-commit autoupdate (#7910)
  • Rename action by add missed word separator (#7913)
  • Update build_trigger.yml to fix Circle pipeline (docs#701)

6 authors added to this release (alphabetical)

(+) denotes first-time contributors 🥳

7 reviewers added to this release (alphabetical)

(+) denotes first-time contributors 🥳

0.6.1rc3

18 May 18:54
7933ed5
Compare
Choose a tag to compare
0.6.1rc3 Pre-release
Pre-release

napari 0.6.1

⚠️ Note: these release notes are still in draft while 0.6.1 is in release candidate testing. ⚠️

Wed, May 14, 2025

We’re happy to announce the release of napari 0.6.1!
This release is a follow-up to 0.6.0, with a few bug fixes and new features.

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

The HiLo👋 Colormap!

Introducing the HiLo colormap to napari! 🎨
This much-loved colormap (LUT) is like grayscale, except it displays values at or above the maximum contrast limit as red 🔴
and values at or below the minimum contrast limit as blue 🔵.
In the scientific imaging world, the HiLo colormap is often used to assess overexposed (saturated) ☀️ and underexposed (dark) 🌑 regions in images.
Enjoy this animation of the HiLo colormap in action! 👇
HiLo colormap animation

The HiLo colormap is now available as a result of the dependency bump to VisPy 0.15.0 #7846, which will soon unlock even more great new features in the coming napari releases.

New Features

  • Add inheritance of spatial data for functional plugin that return layer data. (#6986)
  • Bump to vispy 0.15 and update Colormap model (#7846)
  • Add multiplicative blending (#7868)

Improvements

  • Copy units from layer to layer (#7727)
  • Check return value is valid LayerDataTuple (#7851)

Bug Fixes

  • Refresh extent on async slicing (#7853)
  • Do not expose vispy BaseColormaps (#7858)
  • Properly determine dtype for view of Labels (#7883)
  • Prevent Shapes corruption when drawing tiny polygons with lasso (#7914)

Documentation

  • Update the version switcher for 0.6.0 (docs#697)
  • Update conf.py to try to fix opengraph image for dev and future deployments (docs#700)
  • Update sidebar-nav-bs.html to try to fix links (docs#702)
  • Draft release notes for 0.6.1 (docs#704)
  • release 0.6.1 notes update (docs#706)
  • Fix release notes header for 0.6.1 (docs#707)

Other Pull Requests

  • Remove outdated QSS styling elements (#7655)
  • Update hypothesis, ipython, numpy, pillow, pydantic (#7823)
  • Update builtins read extensions (#7826)
  • Skip tests that are failing because of Qt bug (#7884)
  • Use ViewerModel instead of make_napari_viewer in test_toggle_axes_scale_bar_attr (#7885)
  • Update pydantic, pyqt6, xarray (#7886)
  • [pre-commit.ci] pre-commit autoupdate (#7891)
  • Fix test_view_menu.py::test_toggle_menubar to pass locally (#7892)
  • Add information about launch command to napari info dialog (#7897)
  • Add information about installed plugins to info dialog (#7899)
  • Surface original error when a selected plugin fails to read file. (#7901)
  • Update hypothesis, matplotlib, psygnal, scipy, tifffile, virtualenv (#7906)
  • Change @brisvag affiliation (#7909)
  • [pre-commit.ci] pre-commit autoupdate (#7910)
  • Rename action by add missed word separator (#7913)
  • Update build_trigger.yml to fix Circle pipeline (docs#701)

6 authors added to this release (alphabetical)

(+) denotes first-time contributors 🥳

7 reviewers added to this release (alphabetical)

(+) denotes first-time contributors 🥳

0.6.1rc2

15 May 04:56
c6c7132
Compare
Choose a tag to compare
0.6.1rc2 Pre-release
Pre-release

napari 0.6.1

⚠️ Note: these release notes are still in draft while 0.6.1 is in release candidate testing. ⚠️

Wed, May 14, 2025

We’re happy to announce the release of napari 0.6.1!
This release is a follow-up to 0.6.0, with a few bug fixes and new features.

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

The HiLo👋 Colormap!

Introducing the HiLo colormap to napari! 🎨
This much-loved colormap (LUT) is like grayscale, except it displays values at or above the maximum contrast limit as red 🔴
and values at or below the minimum contrast limit as blue 🔵.
In the scientific imaging world, the HiLo colormap is often used to assess overexposed (saturated) ☀️ and underexposed (dark) 🌑 regions in images.
Enjoy this animation of the HiLo colormap in action! 👇
HiLo colormap animation

The HiLo colormap is now available as a result of the dependency bump to VisPy 0.15.0 #7846, which will soon unlock even more great new features in the coming napari releases.

New Features

  • Add inheritance of spatial data for functional plugin that return layer data. (#6986)
  • Bump to vispy 0.15 and update Colormap model (#7846)
  • Add multiplicative blending (#7868)

Improvements

  • Copy units from layer to layer (#7727)
  • Check return value is valid LayerDataTuple (#7851)

Bug Fixes

  • Refresh extent on async slicing (#7853)
  • Do not expose vispy BaseColormaps (#7858)
  • Properly determine dtype for view of Labels (#7883)
  • Prevent Shapes corruption when drawing tiny polygons with lasso (#7914)

Documentation

  • Update the version switcher for 0.6.0 (docs#697)
  • Update conf.py to try to fix opengraph image for dev and future deployments (docs#700)
  • Update sidebar-nav-bs.html to try to fix links (docs#702)
  • Draft release notes for 0.6.1 (docs#704)
  • release 0.6.1 notes update (docs#706)
  • Fix release notes header for 0.6.1 (docs#707)

Other Pull Requests

  • Remove outdated QSS styling elements (#7655)
  • Update hypothesis, ipython, numpy, pillow, pydantic (#7823)
  • Update builtins read extensions (#7826)
  • Skip tests that are failing because of Qt bug (#7884)
  • Use ViewerModel instead of make_napari_viewer in test_toggle_axes_scale_bar_attr (#7885)
  • Update pydantic, pyqt6, xarray (#7886)
  • [pre-commit.ci] pre-commit autoupdate (#7891)
  • Fix test_view_menu.py::test_toggle_menubar to pass locally (#7892)
  • Add information about launch command to napari info dialog (#7897)
  • Add information about installed plugins to info dialog (#7899)
  • Surface original error when a selected plugin fails to read file. (#7901)
  • Update hypothesis, matplotlib, psygnal, scipy, tifffile, virtualenv (#7906)
  • Change @brisvag affiliation (#7909)
  • [pre-commit.ci] pre-commit autoupdate (#7910)
  • Rename action by add missed word separator (#7913)
  • Update build_trigger.yml to fix Circle pipeline (docs#701)

6 authors added to this release (alphabetical)

(+) denotes first-time contributors 🥳

7 reviewers added to this release (alphabetical)

(+) denotes first-time contributors 🥳

v0.6.1rc1: Prevent Shapes corruption when drawing tiny polygons with lasso (#7914)

15 May 04:33
c6c7132
Compare
Choose a tag to compare
# References and relevant issues

Closes #7903

# Description

Fix bug in adding shapes, by first removing points based on epsilon,
then checking if there are enough point to create a polygon.

---------

Co-authored-by: Juan Nunez-Iglesias <jni@fastmail.com>
Co-authored-by: Tim Monko <timmonko@gmail.com>

0.6.1rc0

14 May 05:08
ce1b665
Compare
Choose a tag to compare
0.6.1rc0 Pre-release
Pre-release

napari 0.6.1

⚠️ Note: these release notes are still in draft while 0.6.1 is in release candidate testing. ⚠️

Wed, May 14, 2025

We’re happy to announce the release of napari 0.6.1!

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

The HiLo👋 Colormap!

Introducing the HiLo colormap to napari! 🎨
This much-loved colormap (LUT) is like grayscale, except it displays values at or above the maximum contrast limit as red 🔴 and values at or below the minimum contrast limit as blue 🔵.
In the scientific imaging world, the HiLo colormap is often used to assess overexposed (saturated) ☀️ and underexposed (dark) 🌑 regions in images.
Enjoy this animation of the HiLo colormap in action! 👇
HiLo colormap animation

The HiLo colormap is now available as a result of the dependency bump to VisPy 0.15.0 #7846, which will unlock even more great new features in the coming napari releases.

New Features

  • Add inheritance of spatial data for functional plugin that return layer data. (#6986)
  • Bump to vispy 0.15 and update Colormap model (#7846)
  • Add multiplicative blending (#7868)

Improvements

  • Copy units from layer to layer (#7727)
  • Check return value is valid LayerDataTuple (#7851)

Bug Fixes

  • Refresh extent on async slicing (#7853)
  • Do not expose vispy BaseColormaps (#7858)
  • Properly determine dtype for view of Labels (#7883)
  • Fix scalebar color toggle with theme change (#7898)

Documentation

  • Update the version switcher for 0.6.0 (docs#697)
  • Update conf.py to try to fix opengraph image for dev and future deployments (docs#700)
  • Update sidebar-nav-bs.html to try to fix links (docs#702)
  • Draft release notes for 0.6.1 (docs#704)

Other Pull Requests

  • Remove outdated QSS styling elements (#7655)
  • Add docs constraints for python 3.12 (#7714)
  • Update hypothesis, ipython, numpy, pillow, pydantic (#7823)
  • Update builtins read extensions (#7826)
  • Skip tests that are failing because of Qt bug (#7884)
  • Use ViewerModel instead of make_napari_viewer in test_toggle_axes_scale_bar_attr (#7885)
  • Update pydantic, pyqt6, xarray (#7886)
  • [pre-commit.ci] pre-commit autoupdate (#7891)
  • Fix test_view_menu.py::test_toggle_menubar to pass locally (#7892)
  • Add information about launch command to napari info dialog (#7897)
  • Add information about installed plugins to info dialog (#7899)
  • Surface original error when a selected plugin fails to read file. (#7901)
  • Update hypothesis, matplotlib, psygnal, scipy, tifffile, virtualenv (#7906)
  • Add cron check to update reader extensions (#7907)
  • Change @brisvag affiliation (#7909)
  • [pre-commit.ci] pre-commit autoupdate (#7910)
  • Rename action by add missed word separator (#7913)
  • Update build_trigger.yml to fix Circle pipeline (docs#701)

6 authors added to this re 10000 lease (alphabetical)

(+) denotes first-time contributors 🥳

7 reviewers added to this release (alphabetical)

(+) denotes first-time contributors 🥳

0.6.0

01 May 05:08
v0.6.0
df7516c
Compare
Choose a tag to compare

napari 0.6.0

Thu, May 01, 2025

We’re happy to announce the release of napari 0.6.0! The right-handed release! This release features major changes so read on to see how they might affect you!

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

Summary

  • Updated viewer handedness ✋
  • Command palette 🎨
  • Display polygons with holes ⛳️
  • Transition to npe2 plugin engine by default 🔌
  • Many other GUI improvements 🖥️

Updated viewer handedness ✋

So. Funny story. 😅

For (checks notes) 5 years or so, napari has had a 3D view, and for those 5
years, for almost all datasets, that view has been a mirror image of the 3D
object they were trying to represent. Any biologists among you might have
noticed that loading 3D molecular coordinates of DNA would result in a
left-handed helix, while anatomists among you might have been surprised by how
many of your samples suffered from situs inversus
totalis
!

By and large, many things that people care about work exactly the same in the
mirror world — volume measurements, forces, tracking, speed, ... — so this bug
has gone mostly unnoticed, or noticed and shrugged off and unfixed for all this
time. But it's important for some things! Your heart is on the left side of
your body, but the right side of your mirror image's. This can be critical, for
example, when using software to plan surgery! Thankfully, we are not aware of
any cases of napari being used in this way. 😅

napari uses zyx coordinates instead of xyz because it is the most natural way
to work with NumPy arrays and the rest of the scientific Python imaging
ecosystem. Flipping the axes in this way also changes the handedness of the
space, unless you also flip the direction of one of the dimensions. The
simplest way to illustrate this is this 3D model of a right
shoe
, which looks
like this in previous versions of napari:

right shoe rendered as a left shoe in napari

and in 0.6.0, thanks to #7554:

right shoe correctly rendered as a right shoe in napari

Most users won't notice. But if you were among the users that noticed and you
implemented workarounds in your code (such as setting the z-scale to a negative
number), now is a good time to undo the workarounds for newer versions of
napari! If you run into any issues please get in touch on GitHub
issues
or on our Zulip chat room!

On the user space, we now offer several options to orient the axes any way you
like:

  1. Through the camera API: the Viewer.camera instance gains two new
    attributes: orientation, and orientation2d, which is just the last two
    dimensions of orientation. You can set the direction that the depth,
    vertical, and horizontal axes point to, respectively in that order, as
    follows (#7663):
# 2D
viewer.camera.orientation2d = ('up', 'right')
# 3D
viewer.camera.orientation = ('away', 'up', 'right')

See an example of this in action in
{ref}sphx_glr_gallery_xarray-latlon-timeseries.py.

  1. Through the UI: By right clicking on the dimension toggle in the viewer,
    and setting the axis orientations using the drop-down menus
    (#7686), which in 3D will
    further indicate whether the resulting coordinate frame is right-handed or
    left-handed

    (#7770):

axis orientation dialog

  1. Through the startup settings: If you want to use a specific axis
    orientation consistently, you can set the default orientation on startup by
    changing the relevant settings
    (#7787:

napari settings panel with axis orientation options highlighted

To restore the orientation from napari 0.5.6 and earlier, change the Depth
axis setting to "away" (i.e. depth axis points away from you).

Command palette 🎨

Tired of mousing around? Thanks to
#5483, napari gains a command
palette! Press {kbd}Ctrl/Command+Shift+P and start typing the name of the
action you want to use, and press {kbd}Enter when you've highlighted it. It
even works with plugins! This is the culmination of many months of work porting
napari's actions to Talley Lambert's
app-model. 🥳

command palette example

There's still lots of work to be done here, but in the meantime, give it a try!
We on the team have found it very hard to go back to using napari without the
palette!

Feature improvements to Shapes layers ⛳️

⚠️ When using numba for triangulation, some shapes will still not be drawn
correctly, due to a bug in VisPy. We recommend installing bermuda, our new
fast triangulation package, for the best performance.
⚠️

Finally, napari Shapes layers can now display polygons with holes in them,
which starts to open it up for use with mapping data, among other things!
(#7566,
#6654]) Implementing this feature
also eliminated a lot of bugs in our polygon drawing code, which could cause
crashes. If you've had issues with Shapes layers before, now might be a good
time to give them another try!

As part of this work, napari gained the ability to select between different
backends for triangulation, which means breaking up polygons into collections
of triangles, which is what GPUs are good at drawing.
(#7747) To use the new backends,
install the relevant package (for example, bermuda,
partsegcore-compiled-backend, or numba), then go to Settings > Experimental
> triangulation backend. (If you use napari[all], you will have bermuda
installed and it will be used automatically, as the default option is "fastest
available".)

Transition to npe2 plugin engine 🔌

npe2 was introduced over four years ago, with napari 0.4.12. npe2 has paved the
way for new plugin functionality, such as adding menu
items
and the command palette. We are now beginning
the process of deprecating npe1 (napari-plugin-engine) plugins, which we need
to do to continue to improve npe2 functionality, for example in file readers,
which is currently very entangled with npe1 code.

To aid this migration, npe1 plugins will now be automatically converted to npe2
by default. This may break some features if the plugins relied on import-time
behavior. (#7627)

During the 0.6.x series, if some plugin functionality is broken by the
automatic conversion, you can turn off this conversion in the plugin
preferences. However, the option to not convert npe1 plugins will be
removed in 0.7.0, and npe1 plugins will only work through automatic
conversion. We anticipate 0.7.0 will be released in the second half of 2025.

If you encounter conversion issues in a plugin you rely on, please contact the
plugin authors to encourage them to migrate their plugin to the npe2 system.

For more details on this change and how it affects plugins, see the detailed
guide
. If you are a plugin author and your plugin is not
yet npe2-compatible, please see our npe2 migration
guide
, and, if you encounter any issues, get in touch in
our Plugins Zulip chat
channel
or by
coming to one of our community meetings.

GUI improvements 🖥️

You'll notice the main napari GUI is subtly (or not so subtly) different in
0.6.0. Here are some of the improvements:

  • Buttons now have an indicator to show whether they contain an extra menu when
    right-clicking. (#7556)
  • The button to change between 2D and 3D views much more clearly shows
    what it does. (#7608)
  • … And it has an extra menu with lots of options to control the camera!
    (#7626)
  • You can now add a bit of spacing between layers in grid mode (and control it
    in the grid mode right-click menu!)
    (#7597)
  • The colormap indicator in image layers is now a button, allowing you to
    create a linear colormap with any color!
    (#7600)
  • If you select multiple layers in the layer list, you can now see the status
    display of all the selected layers in the status bar
    (#7673)
  • If you switch from 2D to 3D view and back again, your 3D viewing angle will
    be preserved (#7765)
  • Notice some weird behavior? Our new log handler and viewer might help! Access
    it with Help > Show logs. (#6900)

Other stuff

For developers: napari now depends on Pyth...

Read more

0.6.0rc2

29 Apr 11:03
v0.6.0rc2
60efad7
Compare
Choose a tag to compare
0.6.0rc2 Pre-release
Pre-release

napari 0.6.0

Wed, Apr 30, 2025

🚧 These notes are under construction while in pre-release 🚧

We’re happy to announce the release of napari 0.6.0! The right-handed release! This release features major changes so read on to see how they might affect you!

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

Summary

  • Updated viewer handedness ✋
  • Command palette 🎨
  • Display polygons with holes ⛳️
  • Transition to npe2 plugin engine by default 🔌
  • Many other GUI improvements 🖥️

Updated viewer handedness ✋

So. Funny story. 😅

For (checks notes) 5 years or so, napari has had a 3D view, and for those 5
years, for almost all datasets, that view has been a mirror image of the 3D
object they were trying to represent. Any biologists among you might have
noticed that loading 3D molecular coordinates of DNA would result in a
left-handed helix, while anatomists among you might have been surprised by how
many of your samples suffered from situs inversus
totalis
!

By and large, many things that people care about work exactly the same in the
mirror world — volume measurements, forces, tracking, speed, ... — so this bug
has gone mostly unnoticed, or noticed and shrugged off and unfixed for all this
time. But it's important for some things! Your heart is on the left side of
your body, but the right side of your mirror image's. This can be critical, for
example, when using software to plan surgery! Thankfully, we are not aware of
any cases of napari being used in this way. 😅

napari uses zyx coordinates instead of xyz because it is the most natural way
to work with NumPy arrays and the rest of the scientific Python imaging
ecosystem. Flipping the axes in this way also changes the handedness of the
space, unless you also flip the direction of one of the dimensions. The
simplest way to illustrate this is this 3D model of a right
shoe
, which looks
like this in previous versions of napari:

right shoe rendered as a left shoe in napari

and in 0.6.0, thanks to #7554:

right shoe correctly rendered as a right shoe in napari

Most users won't notice. But if you were among the users that noticed and you
implemented workarounds in your code (such as setting the z-scale to a negative
number), now is a good time to undo the workarounds for newer versions of
napari! If you run into any issues please get in touch on GitHub
issues
or on our Zulip chat room!

On the user space, we now offer several options to orient the axes any way you
like:

  1. Through the camera API: the Viewer.camera instance gains two new
    attributes: orientation, and orientation2d, which is just the last two
    dimensions of orientation. You can set the direction that the depth,
    vertical, and horizontal axes point to, respectively in that order, as
    follows (#7663):
# 2D
viewer.camera.orientation2d = ('up', 'right')
# 3D
viewer.camera.orientation = ('away', 'up', 'right')

S 9E81 ee an example of this in action in
{ref}sphx_glr_gallery_xarray-latlon-timeseries.py.

  1. Through the UI: By right clicking on the dimension toggle in the viewer,
    and setting the axis orientations using the drop-down menus
    (#7686), which in 3D will
    further indicate whether the resulting coordinate frame is right-handed or
    left-handed

    (#7770):

axis orientation dialog

  1. Through the startup settings: If you want to use a specific axis
    orientation consistently, you can set the default orientation on startup by
    changing the relevant settings
    (#7787:

napari settings panel with axis orientation options highlighted

To restore the orientation from napari 0.5.6 and earlier, change the Depth
axis setting to "away" (i.e. depth axis points away from you).

Command palette 🎨

Tired of mousing around? Thanks to
#5483, napari gains a command
palette! Press {kbd}Ctrl/Command+Shift+P and start typing the name of the
action you want to use, and press {kbd}Enter when you've highlighted it. It
even works with plugins! This is the culmination of many months of work porting
napari's actions to Talley Lambert's
app-model. 🥳

command palette example

There's still lots of work to be done here, but in the meantime, give it a try!
We on the team have found it very hard to go back to using napari without the
palette!

Feature improvements to Shapes layers ⛳️

⚠️ When using numba for triangulation, some shapes will still not be drawn
correctly, due to a bug in VisPy. We recommend installing bermuda, our new
fast triangulation package, for the best performance.
⚠️

Finally, napari Shapes layers can now display polygons with holes in them,
which starts to open it up for use with mapping data, among other things!
(#7566,
#6654]) Implementing this feature
also eliminated a lot of bugs in our polygon drawing code, which could cause
crashes. If you've had issues with Shapes layers before, now might be a good
time to give them another try!

As part of this work, napari gained the ability to select between different
backends for triangulation, which means breaking up polygons into collections
of triangles, which is what GPUs are good at drawing.
(#7747) To use the new backends,
install the relevant package (for example, bermuda,
partsegcore-compiled-backend, or numba), then go to Settings > Experimental
> triangulation backend. (If you use napari[all], you will have bermuda
installed and it will be used automatically, as the default option is "fastest
available".)

Transition to npe2 plugin engine 🔌

npe2 was introduced over four years ago, with napari 0.4.12. npe2 has paved the
way for new plugin functionality, such as adding menu
items
and the command palette. We are now beginning
the process of deprecating npe1 (napari-plugin-engine) plugins, which we need
to do to continue to improve npe2 functionality, for example in file readers,
which is currently very entangled with npe1 code.

To aid this migration, npe1 plugins will now be automatically converted to npe2
by default. This may break some features if the plugins relied on import-time
behavior. (#7627)

During the 0.6.x series, if some plugin functionality is broken by the
automatic conversion, you can turn off this conversion in the plugin
preferences. However, the option to not convert npe1 plugins will be
removed in 0.7.0, and npe1 plugins will only work through automatic
conversion. We anticipate 0.7.0 will be released in the second half of 2025.

If you encounter conversion issues in a plugin you rely on, please contact the
plugin authors to encourage them to migrate their plugin to the npe2 system.

For more details on this change and how it affects plugins, see the detailed
guide
. If you are a plugin author and your plugin is not
yet npe2-compatible, please see our npe2 migration
guide
, and, if you encounter any issues, get in touch in
our Plugins Zulip chat
channel
or by
coming to one of our community meetings.

GUI improvements 🖥️

You'll notice the main napari GUI is subtly (or not so subtly) different in
0.6.0. Here are some of the improvements:

  • Buttons now have an indicator to show whether they contain an extra menu when
    right-clicking. (#7556)
  • The button to change between 2D and 3D views much more clearly shows
    what it does. (#7608)
  • … And it has an extra menu with lots of options to control the camera!
    (#7626)
  • You can now add a bit of spacing between layers in grid mode (and control it
    in the grid mode right-click menu!)
    (#7597)
  • The colormap indicator in image layers is now a button, allowing you to
    create a linear colormap with any color!
    (#7600)
  • If you select multiple layers in the layer list, you can now see the status
    display of all the selected layers in the status bar
    (#7673)
  • If you switch from 2D to 3D view and back again, your 3D viewing angle will
    be preserved (#7765)
  • Notice some weird behavior? Our new log handler and viewer might help! Access
    it with Help > Show logs. ([#6900](#6900...
Read more

0.6.0rc1

29 Apr 08:09
v0.6.0rc1
9fb667b
Compare
Choose a tag to compare
0.6.0rc1 Pre-release
Pre-release

napari 0.6.0

Wed, Apr 30, 2025

🚧 These notes are under construction while in pre-release 🚧

We’re happy to announce the release of napari 0.6.0! The right-handed release! This release features major changes so read on to see how they might affect you!

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

Summary

  • Updated viewer handedness ✋
  • Command palette 🎨
  • Display polygons with holes ⛳️
  • Transition to npe2 plugin engine by default 🔌
  • Many other GUI improvements 🖥️

Updated viewer handedness ✋

So. Funny story. 😅

For (checks notes) 5 years or so, napari has had a 3D view, and for those 5
years, for almost all datasets, that view has been a mirror image of the 3D
object they were trying to represent. Any biologists among you might have
noticed that loading 3D molecular coordinates of DNA would result in a
left-handed helix, while anatomists among you might have been surprised by how
many of your samples suffered from situs inversus
totalis
!

By and large, many things that people care about work exactly the same in the
mirror world — volume measurements, forces, tracking, speed, ... — so this bug
has gone mostly unnoticed, or noticed and shrugged off and unfixed for all this
time. But it's important for some things! Your heart is on the left side of
your body, but the right side of your mirror image's. This can be critical, for
example, when using software to plan surgery! Thankfully, we are not aware of
any cases of napari being used in this way. 😅

napari uses zyx coordinates instead of xyz because it is the most natural way
to work with NumPy arrays and the rest of the scientific Python imaging
ecosystem. Flipping the axes in this way also changes the handedness of the
space, unless you also flip the direction of one of the dimensions. The
simplest way to illustrate this is this 3D model of a right
shoe
, which looks
like this in previous versions of napari:

right shoe rendered as a left shoe in napari

and in 0.6.0, thanks to #7554:

right shoe correctly rendered as a right shoe in napari

Most users won't notice. But if you were among the users that noticed and you
implemented workarounds in your code (such as setting the z-scale to a negative
number), now is a good time to undo the workarounds for newer versions of
napari! If you run into any issues please get in touch on GitHub
issues
or on our Zulip chat room!

On the user space, we now offer several options to orient the axes any way you
like:

  1. Through the camera API: the Viewer.camera instance gains two new
    attributes: orientation, and orientation2d, which is just the last two
    dimensions of orientation. You can set the direction that the depth,
    vertical, and horizontal axes point to, respectively in that order, as
    follows (#7663):
# 2D
viewer.camera.orientation2d = ('up', 'right')
# 3D
viewer.camera.orientation = ('away', 'up', 'right')

See an example of this in action in
{ref}sphx_glr_gallery_xarray-latlon-timeseries.py.

  1. Through the UI: By right clicking on the dimension toggle in the viewer,
    and setting the axis orientations using the drop-down menus
    (#7686), which in 3D will
    further indicate whether the resulting coordinate frame is right-handed or
    left-handed

    (#7770):

axis orientation dialog

  1. Through the startup settings: If you want to use a specific axis
    orientation consistently, you can set the default orientation on startup by
    changing the relevant settings
    (#7787:

napari settings panel with axis orientation options highlighted

To restore the orientation from napari 0.5.6 and earlier, change the Depth
axis setting to "away" (i.e. depth axis points away from you).

Command palette 🎨

Tired of mousing around? Thanks to
#5483, napari gains a command
palette! Press {kbd}Ctrl/Command+Shift+P and start typing the name of the
action you want to use, and press {kbd}Enter when you've highlighted it. It
even works with plugins! This is the culmination of many months of work porting
napari's actions to Talley Lambert's
app-model. 🥳

command palette example

There's still lots of work to be done here, but in the meantime, give it a try!
We on the team have found it very hard to go back to using napari without the
palette!

Feature improvements to Shapes layers ⛳️

⚠️ When using numba for triangulation, some shapes will still not be drawn
correctly, due to a bug in VisPy. We recommend installing bermuda, our new
fast triangulation package, for the best performance.
⚠️

Finally, napari Shapes layers can now display polygons with holes in them,
which starts to open it up for use with mapping data, among other things!
(#7566,
#6654]) Implementing this feature
also eliminated a lot of bugs in our polygon drawing code, which could cause
crashes. If you've had issues with Shapes layers before, now might be a good
time to give them another try!

As part of this work, napari gained the ability to select between different
backends for triangulation, which means breaking up polygons into collections
of triangles, which is what GPUs are good at drawing.
(#7747) To use the new backends,
install the relevant package (for example, bermuda,
partsegcore-compiled-backend, or numba), then go to Settings > Experimental
> triangulation backend. (If you use napari[all], you will have bermuda
installed and it will be used automatically, as the default option is "fastest
available".)

Transition to npe2 plugin engine 🔌

npe2 was introduced over four years ago, with napari 0.4.12. npe2 has paved the
way for new plugin functionality, such as adding menu
items
and the command palette. We are now beginning
the process of deprecating npe1 (napari-plugin-engine) plugins, which we need
to do to continue to improve npe2 functionality, for example in file readers,
which is currently very entangled with npe1 code.

To aid this migration, npe1 plugins will now be automatically converted to npe2
by default. This may break some features if the plugins relied on import-time
behavior. (#7627)

During the 0.6.x series, if some plugin functionality is broken by the
automatic conversion, you can turn off this conversion in the plugin
preferences. However, the option to not convert npe1 plugins will be
removed in 0.7.0, and npe1 plugins will only work through automatic
conversion. We anticipate 0.7.0 will be released in the second half of 2025.

If you encounter conversion issues in a plugin you rely on, please contact the
plugin authors to encourage them to migrate their plugin to the npe2 system.

For more details on this change and how it affects plugins, see the detailed
guide
. If you are a plugin author and your plugin is not
yet npe2-compatible, please see our npe2 migration
guide
, and, if you encounter any issues, get in touch in
our Plugins Zulip chat
channel
or by
coming to one of our community meetings.

GUI improvements 🖥️

You'll notice the main napari GUI is subtly (or not so subtly) different in
0.6.0. Here are some of the improvements:

  • Buttons now have an indicator to show whether they contain an extra menu when
    right-clicking. (#7556)
  • The button to change between 2D and 3D views much more clearly shows
    what it does. (#7608)
  • … And it has an extra menu with lots of options to control the camera!
    (#7626)
  • You can now add a bit of spacing between layers in grid mode (and control it
    in the grid mode right-click menu!)
    (#7597)
  • The colormap indicator in image layers is now a button, allowing you to
    create a linear colormap with any color!
    (#7600)
  • If you select multiple layers in the layer list, you can now see the status
    display of all the selected layers in the status bar
    (#7673)
  • If you switch from 2D to 3D view and back again, your 3D viewing angle will
    be preserved (#7765)
  • Notice some weird behavior? Our new log handler and viewer might help! Access
    it with Help > Show logs. ([#6900](#6900...
Read more

0.6.0rc0

23 Apr 13:23
v0.6.0rc0
dd73493
Compare
Choose a tag to compare
0.6.0rc0 Pre-release
Pre-release
C309

napari 0.6.0

Wed, Apr 30, 2025

🚧 These notes are under construction while in pre-release 🚧

We’re happy to announce the release of napari 0.6.0! The right-handed release! This release features major changes so read on to see how they might affect you!

napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for exploring, annotating, and analyzing multi-dimensional images. It’s built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends).

For more information, examples, and documentation, please visit our website: https://napari.org/

Highlights

Summary

  • Updated viewer handedness ✋
  • Command palette 🎨
  • Display polygons with holes ⛳️
  • Transition to npe2 plugin engine by default 🔌
  • Many other GUI improvements 🖥️

Updated viewer handedness ✋

So. Funny story. 😅

For (checks notes) 5 years or so, napari has had a 3D view, and for those 5
years, for almost all datasets, that view has been a mirror image of the 3D
object they were trying to represent. Any biologists among you might have
noticed that loading 3D molecular coordinates of DNA would result in a
left-handed helix, while anatomists among you might have been surprised by how
many of your samples suffered from situs inversus
totalis
!

By and large, many things that people care about work exactly the same in the
mirror world — volume measurements, forces, tracking, speed, ... — so this bug
has gone mostly unnoticed, or noticed and shrugged off and unfixed for all this
time. But it's important for some things! Your heart is on the left side of
your body, but the right side of your mirror image's. This can be critical, for
example, when using software to plan surgery! Thankfully, we are not aware of
any cases of napari being used in this way. 😅

napari uses zyx coordinates instead of xyz because it is the most natural way
to work with NumPy arrays and the rest of the scientific Python imaging
ecosystem. Flipping the axes in this way also changes the handedness of the
space, unless you also flip the direction of one of the dimensions. The
simplest way to illustrate this is this 3D model of a right
shoe
, which looks
like this in previous versions of napari:

right shoe rendered as a left shoe in napari

and in 0.6.0, thanks to #7554:

right shoe correctly rendered as a right shoe in napari

Most users won't notice. But if you were among the users that noticed and you
implemented workarounds in your code (such as setting the z-scale to a negative
number), now is a good time to undo the workarounds for newer versions of
napari! If you run into any issues please get in touch on GitHub
issues
or on our Zulip chat room!

On the user space, we now offer several options to orient the axes any way you
like:

  1. Through the camera API: the Viewer.camera instance gains two new
    attributes: orientation, and orientation2d, which is just the last two
    dimensions of orientation. You can set the direction that the depth,
    vertical, and horizontal axes point to, respectively in that order, as
    follows (#7663):
# 2D
viewer.camera.orientation2d = ('up', 'right')
# 3D
viewer.camera.orientation = ('away', 'up', 'right')

See an example of this in action in
{ref}sphx_glr_gallery_xarray-latlon-timeseries.py.

  1. Through the UI: By right clicking on the dimension toggle in the viewer,
    and setting the axis orientations using the drop-down menus
    (#7686), which in 3D will
    further indicate whether the resulting coordinate frame is right-handed or
    left-handed

    (#7770):

axis orientation dialog

  1. Through the startup settings: If you want to use a specific axis
    orientation consistently, you can set the default orientation on startup by
    changing the relevant settings
    (#7787:

napari settings panel with axis orientation options highlighted

To restore the orientation from napari 0.5.6 and earlier, change the Depth
axis setting to "away" (i.e. depth axis points away from you).

Command palette 🎨

Tired of mousing around? Thanks to
#5483, napari gains a command
palette! Press {kbd}Ctrl/Command+Shift+P and start typing the name of the
action you want to use, and press {kbd}Enter when you've highlighted it. It
even works with plugins! This is the culmination of many months of work porting
napari's actions to Talley Lambert's
app-model. 🥳

command palette example

There's still lots of work to be done here, but in the meantime, give it a try!
We on the team have found it very hard to go back to using napari without the
palette!

Feature improvements to Shapes layers ⛳️

⚠️ When using numba for triangulation, some shapes will still not be drawn
correctly, due to a bug in VisPy. We recommend installing bermuda, our new
fast triangulation package, for the best performance.
⚠️

Finally, napari Shapes layers can now display polygons with holes in them,
which starts to open it up for use with mapping data, among other things!
(#7566,
#6654]) Implementing this feature
also eliminated a lot of bugs in our polygon drawing code, which could cause
crashes. If you've had issues with Shapes layers before, now might be a good
time to give them another try!

As part of this work, napari gained the ability to select between different
backends for triangulation, which means breaking up polygons into collections
of triangles, which is what GPUs are good at drawing.
(#7747) To use the new backends,
install the relevant package (for example, bermuda,
partsegcore-compiled-backend, or numba), then go to Settings > Experimental
> triangulation backend. (If you use napari[all], you will have bermuda
installed and it will be used automatically, as the default option is "fastest
available".)

Transition to npe2 plugin engine 🔌

npe2 was introduced over four years ago, with napari 0.4.12. npe2 has paved the
way for new plugin functionality, such as adding menu
items
and the command palette. We are now beginning
the process of deprecating npe1 (napari-plugin-engine) plugins, which we need
to do to continue to improve npe2 functionality, for example in file readers,
which is currently very entangled with npe1 code.

To aid this migration, npe1 plugins will now be automatically converted to npe2
by default. This may break some features if the plugins relied on import-time
behavior. (#7627)

During the 0.6.x series, if some plugin functionality is broken by the
automatic conversion, you can turn off this conversion in the plugin
preferences. However, the option to not convert npe1 plugins will be
removed in 0.7.0, and npe1 plugins will only work through automatic
conversion. We anticipate 0.7.0 will be released in the second half of 2025.

If you encounter conversion issues in a plugin you rely on, please contact the
plugin authors to encourage them to migrate their plugin to the npe2 system.

For more details on this change and how it affects plugins, see the detailed
guide
. If you are a plugin author and your plugin is not
yet npe2-compatible, please see our npe2 migration
guide
, and, if you encounter any issues, get in touch in
our Plugins Zulip chat
channel
or by
coming to one of our community meetings.

GUI improvements 🖥️

You'll notice the main napari GUI is subtly (or not so subtly) different in
0.6.0. Here are some of the improvements:

  • Buttons now have an indicator to show whether they contain an extra menu when
    right-clicking. (#7556)
  • The button to change between 2D and 3D views much more clearly shows
    what it does. (#7608)
  • … And it has an extra menu with lots of options to control the camera!
    (#7626)
  • You can now add a bit of spacing between layers in grid mode (and control it
    in the grid mode right-click menu!)
    (#7597)
  • The colormap indicator in image layers is now a button, allowing you to
    create a linear colormap with any color!
    (#7600)
  • If you select multiple layers in the layer list, you can now see the status
    display of all the selected layers in the status bar
    (#7673)
  • If you switch from 2D to 3D view and back again, your 3D viewing angle will
    be preserved (#7765)
  • Notice some weird behavior? Our new log handler and viewer might help! Access
    it with Help > Show logs. ([#6900](#6900...
Read more
0