imaging-server-kit 0.1.2__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.gitignore +8 -1
  2. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/PKG-INFO +35 -12
  3. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/README.md +19 -4
  4. imaging_server_kit-0.2.0/docs/_static/cellpose_example.mp4 +0 -0
  5. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_toc.yml +2 -3
  6. imaging_server_kit-0.2.0/docs/assets/threshold_qubalab.png +0 -0
  7. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/index.md +11 -11
  8. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/00_getting_started.md +21 -15
  9. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/01_algorithm.ipynb +4 -28
  10. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/02_samples.ipynb +1 -1
  11. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/03_metadata.ipynb +1 -1
  12. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/04_multialgo.ipynb +1 -1
  13. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/05_streams.ipynb +6 -4
  14. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/06_tiled.ipynb +7 -16
  15. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/07_server.md +8 -9
  16. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/08_python.ipynb +57 -21
  17. imaging_server_kit-0.1.2/docs/sections/10_types.md → imaging_server_kit-0.2.0/docs/sections/09_layers.md +1 -0
  18. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/pyproject.toml +20 -18
  19. imaging_server_kit-0.2.0/src/imaging_server_kit/__init__.py +85 -0
  20. imaging_server_kit-0.2.0/src/imaging_server_kit/_version.py +24 -0
  21. imaging_server_kit-0.2.0/src/imaging_server_kit/cli.py +107 -0
  22. imaging_server_kit-0.2.0/src/imaging_server_kit/core/__init__.py +5 -0
  23. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/_etc.py +12 -49
  24. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/algorithm.py +193 -120
  25. imaging_server_kit-0.2.0/src/imaging_server_kit/core/domain.py +140 -0
  26. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/errors.py +8 -20
  27. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/multialgo.py +33 -39
  28. imaging_server_kit-0.2.0/src/imaging_server_kit/core/runner.py +264 -0
  29. imaging_server_kit-0.2.0/src/imaging_server_kit/core/stack.py +323 -0
  30. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/static/css/index.css +14 -3
  31. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/static/css/info.css +0 -50
  32. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/templates/index.html +6 -1
  33. imaging_server_kit-0.2.0/src/imaging_server_kit/core/tiling.py +352 -0
  34. imaging_server_kit-0.2.0/src/imaging_server_kit/demo/__init__.py +35 -0
  35. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/demo/examples.py +103 -78
  36. imaging_server_kit-0.2.0/src/imaging_server_kit/demo/tools.py +701 -0
  37. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/__init__.py +2 -0
  38. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/__init__.py +3 -0
  39. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/parameter_panel.py +157 -0
  40. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/runner_widget.py +167 -0
  41. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/task_manager.py +45 -0
  42. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/__init__.py +82 -0
  43. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/extra_widgets.py +19 -0
  44. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari.yaml +31 -0
  45. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari_http_widget.py +8 -0
  46. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari_stack.py +326 -0
  47. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari_widget.py +267 -0
  48. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/__init__.py +76 -0
  49. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/qupath_bridge.py +475 -0
  50. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/qupath_http_widget.py +8 -0
  51. imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/qupath_widget.py +315 -0
  52. imaging_server_kit-0.2.0/src/imaging_server_kit/merge/__init__.py +1 -0
  53. imaging_server_kit-0.2.0/src/imaging_server_kit/merge/_image_merger.py +178 -0
  54. imaging_server_kit-0.2.0/src/imaging_server_kit/merge/_mask_merger.py +447 -0
  55. imaging_server_kit-0.2.0/src/imaging_server_kit/merge/_object_merger.py +80 -0
  56. imaging_server_kit-0.2.0/src/imaging_server_kit/merge/common.py +16 -0
  57. imaging_server_kit-0.2.0/src/imaging_server_kit/merge/layer_merger.py +109 -0
  58. imaging_server_kit-0.2.0/src/imaging_server_kit/merge/merger.py +32 -0
  59. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/__init__.py +34 -0
  60. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_boxes_serializer.py +46 -0
  61. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_image_serializer.py +23 -0
  62. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_mask_serializer.py +43 -0
  63. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_null_serializer.py +19 -0
  64. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_paths_serializer.py +32 -0
  65. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_points_serializer.py +65 -0
  66. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_tracks_serializer.py +31 -0
  67. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_vectors_serializer.py +50 -0
  68. {imaging_server_kit-0.1.2/src/imaging_server_kit/core → imaging_server_kit-0.2.0/src/imaging_server_kit/remote}/app.py +96 -159
  69. {imaging_server_kit-0.1.2/src/imaging_server_kit/core → imaging_server_kit-0.2.0/src/imaging_server_kit/remote}/client.py +60 -92
  70. {imaging_server_kit-0.1.2/src/imaging_server_kit/core → imaging_server_kit-0.2.0/src/imaging_server_kit/remote}/encoding.py +0 -15
  71. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/layer_serializer.py +81 -0
  72. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/meta_serializer.py +67 -0
  73. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/serializer.py +33 -0
  74. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/stack_serializer.py +25 -0
  75. imaging_server_kit-0.2.0/src/imaging_server_kit/remote/tile_serializer.py +20 -0
  76. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/types/__init__.py +18 -4
  77. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_bool.py +36 -0
  78. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_boxes.py +131 -0
  79. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_choice.py +54 -0
  80. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_float.py +46 -0
  81. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_image.py +205 -0
  82. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_integer.py +46 -0
  83. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_mask.py +362 -0
  84. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_notification.py +47 -0
  85. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_null.py +32 -0
  86. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_paths.py +64 -0
  87. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_points.py +133 -0
  88. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_progress.py +62 -0
  89. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_string.py +34 -0
  90. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_tracks.py +54 -0
  91. imaging_server_kit-0.2.0/src/imaging_server_kit/types/_vectors.py +141 -0
  92. imaging_server_kit-0.2.0/src/imaging_server_kit/types/common.py +24 -0
  93. imaging_server_kit-0.2.0/src/imaging_server_kit/types/layer.py +319 -0
  94. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/__init__.py +0 -0
  95. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_boxes_validator.py +30 -0
  96. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_image_validator.py +33 -0
  97. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_mask_validator.py +28 -0
  98. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_points_validator.py +23 -0
  99. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_vectors_validator.py +21 -0
  100. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/layer_validator.py +34 -0
  101. imaging_server_kit-0.2.0/src/imaging_server_kit/validation/validator.py +22 -0
  102. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/PKG-INFO +35 -12
  103. imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/SOURCES.txt +145 -0
  104. imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/entry_points.txt +5 -0
  105. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/requires.txt +15 -4
  106. imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/scm_file_list.json +140 -0
  107. imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/scm_version.json +8 -0
  108. {imaging_server_kit-0.1.2/tests → imaging_server_kit-0.2.0/tests/core}/test_basic.py +17 -8
  109. imaging_server_kit-0.2.0/tests/core/test_results.py +35 -0
  110. {imaging_server_kit-0.1.2/tests → imaging_server_kit-0.2.0/tests/core}/test_streaming.py +2 -2
  111. imaging_server_kit-0.2.0/tests/core/test_tiling.py +393 -0
  112. imaging_server_kit-0.2.0/tests/merge/test_merging.py +32 -0
  113. imaging_server_kit-0.2.0/tests/remote/test_app.py +138 -0
  114. imaging_server_kit-0.2.0/tests/remote/test_client_server.py +122 -0
  115. imaging_server_kit-0.1.2/.dockerignore +0 -2
  116. imaging_server_kit-0.1.2/Dockerfile +0 -15
  117. imaging_server_kit-0.1.2/Dockerfile-GPU +0 -14
  118. imaging_server_kit-0.1.2/build.sh +0 -6
  119. imaging_server_kit-0.1.2/docs/sections/09_docker.md +0 -57
  120. imaging_server_kit-0.1.2/src/imaging_server_kit/__init__.py +0 -165
  121. imaging_server_kit-0.1.2/src/imaging_server_kit/_version.py +0 -34
  122. imaging_server_kit-0.1.2/src/imaging_server_kit/cli.py +0 -65
  123. imaging_server_kit-0.1.2/src/imaging_server_kit/core/__init__.py +0 -14
  124. imaging_server_kit-0.1.2/src/imaging_server_kit/core/results.py +0 -261
  125. imaging_server_kit-0.1.2/src/imaging_server_kit/core/runner.py +0 -211
  126. imaging_server_kit-0.1.2/src/imaging_server_kit/core/serialization.py +0 -70
  127. imaging_server_kit-0.1.2/src/imaging_server_kit/core/tiling.py +0 -146
  128. imaging_server_kit-0.1.2/src/imaging_server_kit/demo/__init__.py +0 -15
  129. imaging_server_kit-0.1.2/src/imaging_server_kit/template/cookiecutter.json +0 -5
  130. imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/.dockerignore +0 -1
  131. imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/.gitignore +0 -26
  132. imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/Dockerfile +0 -15
  133. imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/README.md +0 -34
  134. imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/docker-compose.yml +0 -6
  135. imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/main.py +0 -41
  136. imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/requirements.txt +0 -1
  137. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_bool.py +0 -46
  138. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_boxes.py +0 -185
  139. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_choice.py +0 -61
  140. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_float.py +0 -59
  141. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_image.py +0 -135
  142. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_integer.py +0 -60
  143. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_mask.py +0 -287
  144. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_notification.py +0 -57
  145. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_null.py +0 -45
  146. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_paths.py +0 -82
  147. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_points.py +0 -202
  148. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_string.py +0 -46
  149. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_tracks.py +0 -73
  150. imaging_server_kit-0.1.2/src/imaging_server_kit/types/_vectors.py +0 -194
  151. imaging_server_kit-0.1.2/src/imaging_server_kit/types/common.py +0 -49
  152. imaging_server_kit-0.1.2/src/imaging_server_kit/types/data_layer.py +0 -120
  153. imaging_server_kit-0.1.2/src/imaging_server_kit.egg-info/SOURCES.txt +0 -106
  154. imaging_server_kit-0.1.2/src/imaging_server_kit.egg-info/entry_points.txt +0 -2
  155. imaging_server_kit-0.1.2/tests/sample_images/blobs.tif +0 -0
  156. imaging_server_kit-0.1.2/tests/test_results.py +0 -32
  157. imaging_server_kit-0.1.2/tests/test_tiling.py +0 -144
  158. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.gitattributes +0 -0
  159. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.github/workflows/deploy.yml +0 -0
  160. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.github/workflows/publish.yml +0 -0
  161. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/CITATION.cff +0 -0
  162. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/LICENSE +0 -0
  163. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/MANIFEST.in +0 -0
  164. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_config.yml +0 -0
  165. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/oripy_threshold.mp4 +0 -0
  166. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/progressive_threshold.mp4 +0 -0
  167. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/server_napari.mp4 +0 -0
  168. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/stardist_blobs.mp4 +0 -0
  169. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/tiles.mp4 +0 -0
  170. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/tiling2.mp4 +0 -0
  171. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/yolo-stream.mp4 +0 -0
  172. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/demo_napari_screenshot.png +0 -0
  173. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/gaussian_result.png +0 -0
  174. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/meta_sc.png +0 -0
  175. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/samples_sc.png +0 -0
  176. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/screenshot_napari_threshold.png +0 -0
  177. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/screenshot_server.png +0 -0
  178. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/server_running.png +0 -0
  179. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/threshold_qupath.png +0 -0
  180. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/logo.ico +0 -0
  181. /imaging_server_kit-0.1.2/docs/sections/11_examples.md → /imaging_server_kit-0.2.0/docs/sections/10_examples.md +0 -0
  182. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/examples/readme.md +0 -0
  183. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/setup.cfg +0 -0
  184. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/templates/info.html +0 -0
  185. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/demo/sample_images/blobs.tif +0 -0
  186. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/demo/sample_images/tracks.tif +0 -0
  187. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/dependency_links.txt +0 -0
  188. {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/top_level.txt +0 -0
  189. {imaging_server_kit-0.1.2/tests → imaging_server_kit-0.2.0/tests/core}/test_multialgo.py +0 -0
  190. {imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/samples → imaging_server_kit-0.2.0/tests/sample_images}/blobs.tif +0 -0
@@ -2,6 +2,7 @@ __pycache__/
2
2
  *.py[cod]
3
3
  *$py.class
4
4
  old/
5
+ tmp/
5
6
  data/
6
7
  env/
7
8
  build/
@@ -26,4 +27,10 @@ venv/
26
27
  **/_version.py
27
28
 
28
29
  push.sh
29
- todo.txt
30
+ todo.txt
31
+ release.md
32
+ TODO.md
33
+ AGENTS.md
34
+ CLAUDE.md
35
+ .claude/
36
+ summary.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imaging-server-kit
3
- Version: 0.1.2
3
+ Version: 0.2.0
4
4
  Summary: Convert image processing functions to GUIs, FastAPI servers, and more.
5
5
  Author-email: Mallory Wittwer <mallory.wittwer@epfl.ch>
6
6
  License: Copyright (c) 2024, EPFL
@@ -39,50 +39,57 @@ Classifier: License :: OSI Approved :: BSD License
39
39
  Classifier: Operating System :: OS Independent
40
40
  Classifier: Programming Language :: Python
41
41
  Classifier: Programming Language :: Python :: 3
42
- Classifier: Programming Language :: Python :: 3 :: Only
43
- Classifier: Programming Language :: Python :: 3.9
44
42
  Classifier: Programming Language :: Python :: 3.10
45
43
  Classifier: Programming Language :: Python :: 3.11
46
44
  Classifier: Programming Language :: Python :: 3.12
45
+ Classifier: Programming Language :: Python :: 3.13
47
46
  Classifier: Topic :: Scientific/Engineering :: Image Processing
48
- Requires-Python: >=3.9
47
+ Requires-Python: >=3.10
49
48
  Description-Content-Type: text/markdown
50
49
  License-File: LICENSE
51
50
  Requires-Dist: numpy
51
+ Requires-Dist: pandas
52
52
  Requires-Dist: tifffile
53
53
  Requires-Dist: tqdm
54
54
  Requires-Dist: pydantic>=2.0
55
55
  Requires-Dist: scikit-image[optional]
56
56
  Requires-Dist: jinja2
57
57
  Requires-Dist: PyYAML
58
- Requires-Dist: cookiecutter
59
- Requires-Dist: opencv-contrib-python-headless
60
58
  Requires-Dist: imantics
61
59
  Requires-Dist: geojson
62
60
  Requires-Dist: fastapi
63
61
  Requires-Dist: uvicorn[standard]
64
62
  Requires-Dist: python-multipart
65
63
  Requires-Dist: msgpack
66
- Requires-Dist: httpx
64
+ Requires-Dist: networkx
65
+ Provides-Extra: napari
66
+ Requires-Dist: qtpy; extra == "napari"
67
+ Requires-Dist: napari[all]>=0.4.16; extra == "napari"
68
+ Requires-Dist: napari-toolkit; extra == "napari"
69
+ Requires-Dist: opencv-contrib-python-headless; extra == "napari"
70
+ Provides-Extra: qupath
71
+ Requires-Dist: imaging-server-kit[napari]; extra == "qupath"
72
+ Requires-Dist: qubalab>=0.2.0; extra == "qupath"
67
73
  Provides-Extra: docs
68
74
  Requires-Dist: jupyter-book<2.0; extra == "docs"
69
75
  Requires-Dist: jupytext; extra == "docs"
70
76
  Provides-Extra: test
71
77
  Requires-Dist: pytest; extra == "test"
78
+ Requires-Dist: coverage; extra == "test"
79
+ Requires-Dist: httpx; extra == "test"
72
80
  Provides-Extra: all
73
- Requires-Dist: imaging-server-kit[docs,test]; extra == "all"
81
+ Requires-Dist: imaging-server-kit[docs,napari,qupath,test]; extra == "all"
74
82
  Dynamic: license-file
75
83
 
76
- ![EPFL Center for Imaging logo](https://imaging.epfl.ch/resources/logo-for-gitlab.svg)
77
84
  # 🪐 Imaging Server Kit
78
85
 
79
86
  Turn Python-based image processing workflows into **algorithms** that gain extra functionalities.
80
87
 
81
- - [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [QuPath](https://github.com/Imaging-Server-Kit/qupath-extension-serverkit), [Napari](https://github.com/Imaging-Server-Kit/napari-serverkit), or [Python](./sections/08_python) via HTTP requests.
88
+ - [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [Napari](https://napari.org/stable/), [QuPath](https://qupath.github.io/), or [Python](https://imaging-server-kit.github.io/imaging-server-kit/sections/08_python.html) via HTTP requests.
82
89
 
83
- https://github.com/user-attachments/assets/36bda69d-996e-4240-9a53-7e76d9ea3894
90
+ https://github.com/user-attachments/assets/0be819ea-fcc1-48ee-8fae-7265e63a00d4
84
91
 
85
- - [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari.
92
+ - [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari or QuPath.
86
93
 
87
94
  https://github.com/user-attachments/assets/1ff572f7-f159-4f5a-afd4-7a157de3d9f8
88
95
 
@@ -94,6 +101,10 @@ https://github.com/user-attachments/assets/47c2f734-5683-49d9-8aea-388c3a2bc16d
94
101
 
95
102
  https://github.com/user-attachments/assets/a3f69a9f-fb68-4580-a804-6c57d5807b9a
96
103
 
104
+ ## Development status
105
+
106
+ The Imaging Server Kit is being actively developed and is iterating rapidly. It is likely that there will be **compatibility-breaking changes** in future versions.
107
+
97
108
  ## Installation
98
109
 
99
110
  Install the `imaging-server-kit` package with `pip`:
@@ -110,6 +121,18 @@ cd imaging-server-kit
110
121
  pip install -e .
111
122
  ```
112
123
 
124
+ To use the **Napari-related functionalities**, you additionally have to install [`napari`](https://github.com/napari/napari) and [`napari-toolkit`](https://github.com/MIC-DKFZ/napari_toolkit) which are not included by default. Install the package with:
125
+
126
+ ```sh
127
+ pip install "imaging-server-kit[napari]"
128
+ ```
129
+
130
+ To use the **QuPath-related functionalities**, you additionally have to install [`qubalab>=0.2.0`](https://pypi.org/project/qubalab/#history), which is not included by default. Install the package with:
131
+
132
+ ```sh
133
+ pip install "imaging-server-kit[qupath]"
134
+ ```
135
+
113
136
  ## Getting started
114
137
 
115
138
  The documentation is available on [this page](https://imaging-server-kit.github.io/imaging-server-kit).
@@ -1,13 +1,12 @@
1
- ![EPFL Center for Imaging logo](https://imaging.epfl.ch/resources/logo-for-gitlab.svg)
2
1
  # 🪐 Imaging Server Kit
3
2
 
4
3
  Turn Python-based image processing workflows into **algorithms** that gain extra functionalities.
5
4
 
6
- - [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [QuPath](https://github.com/Imaging-Server-Kit/qupath-extension-serverkit), [Napari](https://github.com/Imaging-Server-Kit/napari-serverkit), or [Python](./sections/08_python) via HTTP requests.
5
+ - [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [Napari](https://napari.org/stable/), [QuPath](https://qupath.github.io/), or [Python](https://imaging-server-kit.github.io/imaging-server-kit/sections/08_python.html) via HTTP requests.
7
6
 
8
- https://github.com/user-attachments/assets/36bda69d-996e-4240-9a53-7e76d9ea3894
7
+ https://github.com/user-attachments/assets/0be819ea-fcc1-48ee-8fae-7265e63a00d4
9
8
 
10
- - [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari.
9
+ - [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari or QuPath.
11
10
 
12
11
  https://github.com/user-attachments/assets/1ff572f7-f159-4f5a-afd4-7a157de3d9f8
13
12
 
@@ -19,6 +18,10 @@ https://github.com/user-attachments/assets/47c2f734-5683-49d9-8aea-388c3a2bc16d
19
18
 
20
19
  https://github.com/user-attachments/assets/a3f69a9f-fb68-4580-a804-6c57d5807b9a
21
20
 
21
+ ## Development status
22
+
23
+ The Imaging Server Kit is being actively developed and is iterating rapidly. It is likely that there will be **compatibility-breaking changes** in future versions.
24
+
22
25
  ## Installation
23
26
 
24
27
  Install the `imaging-server-kit` package with `pip`:
@@ -35,6 +38,18 @@ cd imaging-server-kit
35
38
  pip install -e .
36
39
  ```
37
40
 
41
+ To use the **Napari-related functionalities**, you additionally have to install [`napari`](https://github.com/napari/napari) and [`napari-toolkit`](https://github.com/MIC-DKFZ/napari_toolkit) which are not included by default. Install the package with:
42
+
43
+ ```sh
44
+ pip install "imaging-server-kit[napari]"
45
+ ```
46
+
47
+ To use the **QuPath-related functionalities**, you additionally have to install [`qubalab>=0.2.0`](https://pypi.org/project/qubalab/#history), which is not included by default. Install the package with:
48
+
49
+ ```sh
50
+ pip install "imaging-server-kit[qupath]"
51
+ ```
52
+
38
53
  ## Getting started
39
54
 
40
55
  The documentation is available on [this page](https://imaging-server-kit.github.io/imaging-server-kit).
@@ -10,6 +10,5 @@ chapters:
10
10
  - file: sections/06_tiled
11
11
  - file: sections/07_server
12
12
  - file: sections/08_python
13
- - file: sections/09_docker
14
- - file: sections/10_types
15
- - file: sections/11_examples
13
+ - file: sections/09_layers
14
+ - file: sections/10_examples
@@ -12,13 +12,13 @@ Server Kit algorithms are versatile objects that allow you run computations in a
12
12
 
13
13
  For example, you can
14
14
 
15
- - [**Turn your algorithm into a web server**](./sections/07_server.md), connect to it and run computations from [QuPath](https://github.com/Imaging-Server-Kit/qupath-extension-serverkit), [Napari](https://github.com/Imaging-Server-Kit/napari-serverkit), or [Python](./sections/08_python) via HTTP requests.
15
+ - [**Turn your algorithm into a web server**](./sections/07_server.md), connect to it and run computations from [Napari](https://napari.org/stable/), [QuPath](https://qupath.github.io/), or [Python](./sections/08_python) via HTTP requests.
16
16
 
17
17
  <video width=512 controls loop autoplay>
18
- <source src="./_static/stardist_blobs.mp4" type="video/mp4">
18
+ <source src="./_static/cellpose_example.mp4" type="video/mp4">
19
19
  </video>
20
20
 
21
- - [**Generate a dock widget**](./sections/01_algorithm) to run your algorithm interactively in Napari.
21
+ - [**Generate a dock widget**](./sections/01_algorithm) to run your algorithm interactively in Napari or QuPath.
22
22
 
23
23
  <video width=512 controls loop autoplay>
24
24
  <source src="./_static/oripy_threshold.mp4" type="video/mp4">
@@ -36,9 +36,9 @@ For example, you can
36
36
  <source src="./_static/yolo-stream.mp4" type="video/webm">
37
37
  </video>
38
38
 
39
- On top of that, you can [**validate data**](./sections/08_python) passed as algorithm parameters, provide [**samples**](./sections/02_samples), and generate [**documentation**](./sections/03_metadata) for your algorithm that you can share with users.
39
+ On top of that, you can provide [**samples**](./sections/02_samples) and automatically generate a [**documentation**](./sections/03_metadata) page for your algorithm that you can share with users.
40
40
 
41
- This documentation will give you a conceptual overview of the package, and walk you through the steps to learn [how to create an algorithm](./sections/01_algorithm), and give you some [suggestions of use cases](./sections/11_examples).
41
+ This documentation will give you a conceptual overview of the package, and walk you through the steps to learn [how to create an algorithm](./sections/01_algorithm), and give you some [suggestions of use cases](./sections/10_examples).
42
42
 
43
43
  ## Contents
44
44
 
@@ -61,17 +61,17 @@ cd imaging-server-kit
61
61
  pip install -e .
62
62
  ```
63
63
 
64
- **Napari plugin**
65
-
66
- Install the [napari-serverkit](https://github.com/Imaging-Server-Kit/napari-serverkit) plugin with `pip` to enable all [Napari](https://napari.org/stable/)-related functionalities.
64
+ To use the **Napari-related functionalities**, you additionally have to install [`napari`](https://github.com/napari/napari) and [`napari-toolkit`](https://github.com/MIC-DKFZ/napari_toolkit) which are not included by default. Install the package with:
67
65
 
68
66
  ```sh
69
- pip install napari-serverkit
67
+ pip install "imaging-server-kit[napari]"
70
68
  ```
71
69
 
72
- **QuPath extention**
70
+ To use the **QuPath-related functionalities**, you additionally have to install [`qubalab>=0.2.0`](https://pypi.org/project/qubalab/#history), which is not included by default. Install the package with:
73
71
 
74
- To use the Imaging Server Kit in [QuPath](https://qupath.github.io/), follow the installation instructions at [qupath-extension-serverkit](https://github.com/Imaging-Server-Kit/qupath-extension-serverkit).
72
+ ```sh
73
+ pip install "imaging-server-kit[qupath]"
74
+ ```
75
75
 
76
76
  ## License
77
77
 
@@ -1,14 +1,6 @@
1
1
  # Getting started
2
2
 
3
- The following section will give you a first introduction to the Imaging Server Kit using a set of **interactive demos**.
4
-
5
- ## Prerequisites
6
-
7
- Make sure to have installed the required packages:
8
-
9
- ```
10
- pip install imaging-server-kit napari-serverkit
11
- ```
3
+ The following section will give you a first introduction to the Imaging Server Kit via **interactive demos**.
12
4
 
13
5
  ## Run the Napari demo
14
6
 
@@ -18,11 +10,11 @@ The Napari demo will give you a first idea of what the package can do. From a te
18
10
  serverkit demo napari
19
11
  ```
20
12
 
21
- This command should open a **Napari viewer** with the *Server Kit* plugin already loaded. In the *Algorithm* dropdown, you will see a list of available algorithms.
13
+ This command should open a **Napari viewer** with the *Imaging Server Kit* plugin already loaded. In the *Algorithm* dropdown, you will see a list of "demo" algorithms.
22
14
 
23
15
  ![Demo-Napari](../assets/demo_napari_screenshot.png)
24
16
 
25
- When you select an **algorithm**, the *Parameters* panel will update to display a list of tunable **parameters** for the algorithm.
17
+ When you select an **algorithm**, the *Parameters* panel will update to display a list of tunable **parameters** for this algorithm.
26
18
 
27
19
  Most algorithms require an input image. You can **load a sample image** from the *Samples* dropdown. Once you have loaded an image, you can **run** the algorithm and visualize the results in the Napari viewer.
28
20
 
@@ -51,10 +43,10 @@ This launches a web server on your local machine at http://localhost:8000. If yo
51
43
  While your server is running, you can connect to it directly from Napari. Open another terminal and run:
52
44
 
53
45
  ```
54
- napari -w napari-serverkit
46
+ napari -w imaging-server-kit
55
47
  ```
56
48
 
57
- This is equivalent to opening the plugin in Napari from `Plugins > Server Kit (Napari Server Kit)`.
49
+ This is equivalent to opening the plugin in Napari from `Plugins > Imaging Server Kit > Connect to server`.
58
50
 
59
51
  In the plugin panel, enter the server address (http://localhost:8000) and press *Connect*. The *Algorithm* dropdown will populate with the available algorithms. You can use them just like in the local case.
60
52
 
@@ -68,9 +60,23 @@ In this demo, both client and server run on your local machine, but keep in mind
68
60
 
69
61
  ### Connect from QuPath
70
62
 
71
- You can also use Server Kit algorithms direction from QuPath, for segmentation and object detection tasks. To try this out, follow the instructions in the [qupath-extension-serverkit](https://github.com/Imaging-Server-Kit/qupath-extension-serverkit) repository.
63
+ You can also use Imaging Server Kit algorithms direction from QuPath via [QuBaLab](https://github.com/qupath/qubalab), for segmentation and bounding box detection tasks. To try this out, you can run the command:
64
+
65
+ ```sh
66
+ serverkit qupath
67
+ ```
68
+
69
+ This will bring up a user interface similar to the dock widget you used in Napari, with an extra field for connecting to QuPath via Py4J. Next, in a QuPath project:
70
+
71
+ - Open an image, for example `blobs.tif`.
72
+ - Draw a rectangular annotation in a region of interest (or use `Ctrl+Shift+A` to select the whole image).
73
+ - Assign a class to this annotation via the QuPath `Annotations` menu, for example the class `Region`.
74
+
75
+ After that, start a **Py4J** gateway from QuPath via the [qupath-extension-py4j](https://github.com/qupath/qupath-extension-py4j) (you can specify a token and port if needed). Then, click `Connect to QuPath` in the Imaging Server Kit window. The `Annotation` dropdown should now be filled with annotation class names (e.g., `Region`).
76
+
77
+ Finally, with your server still active on http://localhost:8000, click on `Connect` to discover and use the algorithms available on that server. For this demonstration, you should be able to run a simple threshold on an image in QuPath!
72
78
 
73
- ![threshold-qupath](../assets/threshold_qupath.png)
79
+ ![threshold-qupath](../assets/threshold_qubalab.png)
74
80
 
75
81
  ## Next steps
76
82
 
@@ -12,26 +12,6 @@
12
12
  "In this section, we will cover the basics of how to create Server Kit algorithms."
13
13
  ]
14
14
  },
15
- {
16
- "cell_type": "markdown",
17
- "id": "2d1813a7",
18
- "metadata": {},
19
- "source": [
20
- "## Prerequisites\n",
21
- "\n",
22
- "Before continuing, make sure to have installed the required packages:"
23
- ]
24
- },
25
- {
26
- "cell_type": "code",
27
- "execution_count": null,
28
- "id": "05618c50",
29
- "metadata": {},
30
- "outputs": [],
31
- "source": [
32
- "!pip install imaging-server-kit napari-serverkit"
33
- ]
34
- },
35
15
  {
36
16
  "cell_type": "markdown",
37
17
  "id": "04caf48c",
@@ -181,10 +161,6 @@
181
161
  "\n",
182
162
  "![Screenshot](../assets/gaussian_result.png)\n",
183
163
  "\n",
184
- "```{note}\n",
185
- "`sk.to_napari()` will only be available if you have installed the [napari-serverkit](https://github.com/Imaging-Server-Kit/napari-serverkit) plugin.\n",
186
- "```\n",
187
- "\n",
188
164
  "At this stage, the algorithm works, however a few things are not optimal. For example, users could enter a negative value for sigma, which would raise an error. To fix this, we need to **annotate parameters**."
189
165
  ]
190
166
  },
@@ -229,7 +205,7 @@
229
205
  "- `step` (for UI sliders)\n",
230
206
  "- `name` (label next to the parameter)\n",
231
207
  "\n",
232
- "There are many more data layers available. For a full list, see: [Data layers](./10_types)\n",
208
+ "There are many more data layers available. For a full list, see: [Data layers](./09_layers)\n",
233
209
  "```\n",
234
210
  "\n",
235
211
  "While `parameters={}` is the most explicit and reliable annotation method, you can also use:\n",
@@ -363,7 +339,7 @@
363
339
  "\n",
364
340
  " # Return all annotated outputs\n",
365
341
  " return (\n",
366
- " sk.Image(blurred_image, name=\"Blurred\", meta={\"colormap\": \"viridis\"}),\n",
342
+ " sk.Image(blurred_image, name=\"Blurred\", colormap=\"viridis\"),\n",
367
343
  " sk.Mask(mask, name=\"Binary mask\"), \n",
368
344
  " sk.String(f\"Area fraction: {fract:.02f}\", name=\"Fraction of True pixels\"),\n",
369
345
  " )\n",
@@ -379,7 +355,7 @@
379
355
  "Notice that this algorithm \n",
380
356
  "\n",
381
357
  "- produces **several outputs** of different types: `sk.Image`, `sk.Mask`, `sk.String`.\n",
382
- "- includes **metadata** in the outputs; for example, `meta={\"colormap\": \"viridis\"}` controls the colormap used to display the image in Napari."
358
+ "- includes **metadata** in the outputs; for example, `colormap=\"viridis\"` is used to control the colormap used to display the image in Napari."
383
359
  ]
384
360
  },
385
361
  {
@@ -416,7 +392,7 @@
416
392
  "name": "python",
417
393
  "nbconvert_exporter": "python",
418
394
  "pygments_lexer": "ipython3",
419
- "version": "3.10.18"
395
+ "version": "3.13.14"
420
396
  }
421
397
  },
422
398
  "nbformat": 4,
@@ -98,7 +98,7 @@
98
98
  "name": "python",
99
99
  "nbconvert_exporter": "python",
100
100
  "pygments_lexer": "ipython3",
101
- "version": "3.10.18"
101
+ "version": "3.13.14"
102
102
  }
103
103
  },
104
104
  "nbformat": 4,
@@ -93,7 +93,7 @@
93
93
  "name": "python",
94
94
  "nbconvert_exporter": "python",
95
95
  "pygments_lexer": "ipython3",
96
- "version": "3.10.18"
96
+ "version": "3.13.14"
97
97
  }
98
98
  },
99
99
  "nbformat": 4,
@@ -106,7 +106,7 @@
106
106
  "name": "python",
107
107
  "nbconvert_exporter": "python",
108
108
  "pygments_lexer": "ipython3",
109
- "version": "3.10.17"
109
+ "version": "3.13.14"
110
110
  }
111
111
  },
112
112
  "nbformat": 4,
@@ -36,13 +36,15 @@
36
36
  "outputs": [],
37
37
  "source": [
38
38
  "import imaging_server_kit as sk\n",
39
+ "import numpy as np\n",
39
40
  "import time\n",
40
41
  "\n",
41
42
  "@sk.algorithm\n",
42
- "def threshold_algo(image):\n",
43
- " for threshold in range(0, 255, 20): # Progressively increase the threshold value\n",
43
+ "def threshold_algo(image, steps=20):\n",
44
+ " for k, threshold in enumerate(np.linspace(0, 255, steps)): # Progressively increase the threshold value\n",
44
45
  " mask = image > threshold\n",
45
46
  " yield sk.Mask(mask), sk.String(f\"Threshold: {threshold}\") # <- \"Stream\" the outputs\n",
47
+ " yield sk.Progress(k, max_val=steps) # <- Update the progress bar\n",
46
48
  " time.sleep(0.5)\n",
47
49
  "\n",
48
50
  "viewer = sk.to_napari(threshold_algo)\n",
@@ -104,7 +106,7 @@
104
106
  "id": "d8d1138d",
105
107
  "metadata": {},
106
108
  "source": [
107
- "In this example, the algorithm notifies the user that processing has started, then returns a segmentation mask, and finally prints out the final measurement."
109
+ "In this example, the algorithm notifies the user that processing has started, then yields a segmentation mask, and finally prints out the final measurement."
108
110
  ]
109
111
  },
110
112
  {
@@ -139,7 +141,7 @@
139
141
  "name": "python",
140
142
  "nbconvert_exporter": "python",
141
143
  "pygments_lexer": "ipython3",
142
- "version": "3.10.18"
144
+ "version": "3.13.14"
143
145
  }
144
146
  },
145
147
  "nbformat": 4,
@@ -7,19 +7,11 @@
7
7
  "source": [
8
8
  "# Tiled inference\n",
9
9
  "\n",
10
- "Tiled inference consists in **running an algorithm tile-by-tile** on individual subpatches (tiles) instead of the whole image at once. The results from each tiles are assembled to form the final result.\n",
10
+ "Tiled inference can be used to run image processing filters, segmentation, or detection algorithms tile-by-tile instead of on the whole input image at once. The processed tiles are progressively assembled to form the final result.\n",
11
11
  "\n",
12
- "Tiled inference can be useful in these contexts:\n",
12
+ "By default, this functionality is disabled; you can enable it by setting `tileable=True` when defining an algorithm.\n",
13
13
  "\n",
14
- "- The algorithm is **embarrassingly parallel** (Note: this is not the case for instance segmentation, for example).\n",
15
- "- Users need to see the results appear progressively (if needed, they can cancel the process before it finishes).\n",
16
- "- To apply a deep learning model with a fixed context window (input size) on images of varying sizes.\n",
17
- "\n",
18
- "All Server Kit algorithms are tileable. You can control the **tile size** (in pixels), **overlap** (fraction), processing **order** of the tiles (random or not), and the time delay introduced between processing of consecutive tiles. \n",
19
- "\n",
20
- "```{note}\n",
21
- "Tiled inference is an **experimental feature**. We aren't fully done implementing and testing it yet. Expect some improvements in the near future!\n",
22
- "```"
14
+ "When running an algiorithm tile-by-tile, you can adjust the **tile size** in pixels, the amount of **overlap** between tiles, and the **order** in which tiles are processed (random or not)."
23
15
  ]
24
16
  },
25
17
  {
@@ -41,7 +33,7 @@
41
33
  "source": [
42
34
  "import imaging_server_kit as sk\n",
43
35
  "\n",
44
- "@sk.algorithm\n",
36
+ "@sk.algorithm(tileable=True) # <- Set tileable=True\n",
45
37
  "def threshold_algo(image, threshold=128):\n",
46
38
  " mask = image > threshold\n",
47
39
  " return sk.Mask(mask)\n",
@@ -71,8 +63,7 @@
71
63
  "source": [
72
64
  "## Summary\n",
73
65
  "\n",
74
- "- You can run algorithms tile-by-tile on subparts of the algorithm inputs.\n",
75
- "- This is only meaningful for embarassingly parallel tasks.\n",
66
+ "- You can enable running an algorithm tile-by-tile by setting `tileable=True` in the algorithm definition.\n",
76
67
  "\n",
77
68
  "## Next steps\n",
78
69
  "\n",
@@ -81,7 +72,7 @@
81
72
  },
82
73
  {
83
74
  "cell_type": "markdown",
84
- "id": "06613872",
75
+ "id": "cc2ef706",
85
76
  "metadata": {},
86
77
  "source": []
87
78
  }
@@ -102,7 +93,7 @@
102
93
  "name": "python",
103
94
  "nbconvert_exporter": "python",
104
95
  "pygments_lexer": "ipython3",
105
- "version": "3.10.18"
96
+ "version": "3.13.14"
106
97
  }
107
98
  },
108
99
  "nbformat": 4,
@@ -2,11 +2,6 @@
2
2
 
3
3
  Any Imaging Server Kit algorithm can be **served as a web API** using a built-in [FastAPI](https://fastapi.tiangolo.com/) server. This turns algorithms into web servers that you can interact with from Napari, QuPath, or Python via HTTP requests.
4
4
 
5
- Serving an algorithm is particularly useful when:
6
-
7
- - You want to run computations on a remote machine and visualize the results on your local machine.
8
- - You want to use algorithms in **QuPath** via the `qupath-extension-serverkit` extension.
9
-
10
5
  ## Using `sk.serve`
11
6
 
12
7
  Let's consider the threshold algorithm once again. You can serve this algorithm by passing it to `sk.serve()`.
@@ -42,13 +37,17 @@ Once the server is running, you can connect to it from Napari, QuPath, or direct
42
37
 
43
38
  ### Connecting from Napari
44
39
 
45
- The [Napari Server Kit](https://github.com/Imaging-Server-Kit/napari-serverkit) plugin provides a widget for connecting to algorithm servers.
46
-
47
- To try it out, open a new terminal window, start Napari, and then open the plugin from `Plugins > Server Kit (Napari Server Kit)`. In the `Server URL` field, enter: http://localhost:8000, and press *Connect*. You should see your threshold algorithm listed, with all related functionalities (load samples, run algorithm, access documentation) available.
40
+ You can connect to algorithm servers from Napari via the menu `Plugins > Imaging Server Kit > Connect to server`. In the `Server URL` field, enter: http://localhost:8000, and press *Connect*. You should see your threshold algorithm listed, with all related functionalities (load samples, run algorithm, access documentation) available.
48
41
 
49
42
  ### Connecting from QuPath
50
43
 
51
- You can also connect to algorithm servers via QuPath through the [qupath-extension-serverkit](https://github.com/Imaging-Server-Kit/qupath-extension-serverkit) extension. The QuPath extension can handle compatible algorithm outputs, including segmentation masks, bounding boxes, vectors, points, and classification tasks.
44
+ You can also connect to algorithm servers and use algorithms via QuPath. From the terminal, run:
45
+
46
+ ```sh
47
+ serverkit qupath
48
+ ```
49
+
50
+ to bring up the QuPath connection panel. Algorithms compatible with QuPath include those that take a single image as input (interpreted as the QuPath image), and return segmentation masks or bounding boxes.
52
51
 
53
52
  ## Summary
54
53