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¶
Changed¶
Fixed¶
3.0.1 - 2025-10-30¶
Fixed¶
- Fixed a bug where some tiff images could not be correctly converted to wkw/zarr, yielding KeyErrors. #1388
3.0.0 - 2025-10-28¶
Breaking Changes¶
- The endpoint_urlinUPathobjects is now stored directly in thestorage_optionsdict, instead of being stored in thestorage_options["client_kwargs"]dict. #1365
- Removed Docker image scalableminds/webknossos-clibuild. It will not be released further. #1376
- Removed inference of channels in case numChannelsis not set in thedatasource-properties.json.numChannels == 1is assumed and fails upon reading, if otherwise. #1386
Added¶
- Dataset.add_layer_as_ref() now accepts RemoteLayer objects as well as Layer objects. #1371
- RemoteDataset.annotation_id is now exposed, when available. #1380
- RemoteDataset.open() now accepts an annotation url as well. #1380
- RemoteAnnotation, now has a get_agglomerate_graph method, to make working with proofreading annotations easier. #1361
- Added RemoteDataset.used_storage_bytesproperty. #1386
- Added read support for N5 and neuroglancer precomputed data formats. #1386
Changed¶
- Ported test.shtotest.py, run withuv run test.py. #1379
- Dataset.add_layer_as_ref(remote_layer.path)does not work anymore. Please use- Dataset.add_layer_as_ref(remote_layer)instead. #1371
- Due to the refactoring, the imports of various classes have changed. Please update your code accordingly. #1371
- Deprecated a number of methods #1371:
- Dataset.open_remote(), use- RemoteDataset.openinstead.
- RemoteDatset.download_mesh(), use- remote_segmentation_layer.download_mesh()instead.
- Dataset.get_remote_datasets(), use- RemoteDataset.list()instead.
- Dataset.download(), use- RemoteDataset.download()instead.
- mag_view.is_foreign, use- layer.is_mag_view_foreign(mag_view)instead.
- Dataset.trigger_reload_in_datastore(), use- RemoteDataset.trigger_reload_in_datastore()instead.
- Replaced pathlib.Pathforupath.UPathinternally.pathlib.Pathis still supported for user-facing APIs. Adds support foruniversal_pathlibversion 0.3.x. #1374
- Only use fs-based copy for mags on local file systems and S3. Other protocols, e.g. memory and HTTP, have caveats that break fs-based copying. #1365
- The add_*methods inAttachmentsnow return the created attachment objects, similar toadd_layerandadd_mag. #1365
- The returned dataset ID from dataset exploration is now used. #1378
- Refactored the architecture, by introducing RemoteLayers, RemoteSegmentationLayers and their abstract base classes. #1371
- Updated the api version of the webknossos-api to 12. #1371
- Allowing RemoteDataset to align mags, when down- or upsampling #1382
- RemoteDatasets that use zarr streaming are no longer read-only. #1383
- Introduced transfer modes COPY, MOVE_AND_SYMLINK and HTTP for Dataset.upload() #1384
Fixed¶
- Fixed test.py to parse the command line arguments correctly. #1383
- Fixed a bug in the CLI tool export_as_tiff, where filenames would not match the data z position exactly. #1387
2.5.0 - 2025-10-06¶
Added¶
- Added context manager VolumeLayer.editfor creating and modifying volume annotations. #1340
- Added overwrite_existingflag toconvert,convert-rawandconvert-zarrCLI commands. Use with caution. #1372
- Added downsample,max-mag,interpolation-mode,sampling-modeargs toconvert,convert-rawandconvert-zarrCLI commands, where it was missing, for consistency. #1372
- Added value rescaling to convert-rawCLI command throughsource-dtypeandrescale-min-maxargs. #1372
- Added interpolation_modeandcompresskwargs toDataset.downsamplemethod. #1372
- Added Team.get_by_id,Team.add_userandTeam.deletemethods. #1373
- Added RemoteFolder.get_root,RemoteFolder.get_subfolders,RemoteFolder.get_datasets,RemoteFolder.add_subfolder,RemoteFolder.move_to,RemoteFolder.deletemethods andRemoteFolder.allowed_teams,RemoteFolder.nameproperties. #1373
Changed¶
- Team.addnow returns the created team object. #1373
- Moved Teamtowebknossos.administration.teammodule. #1373
2.4.12 - 2025-09-17¶
Changed¶
- Disabled conditional writes for S3 buckets in tensorstore. #1368
Fixed¶
- Fixed that some operations that need an authentication token didn’t ask for it but just failed. #1366
2.4.11 - 2025-09-02¶
Breaking Changes¶
- All internal API client methods (webknossos.client) use keyword-only arguments. #1363
- The signature of Dataset.trigger_reload_on_datastorechanged.dataset_namehas been renamed todataset_name_or_url. Alternatively, adataset_idcan be supplied. #1363
Changed¶
- Layer.add_mag_as_copynow automatically uses file-based copy, if possible. Therefore,- Dataset.fs_copy_dataset,- Dataset.add_fs_copy_layerand- Layer.add_fs_copy_magare deprecated. #1362
- The API methods now use v10API version of Webknossos. Datasets are now referenced by ID instead of dataset name or directory name. #1363
2.4.10 - 2025-08-25¶
Added¶
- Added support for remote datasets and annotations to webknossos export-as-tiff. #1356
2.4.9 - 2025-08-11¶
Fixed¶
- Fixed a bug where paths of references mags were wrong, if the target dataset's path was a prefix of the source dataset's path. #1346
2.4.8 - 2025-08-06¶
Added¶
- Added support for reading wkw datasets with the new "mag" key in datasource-properties.json, which replaces "wkwResolutions" for datasets written out by the webknossos server. #1349
2.4.7 - 2025-07-30¶
Added¶
- Added MagView.rechunkmethods to allow for rechunking of datasets. #1342
- Added the option to configure the codecs of Zarr3 datasets. Supply a Zarr3Configto thecompressargument inLayer.add_magor similar methods.codecsandchunk_key_encodingcan be customized. #1343
- Added method download_meshto theRemoteDatasetandRemoteAnnotationclasses to allow download of .stl files. #1307
Changed¶
- Enforces that chunk_shapeandshard_shapehave power-of-two values. This assumptions was used in the code previously, but not explicitly enforced. #1342
- The sharding_indexedcodec is no longer used ifchunk_shape == shard_shape. #1343
2.4.6 - 2025-07-28¶
2.4.5 - 2025-07-16¶
Fixed¶
- Fixed an issue where the unit of the scale (voxel_size) was not considered when reading the NML. #1339
2.4.4 - 2025-07-14¶
Added¶
- The function Dataset.announce_manual_uploadnow takes an additional optional parameterdataset_urlto select the correct datastore in a multi-datastore setup. #1336
Changed¶
- Every file that sends logging messages has its own logger now. This can be used to selectively disable loggers. #1335
- Enabled compression by default for convert-zarrandconvert-rawCLI commands. #1338
- Add more (network) errors ("UNAVAILABLE", "Unknown error") to list of retryable errors. #1341
2.4.3 - 2025-07-07¶
Changed¶
- Warnings regarding missing pims image readers are only printed once during conversion. Error messages regarding wk-libs version are not displayed in slurm environments. #1266
Fixed¶
- Fixed mag and attachment paths under Windows. #1329
2.4.2 - 2025-07-07¶
Added¶
- Added operations for Project,TaskandTaskTypeclasses and objects: #1294
- Added operations for Projectclass:- Project.create()for creating a new project.
- my_project.delete()to delete a project object
 
