Skip to content

Tags: jni/skan

Tags

v0.13.0

Toggle v0.13.0's commit message

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias
This is a minor step forward from v0.12.x which adds a new API:

`skan.csr.PathGraph` is a more abstract version of a Skeleton, which only
needs a pixel adjacency matrix to work, rather than a full skeleton image.
The motivations for PathGraph are numerous:

- a simpler dataclass object that doesn't require complex instantiation
  logic. See e.g. Glyph's [Stop Writing `__init__`
  Methods](https://blog.glyph.im/2025/04/stop-writing-init-methods.html)
- making it easier to compute the pixel adjacency matrix separately, for
  example [using dask when the images don't fit in
  memory](https://blog.dask.org/2021/05/07/skeleton-analysis), and having
  an API for which you can provide this matrix (rather than having to
  modify a Skeleton instance in-place).
- allowing more flexible use cases, for example to use skan to measure
  tracks, as in
  [live-image-tracking-tools/traccuracy#251](live-image-tracking-tools/traccuracy#251).

Due to some urgent need to use this code in the wild, this release doesn't
provide any documentation examples. Indeed, the new class may see some changes
in upcoming releases based on user feedback. See the discussion in
[#246](#246) for details. Look for
further refinement of this idea in the 0.13.x releases!

- [#246](#246): New API: PathGraph dataclass

v0.12.3

Toggle v0.12.3's commit message

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias
This minor release updates the minimum numba version to 0.58 to fix a

pip resolution error ([issue #248](#248),
fixed by [PR #249](#249), with thanks
to new contributor [Alister Burt](https://github.com/alisterburt)!).

This minor release added an important bug fix from Neil Shephard
([#235](#235)), preventing a crash when
working with float32 images.

This minor release fixed issues with the version switcher in the documentation.

This release adds NumPy 2.0 compatibility (while remaining compatible with 1.x)
([#229](#229)). It also lays the groundwork for
new skeleton editing features with bidirectional Skeleton to NetworkX
conversion functions ([#224](#224).

We also have a minor deprecation that should improve quality of life in the
future: column names in the summary dataframe can now use `_` as the separator
(instead of `-`), which allows one to use the pandas attribute access for
columns (for example, `summary.branch_distance` instead of
`summary['branch-distance']`. Use the `separator='_'` keyword argument to
`summarize` to take advantage of this feature (which will become the default in
a future version), or `separator='-'` to maintain the current behavior even
when new versions come out ([#215](#215)).

The napari plugin now lets you make a Shapes layer fully backed by a Skeleton
dataset, including coloring the edges by features in the summary table
([#201](#201)).

Thanks to [Neil Shephard](https://github.com/ns-rse),
[James Ryan](https://github.com/jamesyan-git),
[Jarod Hanko](https://github.com/jarodhanko-crafco), and
[Tim Monko](https://github.com/TimMonko) for their contributions to this
release! 🙏 You can find the full list of changes below:

- [#215](#215): The separators used for column
  names are configurable, and will transition to `_` in the future. This is to
  make it easier to use the dataframe attribute interface, e.g.
  `summary.branch_distance`

- [#229](#229): NumPy 2 compatibility
- [#224](#224): Create a networkx summary graph
  from a Skeleton
- [#201](#201): Add napari widget to generate
  shapes layer from a skeletonized label layer

- [#220](#220): Allow mean pixel value
  calculation from integer values, not just floats
- [#212](#212): Improved error reporting and
  tests for prune_paths methods

- [#221](#221): Fix documentation builds
- [#210](#210): Cache skeleton_image shape for
  use by the path_label_image method

- [#231](#231): Add 0.12 release notes

- [#232](#232): Use python -m build for wheel
  and sdist
- [#218](#218): Fix pyproject.toml metadata
  formatting
- [#217](#217): Migrate from setup.cfg to
  pyproject.toml

v0.12.2

Toggle v0.12.2's commit message

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias
This minor release added an important bug fix from Neil Shephard

([#235](#235)), preventing a crash when
working with float32 images.

This minor release fixed issues with the version switcher in the documentation.

This release adds NumPy 2.0 compatibility (while remaining compatible with 1.x)
([#229](#229)). It also lays the groundwork for
new skeleton editing features with bidirectional Skeleton to NetworkX
conversion functions ([#224](#224).

We also have a minor deprecation that should improve quality of life in the
future: column names in the summary dataframe can now use `_` as the separator
(instead of `-`), which allows one to use the pandas attribute access for
columns (for example, `summary.branch_distance` instead of
`summary['branch-distance']`. Use the `separator='_'` keyword argument to
`summarize` to take advantage of this feature (which will become the default in
a future version), or `separator='-'` to maintain the current behavior even
when new versions come out ([#215](#215)).

The napari plugin now lets you make a Shapes layer fully backed by a Skeleton
dataset, including coloring the edges by features in the summary table
([#201](#201)).

Thanks to [Neil Shephard](https://github.com/ns-rse),
[James Ryan](https://github.com/jamesyan-git),
[Jarod Hanko](https://github.com/jarodhanko-crafco), and
[Tim Monko](https://github.com/TimMonko) for their contributions to this
release! 🙏 You can find the full list of changes below:

- [#215](#215): The separators used for column
  names are configurable, and will transition to `_` in the future. This is to
  make it easier to use the dataframe attribute interface, e.g.
  `summary.branch_distance`

- [#229](#229): NumPy 2 compatibility
- [#224](#224): Create a networkx summary graph
  from a Skeleton
- [#201](#201): Add napari widget to generate
  shapes layer from a skeletonized label layer

- [#220](#220): Allow mean pixel value
  calculation from integer values, not just floats
- [#212](#212): Improved error reporting and
  tests for prune_paths methods

- [#221](#221): Fix documentation builds
- [#210](#210): Cache skeleton_image shape for
  use by the path_label_image method

- [#231](#231): Add 0.12 release notes

- [#232](#232): Use python -m build for wheel
  and sdist
- [#218](#218): Fix pyproject.toml metadata
  formatting
- [#217](#217): Migrate from setup.cfg to
  pyproject.toml

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias

v0.12.0

Toggle v0.12.0's commit message

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias
This release adds NumPy 2.0 compatibility (while remaining compatible…

… with 1.x)

([#229](#229)). It also lays the groundwork for
new skeleton editing features with bidirectional Skeleton to NetworkX
conversion functions ([#224](#224).

We also have a minor deprecation that should improve quality of life in the
future: column names in the summary dataframe can now use `_` as the separator
(instead of `-`), which allows one to use the pandas attribute access for
columns (for example, `summary.branch_distance` instead of
`summary['branch-distance']`. Use the `separator='_'` keyword argument to
`summarize` to take advantage of this feature (which will become the default in
a future version), or `separator='-'` to maintain the current behavior even
when new versions come out ([#215](#215)).

The napari plugin now lets you make a Shapes layer fully backed by a Skeleton
dataset, including coloring the edges by features in the summary table
([#201](#201)).

Thanks to [Neil Shephard](https://github.com/ns-rse),
[James Ryan](https://github.com/jamesyan-git),
[Jarod Hanko](https://github.com/jarodhanko-crafco), and
[Tim Monko](https://github.com/TimMonko) for their contributions to this
release! 🙏 You can find the full list of changes below:

- [#215](#215): The separators used for column
  names are configurable, and will transition to `_` in the future. This is to
  make it easier to use the dataframe attribute interface, e.g.
  `summary.branch_distance`

- [#229](#229): NumPy 2 compatibility
- [#224](#224): Create a networkx summary graph
  from a Skeleton
- [#201](#201): Add napari widget to generate
  shapes layer from a skeletonized label layer

- [#220](#220): Allow mean pixel value
  calculation from integer values, not just floats
- [#212](#212): Improved error reporting and
  tests for prune_paths methods

- [#221](#221): Fix documentation builds
- [#210](#210): Cache skeleton_image shape for
  use by the path_label_image method

- [#231](#231): Add 0.12 release notes

- [#232](#232): Use python -m build for wheel
  and sdist
- [#218](#218): Fix pyproject.toml metadata
  formatting
- [#217](#217): Migrate from setup.cfg to
  pyproject.toml

v0.12.0rc2

Toggle v0.12.0rc2's commit message

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias
This release adds NumPy 2.0 compatibility (while remaining compatible…

… with 1.x)

([#229](#229)). It also lays the groundwork for
new skeleton editing features with bidirectional Skeleton to NetworkX
conversion functions ([#224](#224).

We also have a minor deprecation that should improve quality of life in the
future: column names in the summary dataframe can now use `_` as the separator
(instead of `-`), which allows one to use the pandas attribute access for
columns (for example, `summary.branch_distance` instead of
`summary['branch-distance']`. Use the `separator='_'` keyword argument to
`summarize` to take advantage of this feature (which will become the default in
a future version), or `separator='-'` to maintain the current behavior even
when new versions come out ([#215](#215)).

The napari plugin now lets you make a Shapes layer fully backed by a Skeleton
dataset, including coloring the edges by features in the summary table
([#201](#201)).

Thanks to [Neil Shephard](https://github.com/ns-rse),
[James Ryan](https://github.com/jamesyan-git),
[Jarod Hanko](https://github.com/jarodhanko-crafco), and
[Tim Monko](https://github.com/TimMonko) for their contributions to this
release! 🙏 You can find the full list of changes below:

- [#215](#215): The separators used for column
  names are configurable, and will transition to `_` in the future. This is to
  make it easier to use the dataframe attribute interface, e.g.
  `summary.branch_distance`

- [#229](#229): NumPy 2 compatibility
- [#224](#224): Create a networkx summary graph
  from a Skeleton
- [#201](#201): Add napari widget to generate
  shapes layer from a skeletonized label layer

- [#220](#220): Allow mean pixel value
  calculation from integer values, not just floats
- [#212](#212): Improved error reporting and
  tests for prune_paths methods

- [#221](#221): Fix documentation builds
- [#210](#210): Cache skeleton_image shape for
  use by the path_label_image method

- [#231](#231): Add 0.12 release notes

- [#232](#232): Use python -m build for wheel
  and sdist
- [#218](#218): Fix pyproject.toml metadata
  formatting
- [#217](#217): Migrate from setup.cfg to
  pyproject.toml

v0.12.0rc1

Toggle v0.12.0rc1's commit message

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias
This release adds NumPy 2.0 compatibility (while remaining compatible…

… with 1.x)

([#229](#229)). It also lays the groundwork for
new skeleton editing features with bidirectional Skeleton to NetworkX
conversion functions ([#224](#224).

We also have a minor deprecation that should improve quality of life in the
future: column names in the summary dataframe can now use `_` as the separator
(instead of `-`), which allows one to use the pandas attribute access for
columns (for example, `summary.branch_distance` instead of
`summary['branch-distance']`. Use the `separator='_'` keyword argument to
`summarize` to take advantage of this feature (which will become the default in
a future version), or `separator='-'` to maintain the current behavior even
when new versions come out ([#215](#215)).

The napari plugin now lets you make a Shapes layer fully backed by a Skeleton
dataset, including coloring the edges by features in the summary table
([#201](#201)).

Thanks to [Neil Shephard](https://github.com/ns-rse),
[James Ryan](https://github.com/jamesyan-git),
[Jarod Hanko](https://github.com/jarodhanko-crafco), and
[Tim Monko](https://github.com/TimMonko) for their contributions to this
release! 🙏 You can find the full list of changes below:

- [#215](#215): The separators used for column
  names are configurable, and will transition to `_` in the future. This is to
  make it easier to use the dataframe attribute interface, e.g.
  `summary.branch_distance`

- [#229](#229): NumPy 2 compatibility
- [#224](#224): Create a networkx summary graph
  from a Skeleton
- [#201](#201): Add napari widget to generate
  shapes layer from a skeletonized label layer

- [#220](#220): Allow mean pixel value
  calculation from integer values, not just floats
- [#212](#212): Improved error reporting and
  tests for prune_paths methods

- [#221](#221): Fix documentation builds
- [#210](#210): Cache skeleton_image shape for
  use by the path_label_image method

- [#231](#231): Add 0.12 release notes

- [#232](#232): Use python -m build for wheel
  and sdist
- [#218](#218): Fix pyproject.toml metadata
  formatting
- [#217](#217): Migrate from setup.cfg to
  pyproject.toml

v0.12.0rc0

Toggle v0.12.0rc0's commit message

Verified

This tag was signed with the committer’s verified signature.
jni Juan Nunez-Iglesias
This release adds NumPy 2.0 compatibility (while remaining compatible…

… with 1.x)

([#229](#229)). It also lays the groundwork for
new skeleton editing features with bidirectional Skeleton to NetworkX
conversion functions ([#224](#224).

We also have a minor deprecation that should improve quality of life in the
future: column names in the summary dataframe can now use `_` as the separator
(instead of `-`), which allows one to use the pandas attribute access for
columns (for example, `summary.branch_distance` instead of
`summary['branch-distance']`. Use the `separator='_'` keyword argument to
`summarize` to take advantage of this feature (which will become the default in
a future version), or `separator='-'` to maintain the current behavior even
when new versions come out ([#215](#215)).

The napari plugin now lets you make a Shapes layer fully backed by a Skeleton
dataset, including coloring the edges by features in the summary table
([#201](#201)).

Thanks to [Neil Shephard](https://github.com/ns-rse),
[James Ryan](https://github.com/jamesyan-git),
[Jarod Hanko](https://github.com/jarodhanko-crafco), and
[Tim Monko](https://github.com/TimMonko) for their contributions to this
release! 🙏 You can find the full list of changes below:

- [#215](#215): The separators used for column
  names are configurable, and will transition to `_` in the future. This is to
  make it easier to use the dataframe attribute interface, e.g.
  `summary.branch_distance`

- [#229](#229): NumPy 2 compatibility
- [#224](#224): Create a networkx summary graph
  from a Skeleton
- [#201](#201): Add napari widget to generate
  shapes layer from a skeletonized label layer

- [#220](#220): Allow mean pixel value
  calculation from integer values, not just floats
- [#212](#212): Improved error reporting and
  tests for prune_paths methods

- [#221](#221): Fix documentation builds
- [#210](#210): Cache skeleton_image shape for
  use by the path_label_image method

- [#231](#231): Add 0.12 release notes

- [#218](#218): Fix pyproject.toml metadata
  formatting
- [#217](#217): Migrate from setup.cfg to
  pyproject.toml

v0.11.1

Toggle v0.11.1's commit message
This is a bugfix release. It adds napari.yaml to the manifest so that it

is correctly shipped with skan, and it fixes compatibility issues with
more recent versions of openpyxl. With thanks to
[James Ryan](https://github.com/jamesyan-git)!

- [#202](#202): 🐞 Bug Fix: Include napari.yaml in build
- [#203](#203): Remove deprecated code from `io.py`

This release of skan incorporates several bug fixes, new API features, and
documentation improvements. It also finalizes an API change started in 0.10.0:
now junction points are always resolved using a minimum spanning tree, and the
`uniquify_junctions` and `junction_mode` arguments to `Skeleton` are
deprecated (see our [FAQ](../faq)). Finally, this is the first release
containing a [napari plugin](https://napari.org/stable/plugins/index.html)!
Currently all it does is skeletonize a Labels layer, but this is just the
beginning for GUI-based skeleton analysis.

Thanks to everyone who has helped make this release possible, including
[Kushaan Gupta](https://github.com/kushaangupta), [Lucy
Liu](https://github.com/lucyleeow), [Ryan Ly](https://github.com/rly),
[James Ryan](https://github.com/jamesyan-git), and
[Simon Savary](https://github.com/ssavary)! Not to speak of all the
contributors who make our upstream libraries possible! 🙏

- [#143](#143): the `unique_junctions` and
  `junction_mode` keyword arguments are removed. Junctions are always resolved
  by finding the minimum spanning tree of the junction pixels. This PR also
  speeds up building of the pixel graph.

- [#150](#150),
  [#164](#164): add Sholl analysis. (Thanks to
  [Kushaan Gupta](https://github.com/kushaangupta) for the collaboration that
  led to this feature!)
- [#184](#184): add napari plugin.

- [#152](#152): Some pixel graphs had missing
  paths in their skeletons because of a mistake in how the graphs were
  traversed. Thanks [Simon Savary](https://github.com/ssavary) for the detailed
  report that led to the fix! ([#147](#147))
- [#193](#193),
  [#183](#183): fix the calculation of the
  buffer size needed for the pixel path graph in the presence of 0-degree
  nodes (isolated pixels).
- [#135](#135): the `unique_junctions` keyword
  argument to the Skeleton class is deprecated. Use instead `junction_mode`.
  Note however that this option will be removed in 0.11, so you should pin your
  skan dependency if you need this behavior.
- [#139](#139): the skan GUI and corresponding
  skan.gui module and skan command have all been removed. A new, much more
  sophisticated napari plugin is in development at
  https://github.com/kevinyamauchi/napari-skeleton-curator and will be folded
  into a future version of skan (probably v0.11).

- [#155](#155),
  [#156](#156),
  [#159](#159): Add documentation on 3D display
  of skeletons in napari.
- [#173](#173),
  [#175](https://github.com/jni/skan/pull/),
  [#177](#177): support multiple versions of
  documentation. (!) (This series of PRs in particular is close to my heart
  because deprecations and API changes like those listed above are much more
  painful if the old versions are just *erased*! Thanks to [Lucy
  Liu](https://github.com/lucyleeow) for her efforts and expertise here!)
- [#194](#194),
  [#195](#195): overhaul of documentation and
  build infrastructure.

- [#167](#167): drop Python 3.7 support.
- [#188](#188),
  [#189](#189),
  [#190](#190): update requirements.

v0.11.0

Toggle v0.11.0's commit message
This release of skan incorporates several bug fixes, new API features…

…, and

documentation improvements. It also finalizes an API change started in 0.10.0:
now junction points are always resolved using a minimum spanning tree, and the
`uniquify_junctions` and `junction_mode` arguments to `Skeleton` are
deprecated (see our [FAQ](../faq)). Finally, this is the first release
containing a [napari plugin](https://napari.org/stable/plugins/index.html)!
Currently all it does is skeletonize a Labels layer, but this is just the
beginning for GUI-based skeleton analysis.

Thanks to everyone who has helped make this release possible, including
[Kushaan Gupta](https://github.com/kushaangupta), [Lucy
Liu](https://github.com/lucyleeow), [Ryan Ly](https://github.com/rly),
[James Ryan](https://github.com/jamesyan-git), and
[Simon Savary](https://github.com/ssavary)! Not to speak of all the
contributors who make our upstream libraries possible! 🙏

- [#143](#143): the `unique_junctions` and
  `junction_mode` keyword arguments are removed. Junctions are always resolved
  by finding the minimum spanning tree of the junction pixels. This PR also
  speeds up building of the pixel graph.

- [#150](#150),
  [#164](#164): add Sholl analysis. (Thanks to
  [Kushaan Gupta](https://github.com/kushaangupta) for the collaboration that
  led to this feature!)
- [#184](#184): add napari plugin.

- [#152](#152): Some pixel graphs had missing
  paths in their skeletons because of a mistake in how the graphs were
  traversed. Thanks [Simon Savary](https://github.com/ssavary) for the detailed
  report that led to the fix! ([#147](#147))
- [#193](#193),
  [#183](#183): fix the calculation of the
  buffer size needed for the pixel path graph in the presence of 0-degree
  nodes (isolated pixels).
- [#135](#135): the `unique_junctions` keyword
  argument to the Skeleton class is deprecated. Use instead `junction_mode`.
  Note however that this option will be removed in 0.11, so you should pin your
  skan dependency if you need this behavior.
- [#139](#139): the skan GUI and corresponding
  skan.gui module and skan command have all been removed. A new, much more
  sophisticated napari plugin is in development at
  https://github.com/kevinyamauchi/napari-skeleton-curator and will be folded
  into a future version of skan (probably v0.11).

- [#155](#155),
  [#156](#156),
  [#159](#159): Add documentation on 3D display
  of skeletons in napari.
- [#173](#173),
  [#175](https://github.com/jni/skan/pull/),
  [#177](#177): support multiple versions of
  documentation. (!) (This series of PRs in particular is close to my heart
  because deprecations and API changes like those listed above are much more
  painful if the old versions are just *erased*! Thanks to [Lucy
  Liu](https://github.com/lucyleeow) for her efforts and expertise here!)
- [#194](#194),
  [#195](#195): overhaul of documentation and
  build infrastructure.

- [#167](#167): drop Python 3.7 support.
- [#188](#188),
  [#189](#189),
  [#190](#190): update requirements.