Changelog
All notable changes to the webknossos python library are documented in this file.
Please see the Stability Policy for details about the version schema and compatibility implications.
The format is based on Keep a Changelog
and this project adheres to Semantic Versioning MAJOR.MINOR.PATCH
.
For upgrade instructions, please check the respective Breaking Changes sections.
Unreleased
Breaking Changes
Added
- Added
add_mag_from_zarrarray
toLayer
class, to add existing Zarr arrays as a mag of a layer. #1151
Changed
Fixed
0.15.5 - 2024-09-26
Added
- Webknossos API functions were added:
Team.get_list()
,Team.add("new_name")
,User.assign_team_roles("teamName", isTeamManager: True)
andRemoteDataset.explore_and_add_remote()
are available now. #1196
0.15.4 - 2024-09-23
Added
- Enable metadata access for remote datasets. #1163
0.15.3 - 2024-09-11
Breaking Changes
- Conversion of images with 4 channels creates a dataset with four layers instead of a dataset with one RGB layer. #1192
Changed
- Updated tifffile dependency to v2024.8.30. #1190
0.15.2 - 2024-09-05
Changed
- Updated and clarified documentation for nd_bounding_box intersected_with method
Fixed
- Fixed an issue with cattrs v24.1.0. #1184
0.15.1 - 2024-08-13
Changed
- Updates zarrita to 0.2.7. #1169
0.15.0 - 2024-08-09
Breaking Changes
- Python version 3.8 is no longer officially supported. #1068
Added
- Added example for scaling a skeleton. #1147
Changed
- Added options
--layer-name
and--mag
for compress command of the CLI. #1141 - Added options
--chunk-shape
and--chunks-per-shard
for convert command of the CLI. #1150 - The
from_images
method of theDataset
supports directories and single files asinput_path
now. #1152 - Added support for python version 3.12. #1068
- The number of pixel limit for JPG conversion is disabled now. #1154
- Added option
--batch-size
to the convert command of the CLI. #1158
Fixed
- Fixed issue with webknossos URL and context URL being considered different when opening a remote dataset due to trailing slashes. #1137
- Fix an issue where the remote folder was not found when the folder path query includes a trailing slash. #1164
0.14.26 - 2024-07-22
Fixed
- Add a converter to the VoxelSize field
factor
, to ensure it is a tuple.
0.14.25 - 2024-07-18
Added
- Added support for new voxel size that stores unit and updated to WEBKNOSSOS API version 7. #1136
0.14.24 - 2024-07-09
Added
- Added an implementation of padded_with_margins for NDBoundingBox class. #1120
- Added a new method add_nx_graphs to skeleton.py which supports to add nx.Graphs to the Skeleton object. #1130
Changed
- Removed additional logging messages during image conversion. #1124
Fixed
- Fixed an issue where cube jobs upsampling, downsampling and compress failed when performed on more than 3 dimensions. #1095
- Fixed an issue where webknossos libs crash when installed with minimal dependencies. #1104
0.14.23 - 2024-06-28
Breaking Changes
- Preferring a custom tiff reader over the default PIMS reader to convert tiff files. This change enables the recognition of axis information and the support of tifffiles with more than 3 dimensions. However, it also leads to changed behavior when converting tiff files. Tiffs with axes other than c, x, y, and z, with a shape bigger than 1, are no longer supported for conversion to WKW. Please convert these files to Zarr or Zarr3 Datasets instead. #1043
Added
- Added a pixel level heuristic for distinguishing color and segmentation layers when importing image data with the
from_images
oradd_layer_from_images
method. #1007 - Added .ims as supported suffix. #1085
- Added suffixes supported by bioformats for Zeiss CZI, Leica LOF, Zeiss LSM (laser scanning microscope), Zeiss LSM (Laser Scanning Microscope) 510/710, Leica XLEF and Zeiss AxioVision ZVI (Zeiss Vision Image). #1086
- Added suport for setting a default ID mapping for segmentation layers. #1118
Changed
- Moved functional parts of merge volume annotation CLI to Dataset and Annotation classes. #1055
- Set a new max value for test_align_with_mag_against_numpy_implementation to avoid failures due to high numbers. #1082
- Updated dependabot.yml #1087
- Make lookup for supported suffixes case-insensitive. #1100
Fixed
- Fixed an issue with downloading annotations through the Command Line Interface. #1083
0.14.22 - 2024-05-13
Fixed
- Performing
webknossos upload
on a windows machine led to loss of directory structure due to backslashes in the relative paths. This was fixed by #1067
0.14.21 - 2024-05-07
Changed
- Added
layer_name
as optional argument toDataset.from_images
method. If the created dataset contains only a single layer,layer_name
is used, otherwise the givenlayer_name
is a common prefix for all layers. #1054 - The context variable of View.get_buffered_slice_writer() is a BufferedSliceWriter now instead of a Generator. Interaction with the SliceWriter does not change, but updating the offset after first initialization is possible now. #1052
0.14.20 - 2024-04-23
Changed
- Updated ruff to v0.4.0 #1047
- Added NIfTI suffix .nii to list of supported bioformats suffixes. #1048
0.14.19 - 2024-04-18
Changed
- Removed special CLI command for cubing Nifti files. Use regular conversion command instead. Further, moved Python dependencies for examples and dev dependencies into optional groups which are not installed by default. Install with
poetry install --with dev --with examples
. #1024
0.14.18 - 2024-04-18
Fixed
- Fixed a bug, where using an unaligned topleft value for
add_layer_from_images
leads to corrupted data. #1036
0.14.17 - 2024-04-10
Changed
- The characters
@
and$
are allowed within layer names now. #1034
0.14.16 - 2024-04-04
Added
- Add CLI tool for offline merging of zip annotations with fallback datasets. #996
- Added support for converting new file formats such as DICOM, using the bioformats reader. #1014
Changed
- The rules for naming the layers have been tightened to match the allowed layer names on webknossos. #1016
- Replaced PyLint linter + black formatter with Ruff for development. #1013
- The remote operations now use the WEBKNOSSOS API version 6. #1018
- The conversion of 4D Tiff files to a Zarr3 Dataset is possible. NDBoundingBoxes and VecInt classes are introduced to support working with more than 3 dimensions. #966
0.14.15 - 2024-02-07
0.14.14 - 2024-01-12
Added
- Added a method to the Datasets class that calculates a dataset's bounding box covering all layers. #975
0.14.13 - 2024-01-02
Fixed
- Fixed a bug in reading project info from webknossos using the api client for non-admins. #972
0.14.12 - 2023-12-19
Fixed
- Fixes that the buffered slice writer could overwrite data when writing less slices than buffer_size at an offset that is not aligned. #973
0.14.11 - 2023-12-06
0.14.10 - 2023-12-04
Fixed
- Fixed a bug in reading project info from webknossos using the api client. #970
0.14.9 - 2023-11-29
0.14.8 - 2023-11-28
0.14.7 - 2023-11-17
0.14.6 - 2023-11-17
0.14.5 - 2023-11-08
Changed
- Performance improvements for reading from and writing to sharded zarr3 datasets, also speeding up the automated tests #963
0.14.4 - 2023-11-07
Added
- The
DEFAULT_DATA_FORMAT
andDEFAULT_CHUNKS_PER_SHARD
can now be set with the env variablesWK_DEFAULT_DATA_FORMAT
andWK_DEFAULT_CHUNKS_PER_SHARD
- A
Vec3Int
can now be initialized with a string containing an int or a tuple.
Changed
- Upgrades mypy to 1.6. #956
- Refactored the WEBKNOSSOS API client to no longer use generated client code. #948
0.14.3 - 2023-10-19
Fixed
- Fixes bug in FSStore creation when using local paths for zarr data format. #955
0.14.2 - 2023-10-18
0.14.1 - 2023-10-13
Added
- Adds support for Zarr3-based volume annotations as introduced in webknossos#7288. #952
Changed
- The
WK_USE_ZARRITA
env variable is no longer required.zarrita
is always installed and now the default for Zarr and Zarr3 datasets. #950 - Updates various dependencies. #943
0.14.0 - 2023-10-11
Breaking Changes
wait_and_ensure_success
fromwebknossos.utils
now requires anexecutor
argument. #943
Changed
- Updates various dependencies. #943
0.13.7 - 2023-10-07
Fixed
- Fixed a bug in writing compressed data. #942
0.13.6 - 2023-08-17
0.13.5 - 2023-08-15
Added
- Added
task_type
property toTask
class. #938
Fixed
- Fixed a bug where parallel access to the properties json leads to an JsonDecodeError in the webknossos CLI #919
0.13.4 - 2023-08-14
Breaking Changes
- Task/Project management:
open
tasks have been renamed topending
. UseTask.status.pending_instance_count
instead ofTask.status.open_instance_count
. #930
Fixed
- Fixed an infinite loop in the mag calculation during anisotropic downsampling in situations where the target mag cannot possibly be reached while adhering to the anisotropic downsampling scheme. #934
0.13.3 - 2023-08-08
Added
View
has amap_chunk
method now to run a function on each chunk and collect the results in a list.
Changed
- As WEBKNOSSOS does not require the largest segment id. It is also not mandatory in the WEBKNOSSOS libs anymore. #917 The method
SegmentationLayer.refresh_largest_segment_id
was added to lookup the highest value in segmentation data and setlargest_segment_id
accordingly. - The
convert
command of the cli now has a--category
flag, to select the LayerCategoryType.
0.13.2 - 2023-07-26
Changed
- The
convert
command of the cli now has a--category
flag, to select the LayerCategoryType.
0.13.1 - 2023-07-17
Changed
- The conversion folder structures to layer names does not allow slashes in the layer name anymore. #918
Fixed
- Fixed a bug where compression in add_layer_from_images uses too much memory #900
0.13.0 - 2023-06-21
Added
- Added
duration_in_seconds
andmodified
toAnnotationInfo
. #914 - Added
zarrita
storage backend for arrays. zarrita supports Zarr v2 and v3 including sharding. To activate zarrita, the environment variableWK_USE_ZARRITA
must be set. #912 - Added a
Zarr3
data format which supports sharding. #912
Changed
- Integrated the
wkcuber
CLI tool intowebknossos
package. #903 - To get an overview of all webknossos subcommands type
webknossos --help
. If the usage of a single subcommand is of interest typewebknossos <subcommand> --help
- These commands were changed:
python -m wkcuber
,python -m wkcuber.convert_image_stack_to_wkw
->webknossos convert
python -m wkcuber.export_wkw_as_tiff
->webknossos export-wkw-as-tiff
python -m wkcuber.convert_knossos
->webknossos convert-knossos
python -m wkcuber.convert_raw
->webknossos convert-raw
python -m wkcuber.downsampling
->webknossos downsample
python -m wkcuber.compress
->webknossos compress
python -m wkcuber.check_equality
->webknossos check-equality
- There is one new command:
webknossos upload
to upload a dataset to a WEBKNOSSOS server
- These commands have been removed:
python -m wkcuber.cubing
python -m wkcuber.tile_cubing
python -m wkcuber.metadata
python -m wkcuber.recubing
Fixed
- Fixed a bug where upsampling of a layer would fail, if the layer had a bounding box that doesn't align with the from_mag mag. #915
0.12.6 - 2023-06-09
Changed
- Upgrades
wkw
. #911
0.12.5 - 2023-06-01
Added
- Added support for Python 3.11. #843
0.12.4 - 2023-05-25
Added
Group.add_tree
now also accepts a tree object as a first parameter (instead of only a string). #891Group.remove_tree_by_id
was added. #891
Changed
- Upgrades
black
,mypy
,pylint
,pytest
. #873
Fixed
- Fixed poetry build backend for new versions of Poetry. #899
- Added axis_order fields for Zarr data format. #902
0.12.3 - 2023-02-22
Added
- Added support to import ImageJ Hyperstack tiff files via
Dataset.from_images
anddataset.add_layer_from_images
. #877
Changed
Dataset.from_images
anddataset.add_layer_from_images
now automatically convert big endian dtypes to their little endian counterparts by default. #877
Fixed
- Fixed reading czi files with non-zero axis offsets. #876
0.12.2 - 2023-02-20
Added
- Added
RemoteFolder
for assigning remote datasets to a WEBKNOSSOS folder. #868
0.12.1 - 2023-02-16
Added
- Added
read_only
parameter forannotation.temporary_volume_layer_copy
. #866
Changed
- in Dataset.layer_from_images, layer names generated from multiple input image channels no longer contain equal signs, yielding better url safety. #867
Fixed
- Fixed a bug where some czi, dm3, dm4 images could not be converted to wkw due to a too-strict check. #865
- Enforce
read_only
property of datasets also for down- and upsampling. #866
0.12.0 - 2023-02-10
Breaking Changes
- Dropped support for Python 3.7. #833
Added
- Added support for Python 3.10. #833
0.11.4 - 2023-02-09
0.11.3 - 2023-02-06
0.11.2 - 2023-01-18
Fixed
- Fixed a bug, where the image order could be randomized when passing a directory path to
Dataset.add_layer_from_images
. #854
0.11.1 - 2023-01-05
Added
Dataset.from_images
anddataset.add_layer_from_images
have new features: #842dm3
anddm4
datasets can be read without bioformats now.- It's possible to completely disable the bioformats adapter by setting
use_bioformats
to False. - Lists of images can now be handled with other readers, before only images supported by skimage worked in lists.
0.11.0 - 2022-12-09
Breaking Changes
- Removed the
id
attribute of theBoundingBox
class, also from the constructor. #836
Fixed
- Fixed bounding box serialization in NMLs, so that bounding boxes which are uploaded via annotations are now recognized properly by webKnossos. #836
- Bounding boxes keep their name, color and visibility when transformed via methods, such as
bbox.padded_with_margins()
. #836
0.10.27 - 2022-12-07
Added
- Short links, such as
https://webknossos.org/links/93zLg9U9vJ3c_UWp
, are now supported for dataset and annotation urls indownload
andopen_remote
methods. #837
0.10.26 - 2022-12-05
Changed
Dataset.from_images
anddataset.add_layer_from_images
now try to import the images via the bioformats after all other options as well. #829
Fixed
dataset.add_layer_from_images
can now handle paths to folders which only contain a single image. #829
0.10.25 - 2022-11-29
Breaking Changes
Dataset.from_images
now adds a layer per timepoint and per channel (if the data doesn't have 1 or 3 channels). #822
Added
- Added python-native CZI support for
Dataset.from_images
ordataset.add_layer_from_images
, without using bioformats. #822 dataset.add_layer_from_images
can add a layer per timepoint and per channel when passingallow_multiple_layers=True
. #822
0.10.24 - 2022-11-09
Changed
- Updated cattrs dependency to 22.2.0. #819
0.10.23 - 2022-11-01
Breaking Changes
ds.add_layer_from_images
: Turned some arguments into keyword-only arguments, only affecting positional arguments after the first 8 arguments. #818
Added
ds.add_layer_from_images
: added topleft and dtype kw-only arguments. #818
0.10.22 - 2022-10-27
Fixed
- Fixed a bug where some image sequences could not be read in layer_from_images. #817
0.10.21 - 2022-10-26
0.10.20 - 2022-10-20
Changed
- Make volume locations optional, allowing to parse segment information in future NML-only annotations. #814
Fixed
annotation.temporary_volume_layer_copy()
works also with empty volume annotations. #814
0.10.19 - 2022-10-18
Breaking Changes
- The
executor
argument can now be passed to the following methods,args
is deprecated now for those #805: dataset.copy_dataset(…)
layer.upsample(…)
layer.downsample(…)
layer.downsample_mag(…)
layer.downsample_mag_list(…)
layer.redownsample(…)
mag_view.compress(…)
view.content_is_equal(…)
Added
- Added
Dataset.from_images
, which converts images to a Dataset, possibly consisting of multiple layers. [#808](https://github.com/scalableminds/webknossos-libs/pull/808 - Added
Annotation.open_as_remote_dataset(…)
, which is a shorthand forAnnotation.download(...).get_remote_annotation_dataset()
. #811 skeleton.save()
now also accepts paths with a.zip
suffix. #811- Added
annotation.get_volume_layer_segments()
to interact with information from theSegments
tab in annotations. This method returns a dict from segment ids to an object containing optional segmentname
,color
andanchor_position
. #812 - Added convenience methods
Dataset.compress
andDataset.downsample
for compressing and downsampling all layers and mags in a dataset. #813 - Added examples for downloading segment masks from webKnossos and cubing & uploading tiff stacks. #813
0.10.18 - 2022-09-29
Added
Annotation.download()
now accepts the keyword-only argumentskip_volume_data
, which can be set toTrue
to omit downloading volume data. #806
0.10.17 - 2022-09-26
Added
- Added
annotation.get_remote_annotation_dataset()
to get a streamed annotation dataset, which also reflects fallback layers or applied mappings. #794 - Added direct access to an underlying Zarr array with the
MagView.get_zarr_array()
method. #792
0.10.16 - 2022-09-13
Added
- Added direct access to an underlying Zarr array with the
MagView.get_zarr_array()
method. #792
Changed
- Upgraded
zarr
andnumcodecs
. #798
0.10.14 - 2022-08-30
Changed
dataset.add_copy_layer()
andlayer.add_copy_mag()
now read and write the image data, not copying files. This allows to stream data from remote datasets. To continue using the filesystem copy mechanism, please usedataset.add_fs_copy_layer()
orlayer.add_fs_copy_mag()
. #790
0.10.13 - 2022-08-22
Breaking Changes
- Renamed
chunk_size
arguments tochunk_shape
.chunk_size
is still available as keyword-only argument, but deprecated. #706
Changed
- The largest_segment_id is optional now. #786
0.10.12 - 2022-08-15
Fixed
- Fixed
task.get_project()
. #785
0.10.11 - 2022-08-03
0.10.10 - 2022-07-26
0.10.9 - 2022-07-22
0.10.8 - 2022-07-15
0.10.7 - 2022-07-14
Breaking Changes
- The
Annotation
constructor takes theowner_name
argument instead ofusername
. This is only important when using keyword arguments. Theusername
attributes are still available as a proxy for theowner_name
attribute, but deprecated. #760 user_id
onAnnotationInfo
objects is deprecated, please useowner_id
instead. #760- When self-hosting a webKnossos server, please note that a webknossos version >=
22.06.0
is required. #760 & #764
Added
Dataset.upload()
acceptsLayer
objects from aRemoteDataset
in thelayers_to_link
argument list. Also,LayerToLink
can consume those viaLayerToLink.from_remote_layer()
. #761Task.create()
accepts aRemoteDataset
for thedataset_name
argument. #761- Added
annotation.get_remote_base_dataset()
returning aRemoteDataset
. #761 - Added
Team.get_by_name()
. #763 - Added
Dataset.get_remote_datasets()
. #763
Changed
- If a token is requested from the user on the commandline, it is now stored in the current context. Before, it was discarded. #761
Annotation.download()
does not need theannotation_type
anymore, and the type can also be omitted from passed URLs. #764Dataset.add_layer_from_images
allows smaller batch sizes for uncompressed writes. #766Dataset.add_layer_from_images
uses multiprocessing by default. #766
Fixed
- Fixed the bounding box inferral for volume annotation layers that were not saved in Mag(1). #765
0.10.6 - 2022-06-27
0.10.5 - 2022-06-15
0.10.4 - 2022-06-15
Breaking Changes
- Added an
align_with_other_layers
parameter toLayer.downsample
&layer.upsample
. When set to true (default), the magnifications of the existing dataset are used as guidance for downsampling/upsampling. Instead of passing a boolean, one can also pass another dataset that should be used as guidance. #730 - Changed the name of
max_mag
inLayer.downsample
tocoarsest_mag
. #730
Added
- Added
Dataset.add_layer_from_images()
to convert image stacks to wkw or zarr Dataset. This needs pims and possibly more packages, which can be installed using extras, e.g. "webknossos[all]". #741
Changed
- The
Layer.downsample
andLayer.upsample
function now automatically downsample according to magnifications already existing in the dataset. This behaviour can be turned off by setting the new parameteralign_with_other_layers
toFalse
. #730 View.get_buffered_slice_reader()
andView.get_buffered_slice_writer()
don't log anything by default now. To get the previous logging, please invoke them withlogging=True
. #741
0.10.3 - 2022-06-03
Added
- Added export of OME-NGFF v0.4 metadata for all
Dataset
s that have a Zarr layer #737
0.10.2 - 2022-05-20
Changed
- Added Python 3.9 support to wk-libs #716
Fixed
- URLs for the webknossos-context (e.g. in the
WK_URL
env var or viawebknossos_context(url=…)
) may now contain/
in the end and are sanitized. Before, requests would fail if the URL contained a final/
. #733
0.10.1 - 2022-05-10
0.10.0 - 2022-05-09
Breaking Changes
Dataset.upload()
now returns aRemoteDataset
instead instead of the URL string. You can get the URL viaremote_ds.url
. #723User.teams
now is a tuple instead of a list. #723- The deprecated
download_dataset
function now requires theorganization_id
argument. #723
Added
- Added
Dataset.open_remote()
, which returns an object of the newRemoteDataset
. #723 This can - give the webknossos URL for the dataset as
remote_ds.url
, - read image data via the webknossos zarr interface, using the inherited
Dataset
methods, and - read and change the following dataset metadata as properties:
display_name
,description
,tags
,is_public
,sharing_token
,allowed_teams
. Team
instances also contain theorganization_id
. #723
0.9.24 - 2022-05-03
Fixed
- Fixed upsampling with constant z in certain anisotropic cases. #720
0.9.23 - 2022-05-03
0.9.22 - 2022-05-02
Breaking Changes
- Renamed some entities to comply with the webKnossos terminology. #704:
- The
Graph
class changed toTree
, also related methods and attributes are renamed now, e.g.add_graph
is nowadd_tree
. All previous entities are still available, but deprecated. scale
has changed tovoxel_size
for datasets, skeletons and annotations. Changes inDataset
are backwards-compatible, butscale
is deprecated. ForAnnotation
andSkeletons
the initializer only supportsvoxel_size
, thescale
attribute is deprecatedget_best_mag
is deprecated, please useget_finest_mag
instead- In
layer.upscale
,min_mag
is deprecated in favor offinest_mag
Fixed
- Correctly maintain default_view_configuration property when downloading a dataset. #677
0.9.21 - 2022-04-20
0.9.20 - 2022-04-20
Fixed
- Fixed a bug where the server’s error message during dataset upload was not displayed to the user. #702
0.9.19 - 2022-04-11
0.9.18 - 2022-04-06
0.9.17 - 2022-04-05
0.9.16 - 2022-03-31
0.9.15 - 2022-03-31
Added
- Added cloud storage support for the
Dataset
classes, by usingUPath
from universal_pathlib and fsspec. Create remote datasets like thisDataset(UPath("s3://bucket/path/to/dataset", key="...", secret="..."), scale=(11, 11, 24))
. Datasets on cloud storage only work with Zarr-based layers. #649
0.9.14 - 2022-03-24
Breaking Changes
Dataset.download
: The argumentdataset_name
was renamed todataset_name_or_url
. #660
Added
Dataset.download
now also accepts a URL, as well as asharing_token
, which can also be part of the URL. #660
0.9.13 - 2022-03-24
Breaking Changes
- Consistently rename
organization_name
parameters toorganization_id
(except in deprecatedwebknossos.client.download_dataset
). #639
Changed
MagView.compress
now skips in-place compression of already compressed mags. #667- Replaced uses of
pathlib.Path
withUPath
from universal_pathlib. SinceUPath
is compatible withpathlib.Path
, changes in user code are not necessary. #649
Fixed
- Fixed compression of downsampled mags for layers with arbitrary and potentially mag-unaligned bounding boxes. #667
0.9.12 - 2022-03-18
Breaking Changes
- The annotation class now exposes
BoundingBox
objects instead of tuples. #646
Added
- Added
groups
andgraphs
property to skeleton.Group to access immediate child groups/graphs. #645 - The
BoundingBox
class now supports the following additional properties:id
,name
,is_visible
andcolor
. #646 - Added support for Zarr arrays in the
Dataset
classes. Users can set thedata_format
of layers tozarr
to use Zarr for storing data. #627 The current implementation has some limitations, e.g.: - Only one type of compression (Blosc+Zstd) is implemented.
- Sharding is not available in Zarr, yet. Please use
chunks_per_shard = (1, 1, 1)
. - Only local filesystem-based arrays are supported.
There are changes to the
datasource-properties.json
for Zarr layers compared to WKW layers: dataFormat
needs to be changed tozarr
.- The list of mags is called
mags
, instead ofwkwResolutions
. - Each mag is represented by an object with a single attribute
mag
, e.g.{ "mag": [1, 1, 1] }
.
Changed
- Dataset:
block_len
andfile_len
attributes are now deprecated, but still available for backwards compatibility. Usechunk_size
andchunks_per_shard
instead. These new attributes areVec3Int
, so they can be set non-uniformly. However, WKW-backed layers still require uniformchunk_size
andchunks_per_shard
. #627
Fixed
- Fixed crash during downsampling and compression of segmentation layers. #657
0.9.11 - 2022-03-16
0.9.10 - 2022-03-15
Changed
- Annotation:
Annotation.temporary_volume_layer_copy
now uses the NML-providedscale
. #644 - Dataset: Moved the deprecation warning from
get_color_layers()
to the actually deprecated methodget_color_layer()
. #635 - Inconsistent writes to datasets properties (e.g., caused due to multiprocessing) are detected automatically. The warning can be escalated to an exception with
warnings.filterwarnings("error", module="webknossos", message=r"\[WARNING\]")
. #633 - Changed the
position
of askeleton.Node
to useVec3Int
instead of(Float, Float, Float)
, because webKnossos stores node positions as integers. #645
Fixed
- Tests: The
./test.sh
script works on macOS again and doesn't throw Network Errors anymore. However the introduced fix could lead to slightly different behaviour on macOS tests vs CI tests, when UNIX socket communication is involved. #618
0.9.9 - 2022-03-03
Breaking Changes
- Changed the interface and behavior of
Annotation
s andSkeleton
s, as well as nml-parsing related code. #602 webknossos.skeleton.nml
is not exposed anymore. The previous functionality may be found inwebknossos._nml
andwebknossos/annotation/_nml_conversion.py
if needed, but please not that this is not part of the public API and may change at any time. Please use the respective logic on theAnnotation
class instead.- The
name
attribute on theSkeleton
class changed todataset_name
. - The deprecated
Skeleton.offset
attribute is removed. - The following attributes are removed from the
Skeleton
class, instead they are part of theAnnotation
class now:time
,edit_position
,edit_rotation
,zoom_level
,task_bounding_box
,user_bounding_boxes
. - The following
Annotation
methods were renamed and their arguments changed slightly:save_volume_annotation
➜export_volume_layer_to_dataset
temporary_volume_annotation_layer_copy
➜temporary_volume_layer_copy
Added
- Added new features to the
Annotation
andSkeleton
classes. #602 - The
Skeleton
class has new attributesdescription
andorganization_id
. - The
Annotation
class has new attributesusername
andannotation_id
, as well as the following attributes that are proxies for the skeleton attributes:dataset_name
,scale
,organization_id
,description
Annotation
s can now be initialized from their attributes and an optional skeleton.- New methods on
Annotation
:upload
,add_volume_layer
,delete_volume_layer
Annotation.load()
andannotation.save()
also works with.nml
files.- Added
MagView.get_views_on_disk()
as a shortcut to turningget_bounding_boxes_on_disk
into views. #621
Fixed
- Fixed the download of skeleton-only annotations. #602
0.9.8 - 2022-02-28
Added
- Added
allow_overwrite
parameter toLayer.downsample()
. #614
0.9.7 - 2022-02-28
Added
- Added
only_setup_mag
parameter to downsample-related methods inLayer
. This parameter allows creating output magnifications before parallelizing downsampling invocations to avoid outdated writes to datasource-properties.json. #610 - Added
Task.create()
method to create tasks by providing a dataset name, location, and rotation. #605
0.9.6 - 2022-02-15
Added
- Added
apply_merger_mode.py
example. #592 - Added support for reading from multiple volume layers in annotations. If an annotation contains multiple volume layers, the layer name has to be provided when reading from a volume layer in an annotation (in
Annotation.save_volume_annotation()
andAnnotation.temporary_volume_annotation_layer_copy()
). Also, added the methodAnnotation.get_volume_layer_names()
to see available volume layers. #588
Changed
- Dataset writes in higher mags do not increase the bounding box if the written data fits in the rounded up box. #595
Fixed
- Dataset down- & upload: #595
- Fixed download of higher mags.
- Bounding box after download is set correctly (was inflated before when downloading higher mags).
- The returned URL for uploads is corrected, this did not respect
new_dataset_name
before.
0.9.5 - 2022-02-10
Fixed
- Skeleton: Fixed a bug when comparing
Graph
instances, this fixes failing loads which had the error messageCan only compare wk.Graph to another wk.Graph.
before. #593
0.9.4 - 2022-02-09
Added
- Added AnnotationInfo, Project and Task classes for handling annotation information and annotation project administration. #574
Changed
- Lifted the restriction that
BoundingBox
cannot have a negative topleft (introduced in v0.9.0). Also, negative size dimensions are flipped, so that the topleft <= bottomright, e.g.BoundingBox((10, 10, 10), (-5, 5, 5))
->BoundingBox((5, 10, 10), (5, 5, 5))
. #589
0.9.3 - 2022-02-07
Fixed
dataset.upload(layers_to_link=…)
: Fixed a bug where the upload did not complete if layers_to_link contained layers present in uploading dataset. #584
0.9.2 - 2022-02-03
Added
- A custom network request timeout can be set using
webknossos_context(…, timeout=300)
orexport WK_TIMEOUT="300"
. #577
Changed
- The default network request timeout changed from ½min to 30 min. #577
0.9.1 - 2022-01-31
Changed
- The signatures of
(Mag)View.for_each_chunk
and(Mag)View.for_zipped_chunks
changed: - The previous argument
work_on_chunk
is now calledfunc_per_chunk
. - The various
chunk_size
arguments now have to be given in Mag(1). They now have default values. - Deprecations in
(Mag)View.get_buffered_slice_reader/_writer
#564: (Mag)View.get_buffered_slice_reader
: using the parametersoffset
andsize
is deprecated. Please use the parameter relative_bounding_box or absolute_bounding_box (both in Mag(1)) instead. The old offset behavior was absolute forMagView
s and relative forView
s.(Mag)View.get_buffered_slice_writer
: using the parameteroffset
is deprecated. Please use the parameter relative_offset or absolute_offset (both in Mag(1)) instead. The old offset behavior was absolute forMagView
s and relative forView
s.
0.9.0 - 2022-01-19
Breaking Changes
- Various changes in View & MagView signatures #553:
- Breaking Changes:
MagView.read
: if nothing is supplied and the layer does not start at (0, 0, 0), the default behaviour changes from starting at absolute (0, 0, 0) to the layer's bounding boxMagView.write
: if no offset is supplied and the layer does not start at (0, 0, 0), the default behaviour changes from starting at absolute (0, 0, 0) to the layer's bounding box(Mag)View.get_view
: read_only is a keyword-only argument nowMagView.get_bounding_boxes_on_disk()
now returns an iterator yielding bounding boxes in Mag(1)BoundingBox
cannot have negative topleft or size entries anymore (lifted in v0.9.4).
- Deprecations
The following usages are marked as deprecated with warnings and will be removed in future releases:
- Using the
offset
parameter forread
/write
/get_view
in MagView and View is deprecated. There are new counterpartsabsolute_offset
andrelative_offset
which have to be specified in Mag(1), whereasoffset
previously was specified in the Mag of the respective View. Also, forread
/get_view
only usingsize
is deprecated, since it used to refer to the size in the View's Mag. Instead,size
should always be used together withabsolute_offset
orrelative_offset
. Then it is interpreted in Mag(1). - The (Mag)View attributes
view.global_offset
andview.size
are deprecated now, which were in the Mag of the respective View. Please useview.bounding_box
instead, which is in Mag(1). read_bbox
on the (Mag)View is deprecated as well, please useread
with theabsolute_bounding_box
orrelative_bounding_box
parameter instead. You'll have to pass the bounding box in Mag(1) then.
- Using the
Added
- Added a check for dataset name availability before attempting to upload. #555
Fixed
- Fixed the dataset download of private datasets which need a token. #562
0.8.31 - 2022-01-07
Added
- Added
Annotation.save("file_name")
to save an annotation to a file andAnnotation.temporary_volume_annotation_layer_copy()
to read from the volume layer of an annotation as a WK dataset. #528 - Added
layers_to_link
parameter toDataset.upload()
so that layers don't need to be uploaded again if they already exist in another dataset on webKnossos. #544
0.8.30 - 2021-12-27
Breaking Changes
- The BoundingBoxNamedTuple was removed. Use BoundingBox instead. #526
- Some methods of creating, opening and saving have changed. The old methods are still available but deprecated. The documentation gives a good overview. Specifically, the changes are :
Dataset.create()
→Dataset()
Dataset.get_or_create()
→Dataset(…, exist_ok=True)
Dataset()
→Dataset.open()
download_dataset()
→Dataset.download()
open_annotation()
→Annotation.load()
for local files,Annotation.download()
to download from webKnossosopen_nml()
→Skeleton.load()
Skeleton.from_path()
→Skeleton.load()
Skeleton.write()
→Skeleton.save()
The deprecated methods will be removed in future releases. #520
Changed
- The detailed output of e.g. downsampling was replaced with a progress bar. #527
- Always use the sampling mode
CONSTANT_Z
when downsampling 2D data. #516 - Make computation of
largestSegmentId
more efficient for volume annotations. #531 - Consistently use resolved instead of absolute path if make_relative is False. #536
0.8.29 - 2021-12-14
Breaking Changes
- To download datasets, a recent webknossos server version is necessary (>= 21.12.0). webknossos.org is unaffected. #510
0.8.28 - 2021-12-09
0.8.27 - 2021-12-09
v0.8.25 - 2021-12-07
Added
- Added support to download datasets from external datastores, which is the case for webknossos.org. #497
Changed
- Adapt the dataset upload to new webKnossos api. #484
get_segmentation_layer()
andget_color_layer()
were deprecated and should not be used, anymore, as they will fail if no or more than one layer exists for each category. Instead,get_segmentation_layers()
andget_color_layers()
should be used (if desired in combination with[0]
to get the old, error-prone behavior).- Renamed the folder webknossos/script-collection to webknossos/script_collection to enable module imports. #505
v0.8.24 - 2021-11-30
v0.8.23 - 2021-11-29
Breaking Changes
wk.Graph
now inherits fromnetworkx.Graph
directly. Therefore, thenx_graph
attribute is removed. #481- The class
LayerCategories
was removed.COLOR_TYPE
andSEGMENTATION_TYPE
were renamed toCOLOR_CATEGORY
andSEGMENTATION_CATEGORY
and can now be imported directly. The type of many parameters were changed fromstr
to the literalLayerCategoryType
. #454
Added
- Added
redownsample()
method toLayer
to recompute existing downsampled magnifications. #461 - Added
globalize_floodfill.py
script to globalize partially computed flood fill operations. #461
Changed
- Improved performance for calculations with
Vec3Int
andBoundingBox
. #461
Fixed
- Resolve path when symlinking layer and make_relative is False (instead of only making it absolute). #492
0.8.22 - 2021-11-01
Breaking Changes
- Removed the
organization
parameter from thewebknossos_context
function. The organization will automatically be fetched using the token of the user. #470
Fixed
- Make Views picklable. We now ignore the file handle when we pickle Views. #469
v0.8.19 - 2021-10-21
Added
- Added a
User
class to the client that can be used to get meta-information of users or their logged time. The currently logged in user can be accessed, as well as all managed users. #470
0.8.21 - 2021-10-28
Changed
- Downgraded typing-extensions for better dependency compatibility #472
0.8.20 - 2021-10-28
Breaking Changes
BoundingBox.chunk()
's 2nd parameterchunk_border_alignments
now does not accept a list with a singleint
anymore. #452
Fixed
- Make Views picklable. We now ignore the file handle when we pickle Views. #469
0.8.19 - 2021-10-21
Breaking Changes
- View
s now always open the wkw.Dataset
lazily. All explicit calls to View.open()
and View.close()
must be removed. #448
Added
- Added a new Annotation class which includes skeletons as well as volume-annotations. #452
- Added dataset down- and upload as well as annotation download, see the examples
learned_segmenter.py
andupload_image_data.py
. #452
0.8.18 - 2021-10-18
Added
- The Dataset class now has a new method: add_shallow_copy. #437
Changed
- The
Vec3Int
constructor now asserts that its components are whole numbers also in numpy case. #434 - Updated scikit-image dependency to 0.18.3. #435
BoundingBox.contains
now also takes float points in numpy arrays. #450
Fixed
0.8.16 - 2021-09-22
Breaking Changes
- Refactored the BufferedSliceWriter and added a BufferedSliceReader. #425
- BufferedSliceWriter
- The data no longer gets transposed: previously the format of the slices was [y,x]; now it is [x,y]
- The interface of the constructor was changed:
- A
View
(orMagView
) is now required as datasource - The parameter
dimension
can be used to specify the axis along the data is sliced - The offset is expected to be in the magnification of the view
- This class is now supposed to be used within a context manager and the slices are written by sending them to the generator (see documentation of the class).
- BufferedSliceReader
- This class was added complementary to the BufferedSliceWriter
- Added methods to get a BufferedSliceReader/BufferedSliceWriter from a View directly
Added
Changed
Fixed
0.8.15 - 2021-09-22
Breaking Changes
-
Breaking changes were introduced for geometry classes in #421:
-
BoundingBox
- is now immutable, use convenience methods, e.g.
bb.with_topleft((0,0,0))
- properties topleft and size are now Vec3Int instead of np.array, they are each immutable as well
- all
to_
-conversions return a copy, some were renamed: to_array
→to_list
as_np
→to_np
as_wkw
→to_wkw_dict
from_wkw
→from_wkw_dict
as_config
→to_config_dict
as_checkpoint_name
→to_checkpoint_name
as_tuple6
→to_tuple6
as_csv
→to_csv
as_named_tuple
→to_named_tuple
as_slices
→to_slices
copy
→ (gone, immutable)
- is now immutable, use convenience methods, e.g.
-
Mag
- is now immutable
mag.mag
is nowmag._mag
(considered private, use to_list instead if you really need it as list)- all
to_
-conversions return a copy, some were renamed: to_array
→to_list
scale_by
→ (gone, immutable)divide_by
→ (gone, immutable)as_np
→to_np
Added
- An immutable Vec3Int class was introduced that holds three integers and provides a number of convenience methods and accessors. #421
Changed
BoundingBox
andMag
are now immutable attr classes containingVec3Int
values. See breaking changes above.
Fixed
-
0.8.13 - 2021-09-22
This is the latest release at the time of creating this changelog.