- Added my_project.update()to updatepriority,expected_timeandis_blacklisted_from_reportvalues of an existing project object.
- Added operations for TaskTypeclass:- TaskType.get_list()to get all- TaskTypeobjects.
- TaskType.get_by_id()to get a- TaskTypeby id.
- TaskType.get_by_name()to get a- TaskTypeby name.
- TaskType.create()to create a new- TaskType.
 
- Added operations my_task_type.delete()method forTaskTypeobjects.
- Added Task.get_list()to get allTaskobjects.
- Added operations for Taskobjects:- my_task.update()to update a- Taskobject.
- my_task.delete()to delete a- Taskobject.
 
- Added TaskExperienceclass to store domain and value pair.
- The libs client now uses versioned datastore routes for improved compatibility across webknossos versions. #1328
Fixed¶
- Fixed the tests for the newest WEBKNOSSOS version. #1328
2.4.1 - 2025-07-03¶
Changed¶
- Limit custom retries (e.g. additional to tensorstore internal retries) to certain network errors ("Too Many Requests", "GatewayTimeout"). #1330
2.4.0 - 2025-06-24¶
Breaking Changes¶
- Dataset.shallow_copy_datasetdoes not symlink layers, mags and attachments anymore. Instead mags and attachments are referenced by their path. #1290
- Deprecated a number of methods #1290:
- Dataset.add_symlink_layer, use- Dataset.add_layer_as_refinstead.
- Dataset.add_remote_layer, use- Dataset.add_layer_as_refinstead (renamed).
- Dataset.add_copy_layer, use- Dataset.add_layer_as_copyinstead (renamed).
- Layer.add_symlink_mag, use- Layer.add_mag_as_refinstead.
- Layer.add_remote_mag, use- Layer.add_mag_as_refinstead (renamed).
- Layer.add_copy_mag, use- Layer.add_mag_as_copyinstead (renamed).
- Attachments.add_symlink_attachments, use- Attachments.add_attachment_as_refinstead (note the singular form).
- Attachments.add_attachments, use- Attachments.add_attachment_as_refinstead (note the singular form).
- Attachments.add_copy_attachments, use- Attachments.add_attachment_as_copyinstead (note the singular form).
- Dataset.add_layerand- Dataset.add_layer_likeas well as derived methods do not eagerly create a folder for the layer anymore. Folders will be created, if necessary, when mags or attachments are added. #1290
Changed¶
- Changed the default path type to UPath#1326
- All mags now store their path in the datasource-properties.jsonfile. This eliminates the need for symlinks and removes the need to check multiple possible mag paths (e.g. 1-1-1 or 1). It also unifies local and remote mags. #1290
- Dataset-local mags and attachments use the ./prefix for their path in compliance with IETF RFC1808. #1290
2.3.11 - 2025-06-18¶
Fixed¶
- Fixed excessive RAM consumption during downsampling by chunking the computation. #1325
2.3.10 - 2025-06-17¶
Added¶
- Added layers_to_ignoreargument toDataset.copy_dataset. #1321
Fixed¶
- Make number of retries and backoff factor configurable (mainly for tensorstore reads/writes). See DEFAULT_NUM_RETRIESandDEFAULT_BACKOFF_FACTORenvironment variables. #1323
2.3.9 - 2025-06-13¶
Added¶
- Added a feature to track attached files of a segmentation layer. Previously, these files were only auto-detected by WEBKNOSSOS based on the location in special folders. Attachments can be added, e.g. dataset.get_segmentation_layer("segmentation").attachments.add_mesh('path/to/meshfile.hdf5'). #1312
- Added a with_attachmentsparameter toDataset.copy_datasetto copy attachments. #1312
- Added a get_segmentation_layermethod toDatasetto get a correctly-typed segmentation layer by name. #1312
- Retry asynchronous tensorstore calls on failure to make operation on object storage datasets accessed via network more robust. #1319
Changed¶
- When adding a layer, the used dtype is only valid if it is supported by webknossos. #1316
Fixed¶
- Fixed an issue that creates an Error when add_mag()was called just with achunk_shape. #1315
2.3.8 - 2025-05-28¶
Changed¶
- Made the folder_idparameter ofDataset.announce_manual_uploadoptional. #1313
2.3.7 - 2025-05-27¶
Changed¶
- Pin tifffile version to 2025.5.21 or below. #1314
2.3.6 - 2025-05-20¶
Added¶
- Add support for in-memory zarr3 datasets (using the Tensorstore in-memory KvStore driver). #1310
Changed¶
- Added url parsing in webknossos download CLI command, to get webknossos url without environment variable. #1299
2.3.5 - 2025-05-13¶
Added¶
- Added --downsampleflag towebknossos convertCLI command. #1305
Changed¶
- Uses compression by default for webknossos convertCLI command. #1305
Fixed¶
- Pinned click<8.2.0because of incompatibility withtyper. #1305
2.3.4 - 2025-05-12¶
Fixed¶
- Fixed deletion of symlinked mags. #1300
2.3.3 - 2025-05-06¶
Fixed¶
- Fixed an issue with Dataset.get_remote_datasets()that causes value lookups to fail. #1286
- Fixed issue with adding remote mags to local dataset due to some UPath checks failing for paths from different file systems. #1298
2.3.2 - 2025-04-25¶
Fixed¶
For S3 mag paths, do not dump endpoint_url protocol ("https") in the mag path when writing to dataset_properties.json. Correctly parse S3 paths for remote mags when reading from dataset_properties.json.#1293
2.3.1 - 2025-04-24¶
Added¶
- Added argument require_unique_nametoDataset.announce_manual_upload(). Additionally, the method returns a tuple ofnew_dataset_idanddirectory_namenow. #1283
Changed¶
- Upgraded tensorstoreto0.1.74. #1292
2.3.0 - 2025-04-22¶
Added¶
- Added a versionfield to thedatasource-properties.jsonfile, which is always set to1, for now. #1288
Changed¶
- The Layer.pathproperty now always returnsDataset.path / layer.name, even if all mags are stored remotely. #1288
- Layer.is_remote_to_datasetis deprecated in favor of- Layer.is_foreignand- MagView.is_remote_to_datasetis deprecated in favor of- MagView.is_foreign. #1288
- Relative pathfields in the mag definition of adatasource-properties.jsonfile are now interpreted relative to theDataset.path. #1288
2.2.0 - 2025-04-17¶
Breaking Changes¶
- If buffer_shapeis passed toLayer.upsample()it must be a multiple of theshard_shape. #1287
Changed¶
- Using x-auth-headerto send tokens to datastore. #1270
- Add clarification that bounding box size is in units of voxels #1289
Fixed¶
- Fixed an issue with upsampling views. #1287
2.1.0 - 2025-04-01¶
Breaking Changes¶
- Dropped support for Python 3.9. #1277
Added¶
- Adds the field totalFileSizeInBytesto the dataset upload information. #1264
- Added support for metadata in segment and trees. #1271
- Added a warning on import if a newer version of the webknossospackage is available from PyPI. #1280
Changed¶
- Upgraded tensorstoreto0.1.72. #1277
2.0.7 - 2025-03-26¶
Changed¶
- Pinned tensorstoreto<=0.1.71. #1276
2.0.6 - 2025-03-25¶
Fixed¶
- Fixed an issue with uploading datasets where the dataset name is already in use. #1275
2.0.5 - 2025-03-25¶
Changed¶
- Changed the default dimension separator for Zarr 2 arrays from .to/. #1274
2.0.4 - 2025-03-19¶
Changed¶
- For Zarr3 datasets, the OME-Zarr 0.5 metadata is now written. #1272
Fixed¶
- Fixed an issue where it was attempted to overwrite the OME-Zarr metadata for symlinked layers. #1272
2.0.3 - 2025-03-18¶
2.0.2 - 2025-03-13¶
Added¶
- Added tests for NDBoundingBox and VecInt classes. #1268
Changed¶
- Removed PimsImagejTiffReaderin favor of the unifiedPimsTiffReader. #1269
Fixed¶
- Fixed issues with tiff conversion for tiff files that don't use pages for z and other axes. #1269
2.0.1 - 2025-03-11¶
Added¶
- Added get_remote_annotations()to AnnotationInfo class to get a list of all remote Annotations of the current user. #1262
Fixed¶
- Fixed an issue with RemoteDataset.explore_and_add_remote()where including a remote dataset failed. #1261
- Fixed an issue with the Zarr array's shape when using Dataset.from_images. #1267
2.0.0 - 2025-03-04¶
Breaking Changes¶
- Changed writing behavior. There is a new argument allow_resizeforMagView.write, which defaults toFalse. If set toTrue, the bounding box of the underlyingLayerwill be resized to fit the to-be-written data. That largely mirrors the previous behavior. However, it is not safe for concurrent operations, so it is disabled by default. It is recommended to set theLayer.bounding_boxto the desired size before writing. Additionally, by default, writes need to be aligned with the underlying shard grid to guard against concurrency issues and avoid performance footguns. There is a new argumentallow_unaligned, which defaults toFalse. If set toTrue, the check for shard alignment is skipped.
- Deprecated chunks_per_shardarguments in favor ofshard_shape, which equals toshard_shape = chunk_shape * chunks_per_shard. The shard shape is more intuitive, because it directly defines the size of shards instead of being a factor of the chunk shape.
- Deprecated dtype_per_layerargument, because it promotes the use of uncommon dtypes and leads to confusion with the otherdtype_per_channelargument. With this change only the use ofdtype_per_channelis encouraged.
- Removed deprecated functions, properties and arguments:
- Functions:- open_annotation, use- Annotation.load()instead
- Dataset.get_color_layer, use- Dataset.get_color_layers()instead
- Dataset.get_segmentation_layer, use- Dataset.get_segmentation_layers()instead
- Dataset.create, use- Dataset.__init__instead
- Dataset.get_or_create, use- Dataset.__init__with- exist_ok=Trueinstead
- Layer.get_best_mag, use- Layer.get_finest_maginstead
- View.read_bbox, use- readwith- relative_bounding_boxor- absolute_bounding_boxinstead
- View.__enter__and- View.__exit__, context managers are not needed anymore
- open_nml, use- Skeleton.load()instead
- Group.add_graph, use- Group.add_treeinstead
- Group.get_max_graph_id, use- Group.get_max_tree_idinstead
- Group.flattened_graphs, use- Group.flattened_treesinstead
- Group.get_graph_by_id, use- Group.get_tree_by_idinstead
- Skeleton.from_path, use- Skeleton.load()instead
- Skeleton.write, use- Skeleton.save()instead
 
