From 18bd5c1950b5b413e9becb6208e96afc81c7f270 Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Sat, 25 Jul 2026 16:22:13 +0200 Subject: [PATCH 01/13] change overlay access pattern --- docs/_scripts/homepage_video.py | 2 +- docs/getting_started/viewer.md | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/_scripts/homepage_video.py b/docs/_scripts/homepage_video.py index 9c3e5270a..ae8abddb9 100644 --- a/docs/_scripts/homepage_video.py +++ b/docs/_scripts/homepage_video.py @@ -82,7 +82,7 @@ def build_viewer(*, show: bool) -> napari.Viewer: layer.rendering = RENDERING layer.attenuation = ATTENUATION layer.colormap = COLORMAP - viewer.scale_bar.visible = True + viewer.canvas.scale_bar.visible = True viewer.axes.visible = True viewer.dims.axis_labels = ('T', 'Z', 'Y', 'X') viewer.window._qt_window.resize(*WINDOW_SIZE) diff --git a/docs/getting_started/viewer.md b/docs/getting_started/viewer.md index e224458fa..61b1b8c4c 100644 --- a/docs/getting_started/viewer.md +++ b/docs/getting_started/viewer.md @@ -635,11 +635,15 @@ The right side of the status bar contains some helpful tips depending on which l Overlays provide additional information about the render state and the data, displayed on the canvas itself. In napari there are two main types: canvas overlays - which are locked in position on the screen and hover over the rendered canvas - and scene overlays - which are located somewhere in world coordinates and follow the camera and dims just like layers. Canvas overlays can be positioned in various locations on the canvas (e.g: `top_left`, `bottom_center`), and will automatically tile if multiple are present at the same location. -The viewer gives access to a few such overlays: +Canvas overlays can be accessed via `viewer.canvas.overlays`, whereas viewer overlays live on the viewer itself. For example: -- Scale bar (canvas overlay, accessible via `viewer.scale_bar`): it displays distances in world coordinates for the displayed scene. The scale bar usually inherits layer units when they are set. If inference fails it can fall back to a dimensionless label, and if displayed axes mix dimensionalities it uses the last displayed axis unit with a warning. You can control its appearance and fixed length from the viewer. See the [units guide](units-guide) for more information. +```{tip} +`viewer.canvas.overlays` is a smart dictionary that allows access via attributes, instead of only via keys. So a shorthand for `viewer.canvas.overlays['text'] is `viewer.canvas.overlays.text`! +``` + +- Scale bar (accessible via `viewer.canvas.overlays.scale_bar`): it displays distances in world coordinates for the displayed scene. The scale bar usually inherits layer units when they are set. If inference fails it can fall back to a dimensionless label, and if displayed axes mix dimensionalities it uses the last displayed axis unit with a warning. You can control its appearance and fixed length from the viewer. See the [units guide](units-guide) for more information. - Axes (scene overlay, accessible via `viewer.axes`): displays basis axes at the origin. -- Text Overlay (canvas overlay, accessible via `viewer.text_overlay`): displays arbitrary text on the canvas. +- Text Overlay (canvas overlay, accessible via `viewer.canvas.overlays.text`): displays arbitrary text on the canvas. These overlays can also be accessed via graphical interface through the **View** menu and their respective submenus. From 323bc9402bbf95d7d26e2c1bbbfe3c1aee38c6c2 Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Sat, 25 Jul 2026 16:29:30 +0200 Subject: [PATCH 02/13] update docs --- docs/getting_started/viewer.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/getting_started/viewer.md b/docs/getting_started/viewer.md index 61b1b8c4c..f1ac93f01 100644 --- a/docs/getting_started/viewer.md +++ b/docs/getting_started/viewer.md @@ -178,6 +178,8 @@ The **canvas** is in the center of the viewer and contains the visual display of +++ +The canvas model can be accessed via `viewer.canvas`; several things are exposed here, such as the [grid mode](grid-mode), [canvas overlays](viewer-overlays) and the overlay tiling settings. + (layer-list)= ### Layer list @@ -589,6 +591,8 @@ Note that this has no effect on the order of `viewer.dims.current_step`. The fir The fourth button transposes the displayed dimensions. +(grid-mode)= + ### Grid button The fifth button, the grid button, toggles between the default layer mode and grid mode. When clicked, it distributes the layers in a grid of cells. Each cell is a small interactive canvas whose camera is linked with all the others. @@ -606,7 +610,7 @@ The fifth button, the grid button, toggles between the default layer mode and gr ``` -The distribution of the layers in the grid can be altered according to the settings below, accessible by right-clicking the button (or programmatically through `viewer.grid`). The question icons can be hovered for more information about each setting. +The distribution of the layers in the grid can be altered according to the settings below, accessible by right-clicking the button (or programmatically through `viewer.canvas.grid`). The question icons can be hovered for more information about each setting. 1. Grid stride: By default, 1, placing one layer in each view. The value determines the number of layers overlaid in each view. Negative values reverse the order in which layers are displayed in the grid. 1. Grid width/height: By default, -1, which automatically determines the grid layout. From e6e6d0418cfe5dd279da8f3c01aa063097df1176 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Sun, 26 Jul 2026 11:33:02 +0200 Subject: [PATCH 03/13] Update label name in condition of label trigger build (#1067) # References and relevant issues follow-up #1031 # Description Fix condition to use the current label name. --- .github/workflows/label_triggered_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/label_triggered_build.yml b/.github/workflows/label_triggered_build.yml index 45e4733c0..99d8624d3 100644 --- a/.github/workflows/label_triggered_build.yml +++ b/.github/workflows/label_triggered_build.yml @@ -7,7 +7,7 @@ on: jobs: full-artifact-build: - if: contains(github.event.pull_request.labels.*.name, 'ready to merge') + if: contains(github.event.pull_request.labels.*.name, 'Full docs preview/ready to merge') uses: napari/shared-workflows/.github/workflows/build_docs.yml@main secrets: inherit with: From bbca9c54996bb62c64f82dbcbe2bae333c937f16 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 09:44:50 +0200 Subject: [PATCH 04/13] [pre-commit.ci] pre-commit autoupdate (#1090) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.15.22 → v0.16.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.22...v0.16.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6d800e83e..2a47a7776 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - id: codespell - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.22 + rev: v0.16.0 hooks: # Run the linter. - id: ruff-check From 09ab579382fcefff3270703a955e21d0e1fbd8b6 Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Thu, 30 Jul 2026 05:29:52 +0200 Subject: [PATCH 05/13] Bring several NAPs up to date (#1091) # Description NAPs are supposed to be Accepted, Widthdrawn or made Final when appropriate. We haven't been on top of this and several NAPs that have _effectively_ changed status were never formally changed. This PR does that, for those naps whose informal status is hopefully obvious :P Feel free to disagree below and I'll update accordingly, let's leave this open for a while! cc @napari/core-devs --- docs/naps/1-institutional-funding-partners.md | 2 +- docs/naps/2-conda-based-packaging.md | 2 +- docs/naps/3-spaces.md | 6 +++++- docs/naps/5-new-logo.md | 4 ++++ docs/naps/6-contributable-menus.md | 2 +- docs/naps/8-telemetry.md | 6 +++++- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/naps/1-institutional-funding-partners.md b/docs/naps/1-institutional-funding-partners.md index 961a8cbea..d77226119 100644 --- a/docs/naps/1-institutional-funding-partners.md +++ b/docs/naps/1-institutional-funding-partners.md @@ -6,7 +6,7 @@ :Author: "Juan Nunez-Iglesias " :Author: "Nicholas Sofroniew " :Created: '2022-04-21' -:Status: Accepted +:Status: Final :Type: Process ``` diff --git a/docs/naps/2-conda-based-packaging.md b/docs/naps/2-conda-based-packaging.md index 06837b939..194f48cca 100644 --- a/docs/naps/2-conda-based-packaging.md +++ b/docs/naps/2-conda-based-packaging.md @@ -8,7 +8,7 @@ :Created: 2022-05-05 :Resolution: https://github.com/napari/napari/pull/4602#pullrequestreview-1028720579 :Resolved: 2022-07-14 -:Status: Accepted +:Status: Final :Type: :Version effective: 0.4.17, 0.5 ``` diff --git a/docs/naps/3-spaces.md b/docs/naps/3-spaces.md index d27d22378..32e627066 100644 --- a/docs/naps/3-spaces.md +++ b/docs/naps/3-spaces.md @@ -5,10 +5,14 @@ ```{eval-rst} :Author: Lorenzo Gaifas, brisvag@gmail.com :Created: 2022-06-08 -:Status: Draft +:Status: Withdrawn :Type: Standards Track ``` +:::{note} +This NAP has been withdrawn in favour of the more comprehensive [NAP-9 - Multiple Views](nap-9). +::: + ## Abstract diff --git a/docs/naps/5-new-logo.md b/docs/naps/5-new-logo.md index 1dfe1b58b..f27dc1178 100644 --- a/docs/naps/5-new-logo.md +++ b/docs/naps/5-new-logo.md @@ -12,6 +12,10 @@ :Version effective: 0.5 ``` +:::{note} +This NAP has been withdrawn due to lack of interest. It is now moot as a new logo has been made differently. +::: + ## Abstract This NAP proposes a new, mathematically-defined logo for napari. diff --git a/docs/naps/6-contributable-menus.md b/docs/naps/6-contributable-menus.md index 1be4d0c39..0ecef98e0 100644 --- a/docs/naps/6-contributable-menus.md +++ b/docs/naps/6-contributable-menus.md @@ -7,7 +7,7 @@ :Created: 2022-12-02 :Resolution: TBD :Resolved: TBD -:Status: Draft +:Status: Provisional :Type: Standards Track :Version effective: TBD ``` diff --git a/docs/naps/8-telemetry.md b/docs/naps/8-telemetry.md index 998230376..04e317a84 100644 --- a/docs/naps/8-telemetry.md +++ b/docs/naps/8-telemetry.md @@ -7,10 +7,14 @@ :Created: 2023-08-11 :Resolution: (required for Accepted | Rejected | Withdrawn) :Resolved: - :Status: Draft + :Status: Withdrawn :Type: Standards Track :Version effective: (for accepted NAPs) ``` + +:::{note} +This NAP has been withdrawn after polling the community, which was generally either against or uninterested in opting in. +::: ## Abstract From 046188465410b9015cbac1b3c7fb8713cade3206 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 09:13:21 +0200 Subject: [PATCH 06/13] [pre-commit.ci] pre-commit autoupdate (#1095) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.16.0 → v0.16.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.16.0...v0.16.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2a47a7776..d62d8602a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - id: codespell - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.16.0 + rev: v0.16.1 hooks: # Run the linter. - id: ruff-check From 94a3d1ceb007d99d6e7dee933fae306f3278ee8f Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Wed, 5 Aug 2026 14:38:43 +0200 Subject: [PATCH 07/13] Add initial release notes for 0.9.0 (#1097) --- docs/_toc.yml | 1 + docs/release/release_0_9_0.md | 209 ++++++++++++++++++++++++++++++++++ 2 files changed, 210 insertions(+) create mode 100644 docs/release/release_0_9_0.md diff --git a/docs/_toc.yml b/docs/_toc.yml index 08050b04b..4bcada03f 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -74,6 +74,7 @@ subtrees: - file: release/index subtrees: - entries: + - file: release/release_0_9_0 - file: release/release_0_8_0 - file: release/release_0_7_1 - file: release/release_0_7_0 diff --git a/docs/release/release_0_9_0.md b/docs/release/release_0_9_0.md new file mode 100644 index 000000000..5894c8b4d --- /dev/null +++ b/docs/release/release_0_9_0.md @@ -0,0 +1,209 @@ +# napari 0.9.0 +⚠️ *Note: these release notes are still in draft while 0.9.0a1 is in prerelease testing.* ⚠️ + +*Mon, Aug 17, 2026* + +We're happy to announce the release of napari 0.9.0! +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. + +napari follows [EffVer (Intended Effort Versioning)](https://effver.org/); this is a **Macro** release containing awesome new features, but may require dedication of some significant time when upgrading projects to use this version. + +## Highlights + +### Fuzzy find in command palette + +Implement fuzzy find for the command palette ([#8661](https://github.com/napari/napari/pull/8661)) + +### Adjust grid rendering with hidden layers + +If using grid layout without using stride, there are no blanks fields for hidden layers +thanks to [#9244](https://github.com/napari/napari/pull/9244) + +### Inherit axis labels from layers + +Thanks to [#9282](https://github.com/napari/napari/pull/9282) the axis labels in interface, next to slide and `Dims.axis_labels` +are calculated based on axis labels of layers + +### Status bar coordinates as floats + +Thanks to [#9287](https://github.com/napari/napari/pull/9287) we no longer render coordinates on scale bar +as integers, but as floats. It is important for all who use fractional +`Layer.scale` + +### Public API for auto contrast limit + +In [#9271](https://github.com/napari/napari/pull/9271) the public API for auto contrast limits is added + + + +- Canvas model ([#8633](https://github.com/napari/napari/pull/8633)) +- Implement Surface slicing with async request/response ([#8783](https://github.com/napari/napari/pull/8783)) +- Remove translations code ([#8935](https://github.com/napari/napari/pull/8935)) +- Add builtin Wavefront OBJ to surfaces reader ([#9228](https://github.com/napari/napari/pull/9228)) + + +- Dynamically construct layer controls based on selection ([#9318](https://github.com/napari/napari/pull/9318)) + +## New Features + +- Implement fuzzy find for the command palette ([#8661](https://github.com/napari/napari/pull/8661)) +- Implement Surface slicing with async request/response ([#8783](https://github.com/napari/napari/pull/8783)) +- Small refactor of point slicing + `rescale` projection mode to replace out_of_slice_display ([#8786](https://github.com/napari/napari/pull/8786)) +- feat: add `new` label button to the labels controls ([#9215](https://github.com/napari/napari/pull/9215)) +- Add builtin Wavefront OBJ to surfaces reader ([#9228](https://github.com/napari/napari/pull/9228)) +- Dynamically construct layer controls based on selection ([#9318](https://github.com/napari/napari/pull/9318)) + +## Improvements + +- MAINT Always raise error when `widget_name` given in `get_widget_contribution` ([#6544](https://github.com/napari/napari/pull/6544)) +- move features table widget command to the Metadata menu ([#9231](https://github.com/napari/napari/pull/9231)) +- fix: change the order of edge/face color and border ([#9232](https://github.com/napari/napari/pull/9232)) +- Move the layer lock to group with link/unlink, rather than with visib… ([#9235](https://github.com/napari/napari/pull/9235)) +- fix: adjust the layout based on the hidden layers in grid ([#9244](https://github.com/napari/napari/pull/9244)) +- Improve slider handle conspicuity by using theme's `current` color for active dim ([#9255](https://github.com/napari/napari/pull/9255)) +- publicly expose auto contrast limits ([#9271](https://github.com/napari/napari/pull/9271)) +- update dims axis labels from layers axis labels ([#9282](https://github.com/napari/napari/pull/9282)) +- Status bar coordinates as floats ([#9287](https://github.com/napari/napari/pull/9287)) +- UX: Indicate web links in Help menu with ↗ (unicode character) ([#9291](https://github.com/napari/napari/pull/9291)) +- New layer inherits axis labels when derived from another layer ([#9293](https://github.com/napari/napari/pull/9293)) +- Adding histogram to surfaces ([#9306](https://github.com/napari/napari/pull/9306)) +- Dynamically construct layer controls based on selection ([#9318](https://github.com/napari/napari/pull/9318)) +- UX/UI: Bump the splitter (separator) size by 1px ([#9344](https://github.com/napari/napari/pull/9344)) + +## Performance + +- [perf] Defer PIL import in labels.py polygon mask ([#9205](https://github.com/napari/napari/pull/9205)) + +## Bug Fixes + +- Fix multiscale level selection for anisotropic data ([#9201](https://github.com/napari/napari/pull/9201)) +- fix async colormap ([#9209](https://github.com/napari/napari/pull/9209)) +- Fix cross layer in multiple viewer example to use line vectors. ([#9213](https://github.com/napari/napari/pull/9213)) +- Do not update `current_properties` on Shapes selection changed ([#9221](https://github.com/napari/napari/pull/9221)) +- fix: action binding the `new-label` tooltips with shortcuts ([#9230](https://github.com/napari/napari/pull/9230)) +- fix: add minimum value to grid mode strides to allow negative strides ([#9236](https://github.com/napari/napari/pull/9236)) +- fix(qt): dimension sliders need a minimum width ([#9254](https://github.com/napari/napari/pull/9254)) +- Fix sync slicing when toggling to 3D with auto contrast ([#9263](https://github.com/napari/napari/pull/9263)) +- Fix enum breaks from translations removal ([#9274](https://github.com/napari/napari/pull/9274)) +- Fix auto_contrast button state initialization ([#9289](https://github.com/napari/napari/pull/9289)) +- Vectors: make edge_color_mode = 'direct' actually leave the feature mapping ([#9333](https://github.com/napari/napari/pull/9333)) +- Use magnitude of Layer.scale for points/shape handles ([#9339](https://github.com/napari/napari/pull/9339)) +- Change `Dims` slider connection from `textChanged` to `textEdited` to stop wrong updates ([#9355](https://github.com/napari/napari/pull/9355)) + +## Documentation + +- [pre-commit.ci] pre-commit autoupdate ([docs#1069](https://github.com/napari/docs/pull/1069)) +- Update homepage video for 0.8.0/.1 changes ([docs#1070](https://github.com/napari/docs/pull/1070)) +- Enhance contributing documentation with GitHub edit info ([docs#1075](https://github.com/napari/docs/pull/1075)) +- Adding uv to getting started - installation ([docs#1076](https://github.com/napari/docs/pull/1076)) +- make napari logo usage page ([docs#1077](https://github.com/napari/docs/pull/1077)) +- Delete useless line ([docs#1078](https://github.com/napari/docs/pull/1078)) +- Update auto-fill-labels loop video to extend end frame ([docs#1082](https://github.com/napari/docs/pull/1082)) +- Bring several NAPs up to date ([docs#1091](https://github.com/napari/docs/pull/1091)) +- [pre-commit.ci] pre-commit autoupdate ([docs#1095](https://github.com/napari/docs/pull/1095)) +- Update dev instructions to use prek ([docs#1096](https://github.com/napari/docs/pull/1096)) +- Add initial release notes for 0.9.0 ([docs#1097](https://github.com/napari/docs/pull/1097)) +- Update recommended Python version in README from 3.11 to 3.13 ([#9223](https://github.com/napari/napari/pull/9223)) +- Load data from zarr in map example if contextily fails ([#9307](https://github.com/napari/napari/pull/9307)) + +## Other Pull Requests + +- Update label name in condition of label trigger build ([docs#1067](https://github.com/napari/docs/pull/1067)) +- Update version switcher to point to 0.8.0 as stable ([docs#1071](https://github.com/napari/docs/pull/1071)) +- Remove contributing text about adding translations ([docs#1081](https://github.com/napari/docs/pull/1081)) +- ci(dependabot): bump the github-actions group with 4 updates ([docs#1094](https://github.com/napari/docs/pull/1094)) +- fix(typing): add typing and fix mypy error in `qt_mode_buttons.py` ([#9110](https://github.com/napari/napari/pull/9110)) +- Use shared version of label clean workflow ([#9116](https://github.com/napari/napari/pull/9116)) +- Remove `qt_dict_table.py` as its unused ([#9119](https://github.com/napari/napari/pull/9119)) +- fix(typing): add typing and fix mypy error in `qt_face_color.py` ([#9123](https://github.com/napari/napari/pull/9123)) +- fix(typing): add typing and fix mypy error in `_base_item_model.py` ([#9126](https://github.com/napari/napari/pull/9126)) +- fix(typing): add typing and fix mypy error in `_base_item_view.py` ([#9127](https://github.com/napari/napari/pull/9127)) +- fix(typing): add typing and fix mypy error in `qt_axis_model.py` ([#9167](https://github.com/napari/napari/pull/9167)) +- fix(typing): add typing and fix mypy error in `qt_list_model.py` ([#9169](https://github.com/napari/napari/pull/9169)) +- typing: remove `experimental.qt_poll.py` from mypy ignore ([#9171](https://github.com/napari/napari/pull/9171)) +- fix(typing): add typing and fix mypy error in `qt_border_color.py` ([#9179](https://github.com/napari/napari/pull/9179)) +- fix(typing): add typing and fix mypy error in `qt_edge_color.py` ([#9183](https://github.com/napari/napari/pull/9183)) +- fix(typing): resolve mypy errors for `qt_widget_controls_base` ([#9185](https://github.com/napari/napari/pull/9185)) +- Update `coverage`, `dask`, `hypothesis`, `imageio`, `matplotlib`, `platformdirs`, `tifffile`, `tqdm`, `virtualenv`, `xarray` ([#9194](https://github.com/napari/napari/pull/9194)) +- [pre-commit.ci] pre-commit autoupdate ([#9197](https://github.com/napari/napari/pull/9197)) +- Add ``example`` to ``allowed_labels`` in ``check_labels`` job of ``label_and_milestone_checker.yml`` workflow ([#9214](https://github.com/napari/napari/pull/9214)) +- TST: parameterizing with iterables is deprecated in pytest ([#9217](https://github.com/napari/napari/pull/9217)) +- Add stereo 3D viewer widget example ([#9219](https://github.com/napari/napari/pull/9219)) +- Make tensorstore optional dependency of `test_labels` again ([#9220](https://github.com/napari/napari/pull/9220)) +- Remove unnecessary ``FutureWarning`` ignore for ``test_layers_save_svg`` ([#9225](https://github.com/napari/napari/pull/9225)) +- Disable part of test matrix to increase runner availability during sprints/hackathon ([#9226](https://github.com/napari/napari/pull/9226)) +- Add (Euro)SciPy Sprint Authors to Citation ([#9234](https://github.com/napari/napari/pull/9234)) +- fix(typing): add typing and fix mypy error in `qt_brush_size_slider.py` ([#9238](https://github.com/napari/napari/pull/9238)) +- fix(typing): add typing and fix mypy error in `_evented_dict.py` ([#9240](https://github.com/napari/napari/pull/9240)) +- Gallery example of using a background map ([#9245](https://github.com/napari/napari/pull/9245)) +- Adding 4D sample data as a heat diffusion ([#9246](https://github.com/napari/napari/pull/9246)) +- Disable interaction with vispy.gloo in test_vispy_labels_polygon_overlay ([#9264](https://github.com/napari/napari/pull/9264)) +- ci(dependabot): bump the actions group across 1 directory with 11 updates ([#9265](https://github.com/napari/napari/pull/9265)) +- Remove missing translations GH action ([#9266](https://github.com/napari/napari/pull/9266)) +- Asynchronous loading text fix ([#9267](https://github.com/napari/napari/pull/9267)) +- Pin octokit to tag, not use main branch ([#9268](https://github.com/napari/napari/pull/9268)) +- Fix typing problem by provide strict version of _BaseEventedItemModel.getItem ([#9272](https://github.com/napari/napari/pull/9272)) +- Fix test failures when running napari in tiling window managers by forcing the screenshot size. ([#9284](https://github.com/napari/napari/pull/9284)) +- Update `certifi`, `hypothesis`, `pandas`, `platformdirs`, `tqdm`, `virtualenv` ([#9295](https://github.com/napari/napari/pull/9295)) +- deprecate setting dims axis labels in examples ([#9297](https://github.com/napari/napari/pull/9297)) +- [pre-commit.ci] pre-commit autoupdate ([#9303](https://github.com/napari/napari/pull/9303)) +- Update latlon with map example to follow PEP8 ([#9312](https://github.com/napari/napari/pull/9312)) +- Example: combine points and vectors to build a 3D structured object ([#9340](https://github.com/napari/napari/pull/9340)) +- Revert "Disable part of test matrix to increase runner availability during sprints/hackathon (#9226)" ([#9348](https://github.com/napari/napari/pull/9348)) + + +## 24 authors added to this release (alphabetical) + +(+) denotes first-time contributors 🥳 + +- [Aniket](https://github.com/napari/napari/commits?author=Aniketsy) - @Aniketsy +- [Arne Defauw](https://github.com/napari/napari/commits?author=ArneDefauw) - @ArneDefauw + +- [Aroj Hada](https://github.com/napari/napari/commits?author=ArozHada) - @ArozHada + +- [BadPrograms](https://github.com/napari/napari/commits?author=BadPrograms) - @BadPrograms + +- [Bas Bloemsaat](https://github.com/napari/napari/commits?author=basbloemsaat) - @basbloemsaat + +- [Christophe Creeten](https://github.com/napari/napari/commits?author=ccreeten) - @ccreeten + +- [Edouard Coussoux](https://github.com/napari/napari/commits?author=ecoussoux-ansys) - @ecoussoux-ansys + +- [Filippo Maria Castelli, PhD](https://github.com/napari/napari/commits?author=filippocastelli) - @filippocastelli + +- [girochat](https://github.com/napari/napari/commits?author=girochat) - @girochat + +- [Grzegorz Bokota](https://github.com/napari/napari/commits?author=Czaki) ([docs](https://github.com/napari/docs/commits?author=Czaki)) - @Czaki +- [Jacopo Abramo](https://github.com/napari/napari/commits?author=jacopoabramo) - @jacopoabramo +- [Juan Nunez-Iglesias](https://github.com/napari/napari/commits?author=jni) ([docs](https://github.com/napari/docs/commits?author=jni)) - @jni +- [Kamil Kania](https://github.com/napari/napari/commits?author=Grzyb33k) - @Grzyb33k + +- [Lorenzo Gaifas](https://github.com/napari/napari/commits?author=brisvag) ([docs](https://github.com/napari/docs/commits?author=brisvag)) - @brisvag +- [Margot Chazotte](https://github.com/napari/napari/commits?author=MargotCh) - @MargotCh +- [Matthias Schabel](https://github.com/napari/napari/commits?author=matthiasschabel) - @matthiasschabel + +- [michalslabs](https://github.com/napari/napari/commits?author=michalslabs) ([docs](https://github.com/napari/docs/commits?author=michalslabs)) - @michalslabs + +- [Mridul Seth](https://github.com/napari/napari/commits?author=MridulS) - @MridulS + +- [Peter Sobolewski](https://github.com/napari/napari/commits?author=psobolewskiPhD) - @psobolewskiPhD +- [Revathy Venugopal](https://github.com/napari/napari/commits?author=Revathyvenugopal162) - @Revathyvenugopal162 + +- [Sara Czasak](https://github.com/napari/docs/commits?author=sara-czasak) - @sara-czasak + +- [Sébastien Morais](https://github.com/napari/napari/commits?author=SMoraisAnsys) - @SMoraisAnsys + +- [Tim Monko](https://github.com/napari/napari/commits?author=TimMonko) ([docs](https://github.com/napari/docs/commits?author=TimMonko)) - @TimMonko +- [Zuzana Čočková](https://github.com/napari/napari/commits?author=cockovaz) - @cockovaz + +## 16 reviewers added to this release (alphabetical) + +(+) denotes first-time contributors 🥳 + +- [Aniket](https://github.com/napari/napari/commits?author=Aniketsy) - @Aniketsy +- [arbor](https://github.com/napari/docs/commits?author=arbormoss) - @arbormoss +- [Arne Defauw](https://github.com/napari/napari/commits?author=ArneDefauw) - @ArneDefauw + +- [Carol Willing](https://github.com/napari/docs/commits?author=willingc) - @willingc +- [Draga Doncila Pop](https://github.com/napari/docs/commits?author=DragaDoncila) - @DragaDoncila +- [Filippo Maria Castelli, PhD](https://github.com/napari/napari/commits?author=filippocastelli) - @filippocastelli + +- [girochat](https://github.com/napari/napari/commits?author=girochat) - @girochat + +- [Grzegorz Bokota](https://github.com/napari/napari/commits?author=Czaki) ([docs](https://github.com/napari/docs/commits?author=Czaki)) - @Czaki +- [Jacopo Abramo](https://github.com/napari/napari/commits?author=jacopoabramo) - @jacopoabramo +- [Juan Nunez-Iglesias](https://github.com/napari/napari/commits?author=jni) ([docs](https://github.com/napari/docs/commits?author=jni)) - @jni +- [Lorenzo Gaifas](https://github.com/napari/napari/commits?author=brisvag) ([docs](https://github.com/napari/docs/commits?author=brisvag)) - @brisvag +- [Maxime Rey](https://github.com/napari/docs/commits?author=MaxJPRey) - @MaxJPRey +- [Peter Sobolewski](https://github.com/napari/napari/commits?author=psobolewskiPhD) - @psobolewskiPhD +- [Sara Czasak](https://github.com/napari/docs/commits?author=sara-czasak) - @sara-czasak + +- [Tim Monko](https://github.com/napari/napari/commits?author=TimMonko) ([docs](https://github.com/napari/docs/commits?author=TimMonko)) - @TimMonko +- [Zuzana Čočková](https://github.com/napari/napari/commits?author=cockovaz) - @cockovaz From cdb06e74b83be1d0dd7a5ff3a8e1b1357476ca65 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Thu, 6 Aug 2026 16:25:40 +0200 Subject: [PATCH 08/13] Update dev instructions to use prek (#1096) Co-authored-by: Tim Monko --- Makefile | 2 +- docs/developers/contributing/dev_install.md | 20 ++++++++++++++----- docs/developers/coredev/core_dev_guide.md | 2 +- .../4-developer-tools.md | 10 +++++----- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index a73060194..2f354830e 100644 --- a/Makefile +++ b/Makefile @@ -285,4 +285,4 @@ fallback-videos-clean: rm -f docs/_static/images/*.mp4 spellcheck: - pre-commit run --all-files codespell + prek run --all-files codespell diff --git a/docs/developers/contributing/dev_install.md b/docs/developers/contributing/dev_install.md index b1d5dcdae..de3189eb5 100644 --- a/docs/developers/contributing/dev_install.md +++ b/docs/developers/contributing/dev_install.md @@ -89,14 +89,20 @@ In order to make changes to `napari`, you will need to [fork](https://docs.githu included with the typical end-user `napari[all]` installation. ``` -1. We use [`pre-commit`](https://pre-commit.com) to format code with +1. We use [`prek`](https://prek.j178.dev/) to format and lint code. + The `prek` is rust implementation of [`pre-commit`](https://pre-commit.com/) + and is faster than the python implementation. + Full list of used hooks can be found in pre-commit configuration file + [`.pre-commit-config.yaml`](https://github.com/napari/napari/blob/main/.pre-commit-config.yaml) + in the root of the repository. + The most important hooks are formatting with [`ruff-format`](https://docs.astral.sh/ruff/formatter/) and lint with - [`ruff`](https://github.com/astral-sh/ruff) automatically prior to each commit. - To minimize test errors when submitting pull requests, please install `pre-commit` - in your environment as follows: + [`ruff-check`](https://docs.astral.sh/ruff/linter/). + To enable it to be executed on creation of every commit, reduce CI usage and reduce the number of test errors, + install `prek` as pre-commit hook by running the following command in your environment: ```sh - pre-commit install + prek install ``` Upon committing, your code will be formatted according to our [`ruff-format` @@ -113,4 +119,8 @@ In order to make changes to `napari`, you will need to [fork](https://docs.githu comment along with the specific error code (e.g. `import sys # noqa: E402`) but please do not ignore errors lightly. + ```{note} + To run `prek` manually, without creating a commit, you can run `prek run --all-files`. + ``` + Now you are all set to start developing with napari. diff --git a/docs/developers/coredev/core_dev_guide.md b/docs/developers/coredev/core_dev_guide.md index 59c6f2a5c..ad33765f4 100644 --- a/docs/developers/coredev/core_dev_guide.md +++ b/docs/developers/coredev/core_dev_guide.md @@ -184,7 +184,7 @@ As a core member, you should be familiar with the following napari guides: - [PEP257](https://peps.python.org/pep-0257/) and the [NumPy documentation guide](https://numpy.org/devdocs/dev/howto-docs.html#documentation-style) for docstring conventions. -- [`pre-commit`](https://pre-commit.com) hooks for autoformatting. +- [`prek`](https://prek.j178.dev/) hooks for autoformatting. - [`ruff-format`](https://docs.astral.sh/ruff/formatter/) autoformatting. - [`ruff`](https://github.com/astral-sh/ruff) linting. diff --git a/docs/plugins/virtual_environment_docs/4-developer-tools.md b/docs/plugins/virtual_environment_docs/4-developer-tools.md index 7da63de0a..239ffd554 100644 --- a/docs/plugins/virtual_environment_docs/4-developer-tools.md +++ b/docs/plugins/virtual_environment_docs/4-developer-tools.md @@ -34,15 +34,15 @@ These _auto-modify_ your code. ### Pre-commit tools -- [pre-commit](https://pre-commit.com/), runs all your checks each time you run git commit, preventing bad code from ever getting checked in. +- [prek](https://prek.j178.dev/), Faster implementation of pre-commit, runs all your checks each time you run git commit, preventing bad code from ever getting checked in. ```console - $ pip install pre-commit - # install the pre-commit "hook" - $ pre-commit install + $ pip install prek + # install the pre-commit "git hook" + $ prek install # then configure in .pre-commit-config.yaml # (optionally) Run hooks on demand - $ pre-commit run --all-files + $ prek run --all-files ``` - [pre-commit-ci](https://pre-commit.ci/) From 54ff0ad67db2147b1f0e61945eaed4585e681a7a Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Fri, 7 Aug 2026 15:11:11 +0200 Subject: [PATCH 09/13] rename axis --- docs/_scripts/homepage_video.py | 2 +- docs/getting_started/viewer.md | 23 +++++++++++++---------- docs/guides/handedness.md | 4 ++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/docs/_scripts/homepage_video.py b/docs/_scripts/homepage_video.py index ae8abddb9..5cb973404 100644 --- a/docs/_scripts/homepage_video.py +++ b/docs/_scripts/homepage_video.py @@ -83,7 +83,7 @@ def build_viewer(*, show: bool) -> napari.Viewer: layer.attenuation = ATTENUATION layer.colormap = COLORMAP viewer.canvas.scale_bar.visible = True - viewer.axes.visible = True + viewer.scene.axes.visible = True viewer.dims.axis_labels = ('T', 'Z', 'Y', 'X') viewer.window._qt_window.resize(*WINDOW_SIZE) viewer.fit_to_view() diff --git a/docs/getting_started/viewer.md b/docs/getting_started/viewer.md index f1ac93f01..9254c7093 100644 --- a/docs/getting_started/viewer.md +++ b/docs/getting_started/viewer.md @@ -512,8 +512,8 @@ tags: [hide-input] --- # programmatically adjust the camera angle viewer.dims.ndisplay = 3 -viewer.camera.zoom = 2 -viewer.camera.angles = (3, 38, 53) +viewer.scene.camera.zoom = 2 +viewer.scene.camera.angles = (3, 38, 53) nbscreenshot(viewer, alt_text="A rotated 3D view") ``` @@ -538,7 +538,7 @@ Note that if you want to drag the canvas/rendering itself, instead of rotating t The camera perspective can also be altered programmatically: ```python -viewer.camera.perspective = 45 +viewer.scene.camera.perspective = 45 ``` By default, camera center and zoom persist when switching between 2D and 3D @@ -639,19 +639,22 @@ The right side of the status bar contains some helpful tips depending on which l Overlays provide additional information about the render state and the data, displayed on the canvas itself. In napari there are two main types: canvas overlays - which are locked in position on the screen and hover over the rendered canvas - and scene overlays - which are located somewhere in world coordinates and follow the camera and dims just like layers. Canvas overlays can be positioned in various locations on the canvas (e.g: `top_left`, `bottom_center`), and will automatically tile if multiple are present at the same location. -Canvas overlays can be accessed via `viewer.canvas.overlays`, whereas viewer overlays live on the viewer itself. For example: +Canvas overlays can be accessed via `viewer.canvas.overlays`: -```{tip} -`viewer.canvas.overlays` is a smart dictionary that allows access via attributes, instead of only via keys. So a shorthand for `viewer.canvas.overlays['text'] is `viewer.canvas.overlays.text`! -``` +- Scale bar (canvas overlay, accessible via `viewer.canvas.overlays.scale_bar`): it displays distances in world coordinates for the displayed scene. The scale bar usually inherits layer units when they are set. If inference fails it can fall back to a dimensionless label, and if displayed axes mix dimensionalities it uses the last displayed axis unit with a warning. You can control its appearance and fixed length from the viewer. See the [units guide](units-guide) for more information. +- Canvas Axes (canvas overlay, accessible via `viewer.canvas.overlays.axes`): displays basix axes in a corner of the canvas, linked to the viewer's camera. +- Text (canvas overlay, accessible via `viewer.canvas.overlays.text`): displays arbitrary text on the canvas. -- Scale bar (accessible via `viewer.canvas.overlays.scale_bar`): it displays distances in world coordinates for the displayed scene. The scale bar usually inherits layer units when they are set. If inference fails it can fall back to a dimensionless label, and if displayed axes mix dimensionalities it uses the last displayed axis unit with a warning. You can control its appearance and fixed length from the viewer. See the [units guide](units-guide) for more information. -- Axes (scene overlay, accessible via `viewer.axes`): displays basis axes at the origin. -- Text Overlay (canvas overlay, accessible via `viewer.canvas.overlays.text`): displays arbitrary text on the canvas. +Scene overlays live on `viewer.scene.overlays`: +- Scene Axes (scene overlay, accessible via `viewer.scene.axes`): displays basis axes at the origin in the scene. These overlays can also be accessed via graphical interface through the **View** menu and their respective submenus. ```{tip} +`canvas.overlays` and `scene.overlays` are smart dictionaries that allows access via attributes, instead of only via keys. So a shorthand for `viewer.canvas.overlays['text'] is `viewer.canvas.overlays.text`! +``` + +```{seealso} Similarly to the viewer, layers [also have some overlays](layer-overlays) that can be used to display layer-specific information! ``` diff --git a/docs/guides/handedness.md b/docs/guides/handedness.md index d12d342de..5f1d64283 100644 --- a/docs/guides/handedness.md +++ b/docs/guides/handedness.md @@ -62,7 +62,7 @@ viewer, sst_layer = napari.imshow( colormap='magma', ) viewer.dims.axis_labels = sst.sst.dims -viewer.axes.visible = True +viewer.scene.overlays.axes.visible = True ``` ```{code-cell} python @@ -144,7 +144,7 @@ tags: [remove-input] --- viewer.camera.angles = (90, 0, 0) viewer.camera.zoom = 16 -viewer.axes.visible = True +viewer.scene.overlays.axes.visible = True nbscreenshot(viewer) ``` From cadf6174996a341723d93786ae4c57f75bb27936 Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Fri, 7 Aug 2026 15:00:39 +0200 Subject: [PATCH 10/13] rename camera --- docs/getting_started/open_images.md | 2 +- docs/getting_started/viewer.md | 2 +- docs/guides/camera.md | 16 ++++++++-------- docs/guides/handedness.md | 8 ++++---- docs/howtos/layers/labels.md | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/getting_started/open_images.md b/docs/getting_started/open_images.md index 5352169ef..b77302495 100644 --- a/docs/getting_started/open_images.md +++ b/docs/getting_started/open_images.md @@ -114,7 +114,7 @@ file_path_ply = pooch.retrieve( viewer = napari.Viewer() viewer.open(file_path_ply, plugin='napari-meshio') viewer.dims.ndisplay = 3 -viewer.camera.angles = (92, -24, 15) +viewer.scene.camera.angles = (92, -24, 15) nbscreenshot(viewer, alt_text="napari viewer showing a 3D mesh of an airplane opened via napari-meshio.") ``` diff --git a/docs/getting_started/viewer.md b/docs/getting_started/viewer.md index 9254c7093..cc98446d6 100644 --- a/docs/getting_started/viewer.md +++ b/docs/getting_started/viewer.md @@ -544,7 +544,7 @@ viewer.scene.camera.perspective = 45 By default, camera center and zoom persist when switching between 2D and 3D views (synced mode). You can change this behavior via the camera popup, the **View** menu (**Toggle Synced Camera**, {kbd}`Ctrl+U`), or programmatically -through `viewer.camera.synced`. See the [camera guide](camera-guide) for details. +through `viewer.scene.camera.synced`. See the [camera guide](camera-guide) for details. ### Roll dimensions diff --git a/docs/guides/camera.md b/docs/guides/camera.md index 3efc22af2..e48df9dc8 100644 --- a/docs/guides/camera.md +++ b/docs/guides/camera.md @@ -40,8 +40,8 @@ state independently. The current mode is controlled by {attr}`~napari.components.Camera.synced`: ```python -viewer.camera.synced = True # synced mode (default) -viewer.camera.synced = False # separate mode +viewer.scene.camera.synced = True # synced mode (default) +viewer.scene.camera.synced = False # separate mode ``` (camera-synced-mode)= @@ -105,10 +105,10 @@ From the **View** menu, select **Toggle Synced Camera** ```python # Switch to separate mode -viewer.camera.synced = False +viewer.scene.camera.synced = False # Switch back to default synced mode -viewer.camera.synced = True +viewer.scene.camera.synced = True ``` ### Settings — Persistent preference @@ -135,16 +135,16 @@ programmatically: ```python # Center of the view (in world coordinates) -viewer.camera.center = (0, 100, 200) +viewer.scene.camera.center = (0, 100, 200) # Zoom level (pixels per world unit) -viewer.camera.zoom = 4.0 +viewer.scene.camera.zoom = 4.0 # Euler angles for 3D rotation (only used in 3D mode) -viewer.camera.angles = (30, 45, 0) +viewer.scene.camera.angles = (30, 45, 0) # Perspective (field of view) in 3D mode -viewer.camera.perspective = 30 +viewer.scene.camera.perspective = 30 ``` For more on axis orientation and handedness, see {ref}`handedness-guide`. diff --git a/docs/guides/handedness.md b/docs/guides/handedness.md index 5f1d64283..c645383cf 100644 --- a/docs/guides/handedness.md +++ b/docs/guides/handedness.md @@ -86,7 +86,7 @@ down (incorrectly [since Ptolemy](https://en.wikipedia.org/wiki/History_of_carto Instead, we can flip the *axis orientation* so that the vertical axis (latitude) points up: ```{code-cell} python -viewer.camera.orientation2d = ('up', 'right') +viewer.scene.camera.orientation2d = ('up', 'right') ``` ```{code-cell} python @@ -142,8 +142,8 @@ layer = viewer.add_surface((vertices, faces), name='1BNA', shading='smooth') --- tags: [remove-input] --- -viewer.camera.angles = (90, 0, 0) -viewer.camera.zoom = 16 +viewer.scene.camera.angles = (90, 0, 0) +viewer.scene.camera.zoom = 16 viewer.scene.overlays.axes.visible = True nbscreenshot(viewer) @@ -154,7 +154,7 @@ a right-handed helix. However, if we flip one of the axes (as they were in napar we will get the mirror image of the DNA, which will be physically inaccurate: ```{code-cell} python -viewer.camera.orientation = ('away', 'down', 'right') +viewer.scene.camera.orientation = ('away', 'down', 'right') ``` ```{code-cell} python diff --git a/docs/howtos/layers/labels.md b/docs/howtos/layers/labels.md index d4eba9cb4..3a06a53aa 100644 --- a/docs/howtos/layers/labels.md +++ b/docs/howtos/layers/labels.md @@ -554,8 +554,8 @@ viewer.dims.ndisplay = 3 tags: [hide-input] --- # programmatically adjust the camera angle -viewer.camera.zoom = 2 -viewer.camera.angles = (3, 38, 53) +viewer.scene.camera.zoom = 2 +viewer.scene.camera.angles = (3, 38, 53) nbscreenshot(viewer, alt_text="A 3D view of a labels layer on top of 3D blobs") ``` From 6bb619573f3b6fd3e4b89db9c8906f8a6e64099a Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Fri, 7 Aug 2026 15:04:54 +0200 Subject: [PATCH 11/13] some more changes --- docs/getting_started/viewer.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/getting_started/viewer.md b/docs/getting_started/viewer.md index cc98446d6..b63d0587c 100644 --- a/docs/getting_started/viewer.md +++ b/docs/getting_started/viewer.md @@ -546,6 +546,10 @@ views (synced mode). You can change this behavior via the camera popup, the **View** menu (**Toggle Synced Camera**, {kbd}`Ctrl+U`), or programmatically through `viewer.scene.camera.synced`. See the [camera guide](camera-guide) for details. +```{note} +The scene model also gives you access to [scene overlays](viewer-overlays)! +``` + ### Roll dimensions The third button rolls the dimensions that are currently displayed in the viewer. From f18c57e9d4d9bfa11876cd94897fb4319dc66dd4 Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Fri, 7 Aug 2026 15:12:15 +0200 Subject: [PATCH 12/13] seealso --- docs/getting_started/viewer.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/getting_started/viewer.md b/docs/getting_started/viewer.md index b63d0587c..aa93ea866 100644 --- a/docs/getting_started/viewer.md +++ b/docs/getting_started/viewer.md @@ -178,7 +178,9 @@ The **canvas** is in the center of the viewer and contains the visual display of +++ +```{seealso} The canvas model can be accessed via `viewer.canvas`; several things are exposed here, such as the [grid mode](grid-mode), [canvas overlays](viewer-overlays) and the overlay tiling settings. +``` (layer-list)= From ce803763243451fb64a30b05df22cc90e98bfe65 Mon Sep 17 00:00:00 2001 From: Lorenzo Gaifas Date: Mon, 10 Aug 2026 16:54:53 +0200 Subject: [PATCH 13/13] Update docs/getting_started/viewer.md Co-authored-by: Tim Monko --- docs/getting_started/viewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started/viewer.md b/docs/getting_started/viewer.md index aa93ea866..82f5d205e 100644 --- a/docs/getting_started/viewer.md +++ b/docs/getting_started/viewer.md @@ -648,7 +648,7 @@ In napari there are two main types: canvas overlays - which are locked in positi Canvas overlays can be accessed via `viewer.canvas.overlays`: - Scale bar (canvas overlay, accessible via `viewer.canvas.overlays.scale_bar`): it displays distances in world coordinates for the displayed scene. The scale bar usually inherits layer units when they are set. If inference fails it can fall back to a dimensionless label, and if displayed axes mix dimensionalities it uses the last displayed axis unit with a warning. You can control its appearance and fixed length from the viewer. See the [units guide](units-guide) for more information. -- Canvas Axes (canvas overlay, accessible via `viewer.canvas.overlays.axes`): displays basix axes in a corner of the canvas, linked to the viewer's camera. +- Canvas Axes (canvas overlay, accessible via `viewer.canvas.overlays.axes`): displays basic axes in a corner of the canvas, linked to the viewer's camera. - Text (canvas overlay, accessible via `viewer.canvas.overlays.text`): displays arbitrary text on the canvas. Scene overlays live on `viewer.scene.overlays`: