shinestacker 0.3.1__tar.gz → 0.3.4__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.

Potentially problematic release.


This version of shinestacker might be problematic. Click here for more details.

Files changed (215) hide show
  1. shinestacker-0.3.4/.flake8 +8 -0
  2. shinestacker-0.3.4/.github/workflows/pylint.yml +28 -0
  3. shinestacker-0.3.4/.pylintrc +6 -0
  4. {shinestacker-0.3.1 → shinestacker-0.3.4}/CHANGELOG.md +38 -0
  5. shinestacker-0.3.4/MANIFEST.in +2 -0
  6. {shinestacker-0.3.1 → shinestacker-0.3.4}/PKG-INFO +12 -5
  7. {shinestacker-0.3.1 → shinestacker-0.3.4}/README.md +11 -4
  8. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/alignment.md +1 -1
  9. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/focus_stacking.md +2 -2
  10. shinestacker-0.3.4/docs/index.md +17 -0
  11. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/job.md +13 -0
  12. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/main.md +13 -23
  13. shinestacker-0.3.4/img/coffee.gif +0 -0
  14. shinestacker-0.3.4/img/coffee_stack.jpg +0 -0
  15. shinestacker-0.3.4/img/coins.gif +0 -0
  16. shinestacker-0.3.4/img/coins_stack.jpg +0 -0
  17. shinestacker-0.3.4/img/flies.gif +0 -0
  18. shinestacker-0.3.4/img/flies_stack.jpg +0 -0
  19. shinestacker-0.3.4/img/gui-project-run.png +0 -0
  20. shinestacker-0.3.4/img/gui-retouch.png +0 -0
  21. {shinestacker-0.3.1 → shinestacker-0.3.4}/pyproject.toml +6 -0
  22. shinestacker-0.3.4/requirements.txt +13 -0
  23. shinestacker-0.3.4/src/shinestacker/__init__.py +17 -0
  24. shinestacker-0.3.4/src/shinestacker/_version.py +1 -0
  25. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/__init__.py +3 -2
  26. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/align.py +102 -64
  27. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/balance.py +92 -46
  28. shinestacker-0.3.4/src/shinestacker/algorithms/base_stack_algo.py +42 -0
  29. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/core_utils.py +6 -6
  30. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/denoise.py +4 -1
  31. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/depth_map.py +28 -39
  32. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/exif.py +43 -38
  33. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/multilayer.py +48 -28
  34. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/noise_detection.py +36 -23
  35. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/pyramid.py +42 -42
  36. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/sharpen.py +1 -0
  37. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack.py +42 -41
  38. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack_framework.py +111 -65
  39. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/utils.py +12 -11
  40. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/vignetting.py +48 -22
  41. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/white_balance.py +1 -0
  42. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/about_dialog.py +6 -2
  43. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/app_config.py +1 -0
  44. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/gui_utils.py +20 -0
  45. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/help_menu.py +1 -0
  46. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/main.py +9 -18
  47. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/open_frames.py +11 -8
  48. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/project.py +5 -16
  49. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/retouch.py +5 -17
  50. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/__init__.py +2 -1
  51. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/config.py +1 -0
  52. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/constants.py +1 -0
  53. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/gui_constants.py +1 -0
  54. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/__init__.py +4 -3
  55. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/colors.py +4 -3
  56. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/core_utils.py +6 -6
  57. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/exceptions.py +3 -1
  58. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/framework.py +46 -32
  59. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/logging.py +9 -10
  60. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/action_config.py +267 -206
  61. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/actions_window.py +39 -32
  62. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/colors.py +1 -0
  63. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/gui_images.py +7 -3
  64. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/gui_logging.py +3 -2
  65. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/gui_run.py +53 -38
  66. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/main_window.py +69 -25
  67. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/new_project.py +35 -2
  68. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/project_converter.py +21 -20
  69. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/project_editor.py +45 -52
  70. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/project_model.py +15 -23
  71. shinestacker-0.3.4/src/shinestacker/retouch/base_filter.py +117 -0
  72. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/brush.py +1 -0
  73. shinestacker-0.3.4/src/shinestacker/retouch/brush_gradient.py +34 -0
  74. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/brush_preview.py +19 -16
  75. shinestacker-0.3.4/src/shinestacker/retouch/brush_tool.py +173 -0
  76. shinestacker-0.3.4/src/shinestacker/retouch/denoise_filter.py +57 -0
  77. shinestacker-0.3.4/src/shinestacker/retouch/display_manager.py +183 -0
  78. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/exif_data.py +3 -1
  79. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/file_loader.py +13 -9
  80. shinestacker-0.3.4/src/shinestacker/retouch/filter_manager.py +15 -0
  81. shinestacker-0.3.4/src/shinestacker/retouch/image_editor.py +201 -0
  82. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/image_editor_ui.py +41 -76
  83. shinestacker-0.3.4/src/shinestacker/retouch/image_filters.py +69 -0
  84. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/image_viewer.py +54 -44
  85. shinestacker-0.3.4/src/shinestacker/retouch/io_gui_handler.py +220 -0
  86. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/io_manager.py +11 -14
  87. shinestacker-0.3.4/src/shinestacker/retouch/layer_collection.py +174 -0
  88. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/shortcuts_help.py +1 -0
  89. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/undo_manager.py +7 -0
  90. shinestacker-0.3.4/src/shinestacker/retouch/unsharp_mask_filter.py +85 -0
  91. shinestacker-0.3.4/src/shinestacker/retouch/white_balance_filter.py +116 -0
  92. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/PKG-INFO +12 -5
  93. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/SOURCES.txt +17 -72
  94. shinestacker-0.3.1/.flake8 +0 -4
  95. shinestacker-0.3.1/docs/index.md +0 -23
  96. shinestacker-0.3.1/examples/balance-only.fsp +0 -1
  97. shinestacker-0.3.1/examples/complete-project.fsp +0 -1
  98. shinestacker-0.3.1/examples/focus-stack-1.ipynb +0 -163
  99. shinestacker-0.3.1/examples/focus-stack-2.ipynb +0 -174
  100. shinestacker-0.3.1/examples/input/img-jpg/0000.jpg +0 -0
  101. shinestacker-0.3.1/examples/input/img-jpg/0001.jpg +0 -0
  102. shinestacker-0.3.1/examples/input/img-jpg/0002.jpg +0 -0
  103. shinestacker-0.3.1/examples/input/img-jpg/0003.jpg +0 -0
  104. shinestacker-0.3.1/examples/input/img-jpg/0004.jpg +0 -0
  105. shinestacker-0.3.1/examples/input/img-jpg/0005.jpg +0 -0
  106. shinestacker-0.3.1/examples/input/img-noise/0001.jpg +0 -0
  107. shinestacker-0.3.1/examples/input/img-noise/0002.jpg +0 -0
  108. shinestacker-0.3.1/examples/input/img-noise/0003.jpg +0 -0
  109. shinestacker-0.3.1/examples/input/img-noise/0004.jpg +0 -0
  110. shinestacker-0.3.1/examples/input/img-noise/0005.jpg +0 -0
  111. shinestacker-0.3.1/examples/input/img-noise/0006.jpg +0 -0
  112. shinestacker-0.3.1/examples/input/img-tif/0000.tif +0 -0
  113. shinestacker-0.3.1/examples/input/img-tif/0001.tif +0 -0
  114. shinestacker-0.3.1/examples/input/img-tif/0002.tif +0 -0
  115. shinestacker-0.3.1/examples/input/img-tif/0003.tif +0 -0
  116. shinestacker-0.3.1/examples/input/img-tif/0004.tif +0 -0
  117. shinestacker-0.3.1/examples/input/img-tif/0005.tif +0 -0
  118. shinestacker-0.3.1/examples/input/img-vignetted/vig-0000.jpg +0 -0
  119. shinestacker-0.3.1/examples/input/img-vignetted/vig-0001.jpg +0 -0
  120. shinestacker-0.3.1/examples/input/img-vignetted/vig-0002.jpg +0 -0
  121. shinestacker-0.3.1/examples/input/img-vignetted/vig-0003.jpg +0 -0
  122. shinestacker-0.3.1/examples/stack-comparison.fsp +0 -1
  123. shinestacker-0.3.1/examples/stack-from-frames.fsp +0 -1
  124. shinestacker-0.3.1/examples/vignetting.fsp +0 -1
  125. shinestacker-0.3.1/img/flies.gif +0 -0
  126. shinestacker-0.3.1/img/flies_stack.jpg +0 -0
  127. shinestacker-0.3.1/img/gui-project-run.png +0 -0
  128. shinestacker-0.3.1/img/gui-retouch.png +0 -0
  129. shinestacker-0.3.1/src/shinestacker/__init__.py +0 -16
  130. shinestacker-0.3.1/src/shinestacker/_version.py +0 -1
  131. shinestacker-0.3.1/src/shinestacker/retouch/brush_controller.py +0 -57
  132. shinestacker-0.3.1/src/shinestacker/retouch/brush_gradient.py +0 -20
  133. shinestacker-0.3.1/src/shinestacker/retouch/image_editor.py +0 -561
  134. shinestacker-0.3.1/src/shinestacker/retouch/image_filters.py +0 -391
  135. shinestacker-0.3.1/src/shinestacker/retouch/layer_collection.py +0 -54
  136. shinestacker-0.3.1/tests/test-align-balance.ipynb +0 -282
  137. shinestacker-0.3.1/tests/test-align.ipynb +0 -242
  138. shinestacker-0.3.1/tests/test-balance.ipynb +0 -918
  139. shinestacker-0.3.1/tests/test-exif.ipynb +0 -121
  140. shinestacker-0.3.1/tests/test-job.ipynb +0 -79
  141. shinestacker-0.3.1/tests/test-logging.ipynb +0 -93
  142. shinestacker-0.3.1/tests/test-multilayer.ipynb +0 -72
  143. shinestacker-0.3.1/tests/test-noise-detection.ipynb +0 -110
  144. shinestacker-0.3.1/tests/test-stack.ipynb +0 -97
  145. shinestacker-0.3.1/tests/test-vignetting.ipynb +0 -154
  146. shinestacker-0.3.1/tests/test_0000_logging.py +0 -66
  147. shinestacker-0.3.1/tests/test_0001_colors.py +0 -32
  148. shinestacker-0.3.1/tests/test_0002_config.py +0 -60
  149. shinestacker-0.3.1/tests/test_0005_make_test_img.py +0 -18
  150. shinestacker-0.3.1/tests/test_0006_exceptions.py +0 -99
  151. shinestacker-0.3.1/tests/test_0010_job.py +0 -49
  152. shinestacker-0.3.1/tests/test_0011_core_utils.py +0 -105
  153. shinestacker-0.3.1/tests/test_0020_noise_detection.py +0 -62
  154. shinestacker-0.3.1/tests/test_0030_align.py +0 -74
  155. shinestacker-0.3.1/tests/test_0031_align_precision.py +0 -111
  156. shinestacker-0.3.1/tests/test_0032_align_methods.py +0 -68
  157. shinestacker-0.3.1/tests/test_0040_balance.py +0 -90
  158. shinestacker-0.3.1/tests/test_0050_align_balance.py +0 -59
  159. shinestacker-0.3.1/tests/test_0051_denoise.py +0 -34
  160. shinestacker-0.3.1/tests/test_0052_sharpen.py +0 -34
  161. shinestacker-0.3.1/tests/test_0053_white_balance.py +0 -37
  162. shinestacker-0.3.1/tests/test_0060_stack.py +0 -51
  163. shinestacker-0.3.1/tests/test_0061_depth_map.py +0 -84
  164. shinestacker-0.3.1/tests/test_0070_multilayer.py +0 -74
  165. shinestacker-0.3.1/tests/test_0080_exif.py +0 -220
  166. shinestacker-0.3.1/tests/test_0090_vignetting.py +0 -19
  167. shinestacker-0.3.1/tests/test_0091_vignetting_algo.py +0 -127
  168. shinestacker-0.3.1/tests/test_0100_layer_collection.py +0 -66
  169. shinestacker-0.3.1/tests/test_1000_brush_mask.py +0 -13
  170. shinestacker-0.3.1/tests/test_1010_gui.py +0 -42
  171. shinestacker-0.3.1/tests/test_1020_gui_images.py +0 -128
  172. shinestacker-0.3.1/tests/test_1030_gui_logging.py +0 -118
  173. shinestacker-0.3.1/tests/test_1040_action_config.py +0 -120
  174. shinestacker-0.3.1/tests/test_1050_project_converter.py +0 -157
  175. shinestacker-0.3.1/tests/test_1060_gui_run.py +0 -136
  176. shinestacker-0.3.1/tests/test_1070_project_editor.py +0 -180
  177. shinestacker-0.3.1/tests/test_1080_actions_window.py +0 -138
  178. {shinestacker-0.3.1 → shinestacker-0.3.4}/.coverage +0 -0
  179. {shinestacker-0.3.1 → shinestacker-0.3.4}/.coveragerc +0 -0
  180. {shinestacker-0.3.1 → shinestacker-0.3.4}/.github/workflows/ci-multiplatform.yml +0 -0
  181. {shinestacker-0.3.1 → shinestacker-0.3.4}/.github/workflows/pypi-publish.yml +0 -0
  182. {shinestacker-0.3.1 → shinestacker-0.3.4}/.github/workflows/release.yml +0 -0
  183. {shinestacker-0.3.1 → shinestacker-0.3.4}/.gitignore +0 -0
  184. {shinestacker-0.3.1 → shinestacker-0.3.4}/.readthedocs.yaml +0 -0
  185. {shinestacker-0.3.1 → shinestacker-0.3.4}/LICENSE +0 -0
  186. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/api.md +0 -0
  187. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/balancing.md +0 -0
  188. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/conf.py +0 -0
  189. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/gui.md +0 -0
  190. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/multilayer.md +0 -0
  191. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/noise.md +0 -0
  192. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/requirements.txt +0 -0
  193. {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/vignetting.md +0 -0
  194. {shinestacker-0.3.1 → shinestacker-0.3.4}/img/extreme-vignetting.jpg +0 -0
  195. {shinestacker-0.3.1 → shinestacker-0.3.4}/img/flow-diagram.png +0 -0
  196. {shinestacker-0.3.1 → shinestacker-0.3.4}/img/gui-finder.png +0 -0
  197. {shinestacker-0.3.1 → shinestacker-0.3.4}/img/gui-project-new.png +0 -0
  198. {shinestacker-0.3.1 → shinestacker-0.3.4}/scripts/build_release.py +0 -0
  199. {shinestacker-0.3.1 → shinestacker-0.3.4}/scripts/validate-tomli.py +0 -0
  200. {shinestacker-0.3.1 → shinestacker-0.3.4}/setup.cfg +0 -0
  201. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/__init__.py +0 -0
  202. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/__init__.py +0 -0
  203. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/focus_stack_bkg.png +0 -0
  204. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
  205. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
  206. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.png +0 -0
  207. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/close-round-line-icon.png +0 -0
  208. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/forward-button-icon.png +0 -0
  209. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/play-button-round-icon.png +0 -0
  210. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/plus-round-line-icon.png +0 -0
  211. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/__init__.py +0 -0
  212. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/dependency_links.txt +0 -0
  213. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/entry_points.txt +0 -0
  214. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/requires.txt +0 -0
  215. {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/top_level.txt +0 -0
@@ -0,0 +1,8 @@
1
+ [flake8]
2
+ exclude =
3
+ */.ipynb_checkpoints/*
4
+ src/shinestacker/_version.py
5
+ .venv
6
+ dist/*
7
+ max-line-length = 100
8
+ ignore = E402, W503, W504
@@ -0,0 +1,28 @@
1
+ name: Pylint Check
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, master ]
6
+ pull_request:
7
+ branches: [ main, master ]
8
+
9
+ jobs:
10
+ pylint:
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ contents: write
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - uses: Silleellie/pylint-github-action@v2.1
18
+ with:
19
+ lint-path: src
20
+ python-version: 3.9
21
+ requirements-path: requirements.txt
22
+ readme-path: README.md
23
+ pylintrc-path: .pylintrc
24
+ badge-text: PyLint
25
+ color-bad-score: red
26
+ color-ok-score: orange
27
+ color-good-score: yellow
28
+ color-perfect-score: brightgreen
@@ -0,0 +1,6 @@
1
+ [MASTER]
2
+ ignore-patterns =
3
+ _version\.py,
4
+ ignore-paths =
5
+ .*\.ipynb_checkpoints,
6
+ .*\/\.ipynb_checkpoints
@@ -4,6 +4,44 @@ This page reports the main releases only and the main changes therein.
4
4
 
5
5
  ---
6
6
 
7
+ ## [v0.3.4] - 2025-08-16
8
+ **Code consolidation and fixes**
9
+
10
+ ### Changes
11
+
12
+ * code consolidation with support of pylint code checking
13
+ * some bug fixes
14
+ * new project dialog shows the number of bunches, if selected
15
+ * updated sample images, examples and documentation
16
+
17
+ ---
18
+
19
+ ## [v0.3.3] - 2025-08-13
20
+ **Fixed PyPI distribution**
21
+
22
+ This release is equivalent to v0.3.2, but resolves a problem for PyPI distribution.
23
+
24
+ ### Changes
25
+
26
+ * examples and tests removed from PyPI distribution in order to fix file size limit
27
+
28
+ ---
29
+
30
+ ## [v0.3.2] - 2025-08-13
31
+ **Fixes and code refactoring**
32
+
33
+ ### Changes
34
+
35
+ * fixed ```from shinestacker import *```
36
+ * restored jupyter support and updated examples
37
+ * several bug fixes
38
+ * several code refactoring reduces interclass dependencies
39
+ * updated documentation
40
+ * added new sample images and project files
41
+ * examples removed from PyPI distribution
42
+
43
+ ---
44
+
7
45
  ## [v0.3.1] - 2025-08-12
8
46
  **Fixes and code refactoring**
9
47
 
@@ -0,0 +1,2 @@
1
+ prune examples
2
+ prune tests
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 0.3.1
3
+ Version: 0.3.4
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -36,18 +36,25 @@ Dynamic: license-file
36
36
  [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
37
37
  [![PyPI version](https://img.shields.io/pypi/v/shinestacker?color=success)](https://pypi.org/project/shinestacker/)
38
38
  [![Python Versions](https://img.shields.io/pypi/pyversions/shinestacker)](https://pypi.org/project/shinestacker/)
39
+ [![Qt Versions](https://img.shields.io/badge/Qt-6-blue.svg?&logo=Qt&logoWidth=18&logoColor=white)](https://www.qt.io/qt-for-python)
39
40
  [![codecov](https://codecov.io/github/lucalista/shinestacker/graph/badge.svg?token=Y5NKW6VH5G)](https://codecov.io/github/lucalista/shinestacker)
41
+ [![pylint](https://img.shields.io/badge/PyLint-9.98-yellow?logo=python&logoColor=white)](https://github.com/lucalista/shinestacker/blob/main/.github/workflows/pylint.yml)
40
42
  [![Documentation Status](https://readthedocs.org/projects/shinestacker/badge/?version=latest)](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
41
43
 
44
+
45
+
42
46
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
43
47
 
48
+ <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
49
+
50
+ <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
44
51
  > **Focus stacking** for microscopy, macro photography, and computational imaging
45
52
 
46
53
  ## Key Features
47
54
  - 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
48
55
  - 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
49
56
  - 🧩 **Modular Architecture**: Mix-and-match processing modules
50
- - 🖌️ **Non-Destructive Editing**: Save multilayer TIFFs for retouching
57
+ - 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
51
58
  - 📊 **Jupyter Integration**: Reproducible research notebooks
52
59
 
53
60
  ## Interactive GUI
@@ -58,13 +65,13 @@ The GUI has two main working areas:
58
65
 
59
66
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-project-run.png' width="600" referrerpolicy="no-referrer">
60
67
 
61
- * *Retouch*: interactive final refinements to final blended image from individual frames.
68
+ * *Retouch*: select interactively details from individual frames and apply final filters to the blended image.
62
69
 
63
70
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
64
71
 
65
- # Documentation
72
+ # Resources
66
73
 
67
- 📖 [Main documentation](https://github.com/lucalista/shinestacker/blob/main/docs/main.md) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
74
+ 🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
68
75
 
69
76
 
70
77
  # Credits
@@ -5,18 +5,25 @@
5
5
  [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
6
6
  [![PyPI version](https://img.shields.io/pypi/v/shinestacker?color=success)](https://pypi.org/project/shinestacker/)
7
7
  [![Python Versions](https://img.shields.io/pypi/pyversions/shinestacker)](https://pypi.org/project/shinestacker/)
8
+ [![Qt Versions](https://img.shields.io/badge/Qt-6-blue.svg?&logo=Qt&logoWidth=18&logoColor=white)](https://www.qt.io/qt-for-python)
8
9
  [![codecov](https://codecov.io/github/lucalista/shinestacker/graph/badge.svg?token=Y5NKW6VH5G)](https://codecov.io/github/lucalista/shinestacker)
10
+ [![pylint](https://img.shields.io/badge/PyLint-9.98-yellow?logo=python&logoColor=white)](https://github.com/lucalista/shinestacker/blob/main/.github/workflows/pylint.yml)
9
11
  [![Documentation Status](https://readthedocs.org/projects/shinestacker/badge/?version=latest)](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
10
12
 
13
+
14
+
11
15
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
12
16
 
17
+ <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
18
+
19
+ <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
13
20
  > **Focus stacking** for microscopy, macro photography, and computational imaging
14
21
 
15
22
  ## Key Features
16
23
  - 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
17
24
  - 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
18
25
  - 🧩 **Modular Architecture**: Mix-and-match processing modules
19
- - 🖌️ **Non-Destructive Editing**: Save multilayer TIFFs for retouching
26
+ - 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
20
27
  - 📊 **Jupyter Integration**: Reproducible research notebooks
21
28
 
22
29
  ## Interactive GUI
@@ -27,13 +34,13 @@ The GUI has two main working areas:
27
34
 
28
35
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-project-run.png' width="600" referrerpolicy="no-referrer">
29
36
 
30
- * *Retouch*: interactive final refinements to final blended image from individual frames.
37
+ * *Retouch*: select interactively details from individual frames and apply final filters to the blended image.
31
38
 
32
39
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
33
40
 
34
- # Documentation
41
+ # Resources
35
42
 
36
- 📖 [Main documentation](https://github.com/lucalista/shinestacker/blob/main/docs/main.md) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
43
+ 🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
37
44
 
38
45
 
39
46
  # Credits
@@ -79,7 +79,7 @@ alignment_config = {
79
79
  * ```refine_iters``` (optional, default: 100): refinement iterations. Used only if ```transform=ALIGN_RIGID```.
80
80
  * ```align_confidence``` (optional, default: 99.9): alignment algorithm confidence (%). Used only if ```transform=ALIGN_RIGID```.
81
81
  * ```max_iters``` (optional, default: 2000): maximum number of iterations. Used only if ```transform=ALIGN_HOMOGRAPHY```.
82
- * ```subsample``` (optional, default: 1): subsample image for faster alignment. Faster, but alignment could be less accurate.
82
+ * ```subsample``` (optional, default: 1): subsample image for faster alignment. Faster, but alignment could be less accurate. It can save time, in particular for large images.
83
83
  * ```fast_subsampling``` (optiona, default: ```False```): perform fast image subsampling without interpolation. Used if ```subsample``` is set to ```True```.
84
84
  * ```border_mode``` (optional, default: ```BORDER_REPLICATE_BLUR```): border mode. See [Adding borders to your images](https://docs.opencv.org/3.4/dc/da3/tutorial_copyMakeBorder.html) for more details. Possible values are:
85
85
  * ```BORDER_CONSTANT```: pad the image with a constant value. The border value is specified with the parameter ```border_value```.
@@ -10,7 +10,7 @@ Arguments for the constructor of ```FocusStack``` are:
10
10
  * ```output_path``` (optional): the subdirectory within ```working_path``` where aligned images are written. If not specified, it is equal to ```name```.
11
11
  * ```working_path```: the directory that contains input and output image subdirectories. If not specified, it is the same as ```job.working_path```.
12
12
  * ```exif_path``` (optional): if specified, EXIF data are copied to the output file from file in the specified directory. If not specified, it is the source directory used as input for the first action. If set equal to ```''``` no EXIF data is saved.
13
- * ```denoise``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
13
+ * ```denoise_amount``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
14
14
  * ```prefix``` (optional): if specified, the specified string is pre-pended to the file name. May be useful if more algorithms are ran, and different file names are used for the output of different algorithms.
15
15
  * ```enabled``` (optional, default: ``True```): allows to switch on and off this module.
16
16
 
@@ -28,7 +28,7 @@ Arguments for the constructor of ```FocusStackBunch``` are:
28
28
  * ```exif_path``` (optional): if specified, EXIF data are copied to the output file from file in the specified directory. If not specified, it is the source directory used as * ```frames``` (optional, default: 10): the number of frames in each bunch that are stacked together.
29
29
  * ```frames``` (optional, default: 10): the number of frames that are fused together.
30
30
  * ```overlap``` (optional, default: 0): the number of overlapping frames between a bunch and the following one.
31
- * ```denoise``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
31
+ * ```denoise_amount``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
32
32
  * ```prefix``` (optional): if specified, the specified string is pre-pended to the file name. May be useful if more algorithms are ran, and different file names are used for the output of different algorithms.
33
33
  * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
34
34
 
@@ -0,0 +1,17 @@
1
+ # Shine Stacker
2
+
3
+ ## Focus Stacking Processing Framework and GUI
4
+
5
+ ```{toctree}
6
+ :maxdepth: 2
7
+ :caption: Content
8
+
9
+ main.md
10
+ gui.md
11
+ job.md
12
+ alignment.md
13
+ balancing.md
14
+ focus_stacking.md
15
+ multilayer.md
16
+ noise.md
17
+ vignetting.md
@@ -2,6 +2,19 @@
2
2
 
3
3
  Create a job, then schedule the desired actions in a job, then run the job.
4
4
 
5
+ Quick start example:
6
+
7
+ ```python
8
+ from shinestacker import *
9
+
10
+ job = StackJob("job", "E:/focus_stacking/project_directory/", input_path="tiff_images")
11
+ job.add_action(CombinedActions("align", actions=[AlignFrames(), BalanceFrames()]))
12
+ job.add_action(FocusStackBunch("batches", PyramidStack(), frames=12, overlap=2))
13
+ job.add_action(FocusStack("stack", PyramidStack(), prefix='pyram_'))
14
+ job.add_action(FocusStack("stack", DepthMapStack(), prefix='dmap_'))
15
+ job.run()
16
+ ```
17
+
5
18
  ```python
6
19
  job = StackJob(name, working_path [, input_path])
7
20
  ```
@@ -2,13 +2,11 @@
2
2
 
3
3
  ## Focus Stacking Processing Framework and GUI
4
4
 
5
- [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
6
- [![PyPI version](https://img.shields.io/pypi/v/shinestacker?color=success)](https://pypi.org/project/shinestacker/)
7
- [![Python Versions](https://img.shields.io/pypi/pyversions/shinestacker)](https://pypi.org/project/shinestacker/)
8
- [![codecov](https://codecov.io/github/lucalista/shinestacker/graph/badge.svg?token=Y5NKW6VH5G)](https://codecov.io/github/lucalista/shinestacker)
9
- [![Documentation Status](https://readthedocs.org/projects/shinestacker/badge/?version=latest)](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
5
+ <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
10
6
 
11
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400">
7
+ <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
8
+
9
+ <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
12
10
 
13
11
  > **Focus stacking** for microscopy, macro photography, and computational imaging
14
12
 
@@ -36,8 +34,8 @@ job.run()
36
34
  Clone the pagkage from GitHub:
37
35
 
38
36
  ```bash
39
- git clone https://github.com/lucalista/focusstack.git
40
- cd focusstack
37
+ git clone https://github.com/lucalista/shinestacker.git
38
+ cd shinestacker
41
39
  pip install -e .
42
40
  ```
43
41
 
@@ -45,7 +43,7 @@ pip install -e .
45
43
  Launch GUI
46
44
 
47
45
  ```bash
48
- focusstack
46
+ shinestacker
49
47
  ```
50
48
 
51
49
  Follow [GUI guide](gui.md) for batch processing and retouching.
@@ -54,21 +52,13 @@ Follow [GUI guide](gui.md) for batch processing and retouching.
54
52
  ## Advanced Processing Pipeline
55
53
 
56
54
  ```python
57
- from shinestacker.algorithms import *
58
-
59
- job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
60
- job.add_action(NoiseDetection())
61
- job.run()
55
+ from shinestacker import *
62
56
 
63
- job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
64
- job.add_action(CombinedActions("align",
65
- [MaskNoise(),Vignetting(), AlignFrames(),
66
- BalanceFrames(mask_size=0.9,
67
- intensity_interval={'min': 150, 'max': 65385})]))
68
- job.add_action(FocusStackBunch("bunches", PyramidStack(), frames=10, overlap=2, denoise=0.8))
69
- job.add_action(FocusStack("stack", PyramidStack(), prefix='pyramid_', denoise=0.8))
70
- job.add_action(FocusStack("stack", DepthMapStack(), input_path='batches', prefix='depthmap_', denoise=0.8))
71
- job.add_action(MultiLayer("multilayer", input_path=['batches', 'stack']))
57
+ job = StackJob("job", "E:/focus_stacking/project_directory/", input_path="tiff_images")
58
+ job.add_action(CombinedActions("align", actions=[AlignFrames(), BalanceFrames()]))
59
+ job.add_action(FocusStackBunch("batches", PyramidStack(), frames=12, overlap=2))
60
+ job.add_action(FocusStack("stack", PyramidStack(), prefix='pyram_'))
61
+ job.add_action(FocusStack("stack", DepthMapStack(), prefix='dmap_'))
72
62
  job.run()
73
63
  ```
74
64
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -47,6 +47,12 @@ shinestacker = "shinestacker.app.main:main"
47
47
  shinestacker-project = "shinestacker.app.project:main"
48
48
  shinestacker-retouch = "shinestacker.app.retouch:main"
49
49
 
50
+ [tool.setuptools.exclude-package-data]
51
+ "*" = [
52
+ "examples/*",
53
+ "tests/*"
54
+ ]
55
+
50
56
  [tool.setuptools]
51
57
  package-dir = {"" = "src"}
52
58
  packages = [
@@ -0,0 +1,13 @@
1
+ matplotlib
2
+ matplotlib
3
+ imagecodecs
4
+ jsonpickle
5
+ numpy
6
+ opencv_python
7
+ pillow
8
+ psdtags
9
+ PySide6
10
+ scipy
11
+ tifffile
12
+ tqdm
13
+ setuptools-scm
@@ -0,0 +1,17 @@
1
+ # flake8: noqa F401 F403
2
+ # pylint: disable=C0114, E0401
3
+ from ._version import __version__
4
+ from . import config
5
+ from . import core
6
+ from . import algorithms
7
+ from .config import __all__ as config_all
8
+ from .core import __all__ as core_all
9
+ from .algorithms import __all__ as algorithms_all
10
+ from .config import *
11
+ from .core import *
12
+ from .algorithms import *
13
+
14
+ __all__ = ['__version__']
15
+ __all__ += config_all
16
+ __all__ += core_all
17
+ __all__ += algorithms_all
@@ -0,0 +1 @@
1
+ __version__ = '0.3.4'
@@ -1,4 +1,6 @@
1
1
  # flake8: noqa F401
2
+ # pylint: disable=C0114
3
+ import logging
2
4
  from .. config.constants import constants
3
5
  from .stack_framework import StackJob, CombinedActions
4
6
  from .align import AlignFrames
@@ -9,11 +11,10 @@ from .pyramid import PyramidStack
9
11
  from .multilayer import MultiLayer
10
12
  from .noise_detection import NoiseDetection, MaskNoise
11
13
  from .vignetting import Vignetting
12
- import logging
13
14
  logger = logging.getLogger(__name__)
14
15
  logger.addHandler(logging.NullHandler())
15
16
 
16
17
  __all__ = [
17
18
  'StackJob', 'CombinedActions', 'AlignFrames', 'BalanceFrames', 'FocusStackBunch', 'FocusStack',
18
19
  'DepthMapStack', 'PyramidStack', 'MultiLayer', 'NoiseDetection', 'MaskNoise', 'Vignetting'
19
- ]
20
+ ]