- Properties:- Annotation.username, use- Annotation.owner_nameinstead
- Annotation.scale, use- Annotation.voxel_sizeinstead
- Annotation.user_id, use- Annotation.owner_idinstead
- ArrayInfo.shard_size, use- ArrayInfo.shard_shapeinstead
- Dataset.scale, use- Dataset.voxel_sizeinstead
- MagView.global_offset, always- (0, 0, 0, ...)
- MagView.size, use- mag_view.bounding_box.in_mag(mag_view.mag).bottomright
- MagViewProperties.resolution, use- MagViewProperties.maginstead
- LayerProperties.resolutions, use- LayerProperties.magsinstead
- View.header, use- View.infoinstead
- View.global_offset, use- view.bounding_box.in_mag(view.mag).topleftinstead
- View.size, use- view.bounding_box.in_mag(view.mag).sizeinstead
- Group.graphs, use- Group.trees
- Skeleton.scale, use- Skeleton.voxel_sizeinstead
 
- Arguments:- annotation_typein- Annotation.download, not needed anymore
- annotation_typein- Annotation.open_as_remote_dataset, not needed anymore
- sizein- BufferedSliceReader.__init__, use- relative_bounding_boxor- absolute_bounding_boxinstead
- offsetin- BufferedSliceReader.__init__, use- relative_bounding_boxor- absolute_bounding_boxinstead
- offsetin- BufferedSliceWriter.__init__, use- relative_bounding_boxor- absolute_bounding_boxinstead
- json_update_allowedin- BufferedSliceWriter.__init__, not supported anymore
- offsetin- BufferedSliceWriter.reset_offset, use- relative_offsetor- absolute_offsetinstead
- scalein- Dataset.__init__, use- voxel_sizeor- voxel_size_with_unitinstead
- dtypein- Dataset.add_layer, use- dtype_per_channelinstead
- dtypein- Dataset.get_or_add_layer, use- dtype_per_channelinstead
- chunk_sizein- Dataset.add_layer_from_images, use- chunk_shapeinstead
- chunk_sizein- Dataset.copy_dataset, use- chunk_shapeinstead
- block_lenin- Dataset.copy_dataset, use- chunk_shapeinstead
- file_lenin- Dataset.copy_dataset, use- chunks_per_shardinstead
- argsin- Dataset.copy_dataset, use- executorinstead
- chunk_sizein- Layer.add_mag, use- chunk_shapeinstead
- block_lenin- Layer.add_mag, use- chunk_shapeinstead
- file_lenin- Layer.add_mag, use- chunks_per_shardinstead
- chunk_sizein- Layer.get_or_add_mag, use- chunk_shapeinstead
- block_lenin- Layer.get_or_add_mag, use- chunk_shapeinstead
- file_lenin- Layer.get_or_add_mag, use- chunks_per_shardinstead
- argsin- Layer.downsample, use- executorinstead
- argsin- Layer.downsample_mag, use- executorinstead
- argsin- Layer.redownsample, use- executorinstead
- argsin- Layer.downsample_mag_list, use- executorinstead
- argsin- Layer.downsample_mag_list, use- executorinstead
- buffer_edge_lenin- Layer.upsample, use- buffer_shapeinstead
- argsin- Layer.upsample, use- executorinstead
- min_magin- Layer.upsample, use- finest_maginstead
- offsetin- MagView.write, use- relative_offset,- absolute_offset,- relative_bounding_box, or- absolute_bounding_boxinstead
- json_update_allowedin- MagView.write, use- allow_resizeinstead
- argsin- MagView.compress, use- executorinstead
- offsetin- View.write, use- relative_offset,- absolute_offset,- relative_bounding_box, or- absolute_bounding_boxinstead
- json_update_allowedin- View.write, not supported anymore
- offsetin- View.read, use- relative_offset,- absolute_offset,- relative_bounding_box, or- absolute_bounding_boxinstead
- offsetin- View.get_view, use- relative_offset,- absolute_offset,- relative_bounding_box, or- absolute_bounding_boxinstead
- offsetin- View.get_buffered_slice_writer, use- relative_offset,- absolute_offset,- relative_bounding_box, or- absolute_bounding_boxinstead
- offsetin- View.get_buffered_slice_reader, use- relative_bounding_box, or- absolute_bounding_boxinstead
- sizein- View.get_buffered_slice_reader, use- relative_bounding_box, or- absolute_bounding_boxinstead
- chunk_sizein- View.for_each_chunk, use- chunk_shapeinstead
- source_chunk_sizein- View.for_zipped_chunks, use- source_chunk_shapeinstead
- target_chunk_sizein- View.for_zipped_chunks, use- target_chunk_shapeinstead
- argsin- View.content_is_equal, use- executorinstead
 
- Classes:- Graph, use- Treeinstead
 
- Changed defaults:
- exist_okin- Dataset.__init__is now- False
- compressin- Dataset.from_imagesis now- True
- compressin- Dataset.add_layer_from_imagesis now- True
- DEFAULT_DATA_FORMATis now- Zarr3
- compressin- Layer.add_magis now- True
- compressin- Layer.upsampleis now- True
- buffer_sizein- View.get_buffered_slice_readeris now computed from the shard shape
- buffer_sizein- View.get_buffered_slice_writeris now computed from the shard shape
- Moved from positional argument to keyword-only argument:
- json_update_allowedin- MagView.write
- organization_id,- sharing_token,- webknossos_url,- bbox,- layers,- mags,- path,- exist_okin- Dataset.download
- layers_to_link,- jobsin- Dataset.upload
- dtype_per_layer,- dtype_per_channel,- num_channels,- data_format,- bounding_boxin- Dataset.add_layer
- dtype_per_layer,- dtype_per_channel,- num_channels,- data_formatin- Dataset.get_or_add_layer
- data_format,- mag,- chunk_shape,- chunks_per_shard,- shard_shape,- compressin- Dataset.add_layer_from_images
- chunk_shape,- shard_shape,- chunks_per_shard,- data_format,- compress,- executorin- Dataset.add_copy_layer
- organization_id,- tags,- name,- folder_idin- Dataset.get_remote_datasets
- make_relativein- Dataset.add_symlink_layer
- name,- make_relative,- layers_to_ignorein- Dataset.shallow_copy_dataset
- executorin- Dataset.compress
- sampling_mode,- coarsest_mag,- executorin- Dataset.downsample
- voxel_size,- chunk_shape,- shard_shape,- chunks_per_shard,- data_format,- compress,- executor,- voxel_size_with_unitin- Dataset.copy_dataset
- chunk_shape,- shard_shape,- chunks_per_shard,- compressin- Layer.add_mag
- chunk_shape,- shard_shape,- chunks_per_shard,- compressin- Layer.get_or_add_mag
- extend_layer_bounding_box,- chunk_shape,- shard_shape,- chunks_per_shard,- compress,- executorin- Layer.add_copy_mag
- make_relative,- extend_layer_bounding_boxin- Layer.add_symlink_mag
- extend_layer_bounding_boxin- Layer.add_remote_mag
- extend_layer_bounding_boxin- Layer.add_fs_copy_mag
- move,- extend_layer_bounding_boxin- Layer.add_mag_from_zarrarray
- from_mag,- coarsest_mag,- interpolation_mode,- compress,- sampling_mode,- align_with_other_layers,- buffer_shape,- force_sampling_scheme,- allow_overwrite,- only_setup_mags,- executorin- Layer.downsample
- interpolation_mode,- compress,- buffer_shape,- allow_overwrite,- only_setup_mag,- executorin- Layer.downsample_mag
- interpolation_mode,- compress,- buffer_shape,- executorin- Layer.redownsample
- interpolation_mode,- compress,- buffer_shape,- allow_overwrite,- only_setup_mags,- executorin- Layer.downsample_mag_list
- finest_mag,- compress,- sampling_mode,- align_with_other_layers,- buffer_shape,- executorin- Layer.upsample
- chunk_shape,- executorin- SegmentationLayer.refresh_largest_segment_id
- chunk_shape,- shard_shape,- chunks_per_shard,- compression_mode,- pathin- MagView.create
- target_path,- executorin- MagView.compress
- Added arguments:
- allow_resizein- MagView.writewith default- False
- allow_unalignedin- MagView.writewith default- False
- shard_shapein- Dataset.from_images
- shard_shapein- Dataset.add_layer_from_images
- shard_shapein- Dataset.copy_dataset
- Newly deprecated arguments:
- chunks_per_shardin- Dataset.from_images, use- shard_shapeinstead
- dtype_per_layerin- Dataset.add_layer, use- dtype_per_channelinstead
- dtype_per_layerin- Dataset.get_or_add_layer, use- dtype_per_channelinstead
- chunks_per_shardin- Dataset.add_layer_from_images, use- shard_shapeinstead
- chunks_per_shardin- Dataset.copy_dataset, use- shard_shapeinstead
- dtype_per_layerin- Layer.__init__, use- dtype_per_channelinstead
- chunks_per_shardin- Layer.add_mag, use- shard_shapeinstead
- chunks_per_shardin- Layer.get_or_add_mag, use- shard_shapeinstead
- chunks_per_shardin- Layer.add_copy_mag, use- shard_shapeinstead
- chunks_per_shardin- MagView.create, use- shard_shapeinstead
- Newly deprecated properties:
- Layer.dtype_per_layer
Added¶
- Added the webknossos copy-datasetCLI command. #1259
- Added Dataset.write_layermethod for writing entire layers in one go. #1242
0.16.10 - 2025-02-26¶
0.16.9 - 2025-02-24¶
Fixed¶
- Fixed opening a renamed dataset via an annotation link. #1256
0.16.8 - 2025-02-04¶
0.16.7 - 2025-02-03¶
Fixed¶
- Fixed a misleading error message when Dataset.open() can't find a valid dataset. #1246
0.16.6 - 2025-02-03¶
0.16.5 - 2025-01-30¶
Added¶
- Added support for python 3.13. #1240
Changed¶
- When iterating over Tree.nodes(data=True)the nodes data dict was empty. To enable easier access to the data stored in each Node the properties of a Node are included in its data dict now. #1241
- Dataset.open_remote()adds another method to disambiguate dataset_name and organization_id. #1247
Fixed¶
- Fixed a bug with loading metadata lists. #1247
0.16.4 - 2025-01-23¶
Added¶
- Added list_bounding_boxes()for Zarr-based datasets. #1238
0.16.3 - 2025-01-21¶
Breaking Changes¶
- RemoteDataset.display_nameis deprecated. To change the name of a dataset use the- nameproperty instead.
- Dataset.get_remote_datasets()returns a mapping. The keys of this mapping changed from datasets name to datasets id.
- Task.create()needs a- dataset_idnow instead of a- dataset_name. Alternatively a- RemoteDatasetobject can be used. The- dataset_nameis marked as deprecated. As- dataset_nameis an optional argument now its position has changed, this is important if- create()is called only with positional arguments.
- When uploading an Annotation the organization_id is necessary now. The organization_id might be stored in the Annotation object or it is inferred from the current webknossos_context. #1155
Added¶
- Datasetmethod- get_remote_datasets()accepts- nameand- folder_idas arguments now to filter remote datasets.
- RemoteDatasetgot an additional property:- created.
- Annotationgot an additional property:- dataset_id.
- Dataset.trigger_dataset_import()was added to refresh the datastore to register a newly added dataset. #1236
Changed¶
- Updated to WEBKNOSSOS API version 9. This includes support for the new url structure for datasets and the usage of dataset_id. #1231
Fixed¶
- Fixed Mag setup for non-public datasets. #1222
- Fixed an issue when shallow copying datasets with a remote mag. #1224
0.16.2 - 2024-12-18¶
Breaking Changes¶
- MagView.get_zarr_arraynow returns a- tensorstorearray instead of a- zarr-pythonarray. #1174
Changed¶
- Updated to WEBKNOSSOS API version 8. #1185
- Using tensorstore for reading and writing zarr 2 and 3 arrays. Removed zarritaandzarrdependency. #1174
0.16.1 - 2024-12-05¶
Added¶
- Added .nrrd and .nhdr to supported suffixes. #1228
- Added more docstrings for many public classes and methods. #1225
Changed¶
- Removes vcr-py from developer dependencies for testing and adds proxay for recording and replaying API requests. #1198
- Removed the CZI installation extra from pip install webknossos[all]by default. Users need to manually install it withpip install --extra-index-url https://pypi.scm.io/simple/ webknossos[czi]. #1219
- Refactored the PimsTiffReader to read the data directly from the tiff file without creating a memmap-able copy first. This greatly reduces the time and storage requirements for converting large tiff files. #1212
Fixed¶
- Fixed an issue where adding existing trees to an annotation fails. #1201
- Fixed unpickling of the SSL_Context to allow for a second or third pickling. #1223
- Fixed offset error in upsample_cube job #1209
0.16.0 - 2024-11-27¶
0.15.11 - 2024-11-26¶
Fixed¶
- Fixed pickling issue that has been introduced in 0.15.9. #1218
0.15.10 - 2024-11-25¶
Fixed¶
- Fixed pickling issue that has been introduced in 0.15.9. #1218
0.15.9 - 2024-11-25¶
Changed¶
Removed the CZI installation extra from pip install webknossos[all] by default. Users need to manually install it with pip install --extra-index-url https://pypi.scm.io/simple/ webknossos[czi]. #1219
0.15.8 - 2024-11-15¶
Changed¶
- Fixed SSL certificate verification for remote datasets by adding CA certificates using certifi. #1211
0.15.7 - 2024-10-25¶
Added¶
- Added --coarsest-magargument to thewebknossos downsamplecommand. #1203
Fixed¶
- Fixed an issue with merging annotations with compressed fallback layers.
- Fixed an issue where adding a Zarr array with other axes than cxyzleads to an error. #1204
0.15.6 - 2024-10-16¶
Added¶
- Added add_mag_from_zarrarraytoLayerclass, to add existing Zarr arrays as a mag of a layer. #1151
Changed¶
- Replaced the Python package manager poetrywithuv. #1199
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-nameand--magfor compress command of the CLI. #1141
- Added options --chunk-shapeand--chunks-per-shardfor convert command of the CLI. #1150
- The from_imagesmethod of theDatasetsupports directories and single files asinput_pathnow. #1152
- Added support for python version 3.12. #1068
- The number of pixel limit for JPG conversion is disabled now. #1154
- Added option --batch-sizeto 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_imagesoradd_layer_from_imagesmethod. #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 support 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 uploadon 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_nameas optional argument toDataset.from_imagesmethod. If the created dataset contains only a single layer,layer_nameis used, otherwise the givenlayer_nameis 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_imagesleads 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_FORMATandDEFAULT_CHUNKS_PER_SHARDcan now be set with the env variablesWK_DEFAULT_DATA_FORMATandWK_DEFAULT_CHUNKS_PER_SHARD
- A Vec3Intcan 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_ZARRITAenv variable is no longer required.zarritais 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_successfrom- webknossos.utilsnow requires an- executorargument. #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_typeproperty toTaskclass. #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: opentasks have been renamed topending. UseTask.status.pending_instance_countinstead 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¶
- Viewhas a- map_chunkmethod 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_idwas added to lookup the highest value in segmentation data and setlargest_segment_idaccordingly.
- The convertcommand of the cli now has a--categoryflag, to select the LayerCategoryType.
0.13.2 - 2023-07-26¶
Changed¶
- The convertcommand of the cli now has a--categoryflag, 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_secondsandmodifiedtoAnnotationInfo. #914
- Added zarritastorage backend for arrays. zarrita supports Zarr v2 and v3 including sharding. To activate zarrita, the environment variableWK_USE_ZARRITAmust be set. #912
- Added a Zarr3data format which supports sharding. #912
Changed¶
- Integrated the wkcuberCLI tool intowebknossospackage. #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 uploadto 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_treenow also accepts a tree object as a first parameter (instead of only a string). #891
- Group.remove_tree_by_idwas 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_imagesanddataset.add_layer_from_images. #877
Changed¶
- Dataset.from_imagesand- dataset.add_layer_from_imagesnow 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 RemoteFolderfor assigning remote datasets to a WEBKNOSSOS folder. #868
0.12.1 - 2023-02-16¶
Added¶
- Added read_onlyparameter 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_onlyproperty 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_imagesand- dataset.add_layer_from_imageshave new features: #842
- dm3and- dm4datasets can be read without bioformats now.
- It's possible to completely disable the bioformats adapter by setting use_bioformatsto 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 idattribute of theBoundingBoxclass, 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 indownloadandopen_remotemethods. #837
0.10.26 - 2022-12-05¶
Changed¶
- Dataset.from_imagesand- dataset.add_layer_from_imagesnow try to import the images via the bioformats after all other options as well. #829
Fixed¶
- dataset.add_layer_from_imagescan now handle paths to folders which only contain a single image. #829
0.10.25 - 2022-11-29¶
Breaking Changes¶
- Dataset.from_imagesnow 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_imagesordataset.add_layer_from_images, without using bioformats. #822
- dataset.add_layer_from_imagescan add a layer per timepoint and per channel when passing- allow_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 executorargument can now be passed to the following methods,argsis 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- .zipsuffix. #811
- Added annotation.get_volume_layer_segments()to interact with information from theSegmentstab in annotations. This method returns a dict from segment ids to an object containing optional segmentname,colorandanchor_position. #812
- Added convenience methods Dataset.compressandDataset.downsamplefor 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 argument- skip_volume_data, which can be set to- Trueto 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 zarrandnumcodecs. #798
0.10.14 - 2022-08-30¶
Changed¶
- dataset.add_copy_layer()and- layer.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 use- dataset.add_fs_copy_layer()or- layer.add_fs_copy_mag(). #790
0.10.13 - 2022-08-22¶
Breaking Changes¶
- Renamed chunk_sizearguments tochunk_shape.chunk_sizeis 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 Annotationconstructor takes theowner_nameargument instead ofusername. This is only important when using keyword arguments. Theusernameattributes are still available as a proxy for theowner_nameattribute, but deprecated. #760
- user_idon- AnnotationInfoobjects is deprecated, please use- owner_idinstead. #760
- When self-hosting a webKnossos server, please note that a webknossos version >= 22.06.0is required. #760 & #764
Added¶
- Dataset.upload()accepts- Layerobjects from a- RemoteDatasetin the- layers_to_linkargument list. Also,- LayerToLinkcan consume those via- LayerToLink.from_remote_layer(). #761
- Task.create()accepts a- RemoteDatasetfor the- dataset_nameargument. #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 the- annotation_typeanymore, and the type can also be omitted from passed URLs. #764
- Dataset.add_layer_from_imagesallows smaller batch sizes for uncompressed writes. #766
- Dataset.add_layer_from_imagesuses 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_layersparameter 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_maginLayer.downsampletocoarsest_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.downsampleandLayer.upsamplefunction now automatically downsample according to magnifications already existing in the dataset. This behaviour can be turned off by setting the new parameteralign_with_other_layerstoFalse. #730
- View.get_buffered_slice_reader()and- View.get_buffered_slice_writer()don't log anything by default now. To get the previous logging, please invoke them with- logging=True. #741
0.10.3 - 2022-06-03¶
Added¶
- Added export of OME-NGFF v0.4 metadata for all Datasets 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_URLenv 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 a- RemoteDatasetinstead instead of the URL string. You can get the URL via- remote_ds.url. #723
- User.teamsnow is a tuple instead of a list. #723
- The deprecated download_datasetfunction now requires theorganization_idargument. #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 Datasetmethods, and
- read and change the following dataset metadata as properties: display_name,description,tags,is_public,sharing_token,allowed_teams.
- Teaminstances also contain the- organization_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 Graphclass changed toTree, also related methods and attributes are renamed now, e.g.add_graphis nowadd_tree. All previous entities are still available, but deprecated.
- scalehas changed to- voxel_sizefor datasets, skeletons and annotations. Changes in- Datasetare backwards-compatible, but- scaleis deprecated. For- Annotationand- Skeletonsthe initializer only supports- voxel_size, the- scaleattribute is deprecated
- get_best_magis deprecated, please use- get_finest_maginstead
- In layer.upscale,min_magis 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 Datasetclasses, by usingUPathfrom 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 argument- dataset_namewas renamed to- dataset_name_or_url. #660
Added¶
- Dataset.downloadnow also accepts a URL, as well as a- sharing_token, which can also be part of the URL. #660
0.9.13 - 2022-03-24¶
Breaking Changes¶
- Consistently rename organization_nameparameters toorganization_id(except in deprecatedwebknossos.client.download_dataset). #639
Changed¶
- MagView.compressnow skips in-place compression of already compressed mags. #667
- Replaced uses of pathlib.PathwithUPathfrom universal_pathlib. SinceUPathis 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 BoundingBoxobjects instead of tuples. #646
Added¶
- Added groupsandgraphsproperty to skeleton.Group to access immediate child groups/graphs. #645
- The BoundingBoxclass now supports the following additional properties:id,name,is_visibleandcolor. #646
- Added support for Zarr arrays in the Datasetclasses. Users can set thedata_formatof layers tozarrto 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.jsonfor Zarr layers compared to WKW layers:
- dataFormatneeds to be changed to- zarr.
- 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_lenandfile_lenattributes are now deprecated, but still available for backwards compatibility. Usechunk_sizeandchunks_per_shardinstead. These new attributes areVec3Int, so they can be set non-uniformly. However, WKW-backed layers still require uniformchunk_sizeandchunks_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_copynow 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 positionof askeleton.Nodeto useVec3Intinstead of(Float, Float, Float), because webKnossos stores node positions as integers. #645
Fixed¶
- Tests: The ./test.shscript 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 Annotations andSkeletons, as well as nml-parsing related code. #602
- webknossos.skeleton.nmlis not exposed anymore. The previous functionality may be found in- webknossos._nmland- webknossos/annotation/_nml_conversion.pyif 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 the- Annotationclass instead.
- The nameattribute on theSkeletonclass changed todataset_name.
- The deprecated Skeleton.offsetattribute is removed.
- The following attributes are removed from the Skeletonclass, instead they are part of theAnnotationclass now:time,edit_position,edit_rotation,zoom_level,task_bounding_box,user_bounding_boxes.
- The following Annotationmethods 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 AnnotationandSkeletonclasses. #602
- The Skeletonclass has new attributesdescriptionandorganization_id.
- The Annotationclass has new attributesusernameandannotation_id, as well as the following attributes that are proxies for the skeleton attributes:dataset_name,scale,organization_id,description
- Annotations can now be initialized from their attributes and an optional skeleton.
- New methods on Annotation:upload,add_volume_layer,delete_volume_layer
- Annotation.load()and- annotation.save()also works with- .nmlfiles.
- Added MagView.get_views_on_disk()as a shortcut to turningget_bounding_boxes_on_diskinto views. #621
Fixed¶
- Fixed the download of skeleton-only annotations. #602
0.9.8 - 2022-02-28¶
Added¶
- Added allow_overwriteparameter toLayer.downsample(). #614
0.9.7 - 2022-02-28¶
Added¶
- Added only_setup_magparameter 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.pyexample. #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_namebefore.
0.9.5 - 2022-02-10¶
Fixed¶
- Skeleton: Fixed a bug when comparing Graphinstances, 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 BoundingBoxcannot 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_chunkand(Mag)View.for_zipped_chunkschanged:
- The previous argument work_on_chunkis now calledfunc_per_chunk.
- The various chunk_sizearguments 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 parameters- offsetand- sizeis deprecated. Please use the parameter relative_bounding_box or absolute_bounding_box (both in Mag(1)) instead. The old offset behavior was absolute for- MagViews and relative for- Views.
- (Mag)View.get_buffered_slice_writer: using the parameter- offsetis deprecated. Please use the parameter relative_offset or absolute_offset (both in Mag(1)) instead. The old offset behavior was absolute for- MagViews and relative for- Views.
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 box
- MagView.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 now
- MagView.get_bounding_boxes_on_disk()now returns an iterator yielding bounding boxes in Mag(1)
- BoundingBoxcannot 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 offsetparameter forread/write/get_viewin MagView and View is deprecated. There are new counterpartsabsolute_offsetandrelative_offsetwhich have to be specified in Mag(1), whereasoffsetpreviously was specified in the Mag of the respective View. Also, forread/get_viewonly usingsizeis deprecated, since it used to refer to the size in the View's Mag. Instead,sizeshould always be used together withabsolute_offsetorrelative_offset. Then it is interpreted in Mag(1).
- The (Mag)View attributes view.global_offsetandview.sizeare deprecated now, which were in the Mag of the respective View. Please useview.bounding_boxinstead, which is in Mag(1).
- read_bboxon the (Mag)View is deprecated as well, please use- readwith the- absolute_bounding_boxor- relative_bounding_boxparameter 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_linkparameter 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 webKnossos
- open_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_Zwhen downsampling 2D data. #516
- Make computation of largestSegmentIdmore 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()and- get_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()and- get_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.Graphnow inherits from- networkx.Graphdirectly. Therefore, the- nx_graphattribute is removed. #481
- The class LayerCategorieswas removed.COLOR_TYPEandSEGMENTATION_TYPEwere renamed toCOLOR_CATEGORYandSEGMENTATION_CATEGORYand can now be imported directly. The type of many parameters were changed fromstrto the literalLayerCategoryType. #454
Added¶
- Added redownsample()method toLayerto recompute existing downsampled magnifications. #461
- Added globalize_floodfill.pyscript to globalize partially computed flood fill operations. #461
Changed¶
- Improved performance for calculations with Vec3IntandBoundingBox. #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 organizationparameter from thewebknossos_contextfunction. 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 Userclass 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 parameter- chunk_border_alignmentsnow does not accept a list with a single- intanymore. #452
Fixed¶
- Make Views picklable. We now ignore the file handle when we pickle Views. #469
0.8.19 - 2021-10-21¶
Breaking Changes¶
- Views 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.pyandupload_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 Vec3Intconstructor now asserts that its components are whole numbers also in numpy case. #434
- Updated scikit-image dependency to 0.18.3. #435
- BoundingBox.containsnow 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 dimensioncan 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.magis now- mag._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¶
- BoundingBoxand- Magare now immutable attr classes containing- Vec3Intvalues. See breaking changes above.
Fixed¶
-
0.8.13 - 2021-09-22¶
This is the latest release at the time of creating this changelog.
- Get Help
- Community Forums
- Email Support