shinestacker 1.8.0__tar.gz → 1.9.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.

Potentially problematic release.


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

Files changed (174) hide show
  1. {shinestacker-1.8.0 → shinestacker-1.9.0}/CHANGELOG.md +39 -0
  2. {shinestacker-1.8.0/src/shinestacker.egg-info → shinestacker-1.9.0}/PKG-INFO +37 -39
  3. {shinestacker-1.8.0 → shinestacker-1.9.0}/README.md +36 -38
  4. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/alignment.md +6 -1
  5. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/focus_stacking.md +4 -0
  6. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/gui.md +13 -13
  7. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/job.md +3 -1
  8. shinestacker-1.9.0/docs/macos-install.md +19 -0
  9. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/main.md +2 -1
  10. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/noise.md +3 -3
  11. shinestacker-1.9.0/src/shinestacker/_version.py +1 -0
  12. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/align.py +184 -80
  13. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/align_auto.py +13 -11
  14. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/align_parallel.py +41 -16
  15. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/base_stack_algo.py +1 -1
  16. shinestacker-1.9.0/src/shinestacker/algorithms/exif.py +486 -0
  17. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/multilayer.py +6 -4
  18. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/noise_detection.py +10 -8
  19. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/pyramid_tiles.py +1 -1
  20. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/stack.py +25 -13
  21. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/stack_framework.py +16 -11
  22. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/utils.py +18 -2
  23. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/vignetting.py +16 -3
  24. shinestacker-1.9.0/src/shinestacker/app/settings_dialog.py +338 -0
  25. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/config/constants.py +10 -6
  26. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/config/settings.py +25 -7
  27. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/core/exceptions.py +1 -1
  28. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/core/framework.py +2 -2
  29. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/action_config.py +23 -20
  30. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/action_config_dialog.py +38 -21
  31. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/folder_file_selection.py +3 -2
  32. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/gui_images.py +27 -3
  33. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/gui_run.py +2 -2
  34. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/new_project.py +23 -12
  35. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/project_controller.py +13 -6
  36. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/project_editor.py +12 -2
  37. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/project_model.py +4 -4
  38. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/exif_data.py +3 -0
  39. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/file_loader.py +3 -3
  40. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/io_gui_handler.py +4 -4
  41. {shinestacker-1.8.0 → shinestacker-1.9.0/src/shinestacker.egg-info}/PKG-INFO +37 -39
  42. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker.egg-info/SOURCES.txt +1 -2
  43. shinestacker-1.8.0/img/gui-finder.png +0 -0
  44. shinestacker-1.8.0/shinestacker-inno-setup.iss +0 -68
  45. shinestacker-1.8.0/src/shinestacker/_version.py +0 -1
  46. shinestacker-1.8.0/src/shinestacker/algorithms/exif.py +0 -240
  47. shinestacker-1.8.0/src/shinestacker/app/settings_dialog.py +0 -214
  48. {shinestacker-1.8.0 → shinestacker-1.9.0}/.coveragerc +0 -0
  49. {shinestacker-1.8.0 → shinestacker-1.9.0}/.flake8 +0 -0
  50. {shinestacker-1.8.0 → shinestacker-1.9.0}/.github/workflows/ci-multiplatform.yml +0 -0
  51. {shinestacker-1.8.0 → shinestacker-1.9.0}/.github/workflows/pylint.yml +0 -0
  52. {shinestacker-1.8.0 → shinestacker-1.9.0}/.github/workflows/pypi-publish.yml +0 -0
  53. {shinestacker-1.8.0 → shinestacker-1.9.0}/.github/workflows/release.yml +0 -0
  54. {shinestacker-1.8.0 → shinestacker-1.9.0}/.gitignore +0 -0
  55. {shinestacker-1.8.0 → shinestacker-1.9.0}/.pylintrc +0 -0
  56. {shinestacker-1.8.0 → shinestacker-1.9.0}/.readthedocs.yaml +0 -0
  57. {shinestacker-1.8.0 → shinestacker-1.9.0}/LICENSE +0 -0
  58. {shinestacker-1.8.0 → shinestacker-1.9.0}/MANIFEST.in +0 -0
  59. {shinestacker-1.8.0 → shinestacker-1.9.0}/THIRD_PARTY_LICENSES.txt +0 -0
  60. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/api.md +0 -0
  61. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/balancing.md +0 -0
  62. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/conf.py +0 -0
  63. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/index.md +0 -0
  64. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/multilayer.md +0 -0
  65. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/requirements.txt +0 -0
  66. {shinestacker-1.8.0 → shinestacker-1.9.0}/docs/vignetting.md +0 -0
  67. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/coffee.gif +0 -0
  68. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/coffee_stack.jpg +0 -0
  69. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/extreme-vignetting.jpg +0 -0
  70. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/flies.gif +0 -0
  71. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/flies_stack.jpg +0 -0
  72. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/flow-diagram.png +0 -0
  73. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/gui-project-new.png +0 -0
  74. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/gui-project-run.png +0 -0
  75. {shinestacker-1.8.0 → shinestacker-1.9.0}/img/gui-retouch.png +0 -0
  76. {shinestacker-1.8.0 → shinestacker-1.9.0}/index.html +0 -0
  77. {shinestacker-1.8.0 → shinestacker-1.9.0}/pyproject.toml +0 -0
  78. {shinestacker-1.8.0 → shinestacker-1.9.0}/requirements.txt +0 -0
  79. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/build_release.py +0 -0
  80. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/create_macos_icon.py +0 -0
  81. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/git-rev-list.sh +0 -0
  82. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/hooks/hook-IPython.py +0 -0
  83. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/hooks/hook-PySide6.py +0 -0
  84. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/hooks/hook-opencv.py +0 -0
  85. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/hooks/hook-tests.py +0 -0
  86. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/scan_imports.py +0 -0
  87. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/shinestacker-inno-setup.iss +0 -0
  88. {shinestacker-1.8.0 → shinestacker-1.9.0}/scripts/validate-tomli.py +0 -0
  89. {shinestacker-1.8.0 → shinestacker-1.9.0}/setup.cfg +0 -0
  90. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/__init__.py +0 -0
  91. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/__init__.py +0 -0
  92. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/balance.py +0 -0
  93. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/corrections.py +0 -0
  94. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/denoise.py +0 -0
  95. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/depth_map.py +0 -0
  96. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/pyramid.py +0 -0
  97. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/pyramid_auto.py +0 -0
  98. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/sharpen.py +0 -0
  99. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/algorithms/white_balance.py +0 -0
  100. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/__init__.py +0 -0
  101. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/about_dialog.py +0 -0
  102. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/args_parser_opts.py +0 -0
  103. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/gui_utils.py +0 -0
  104. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/help_menu.py +0 -0
  105. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/main.py +0 -0
  106. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/open_frames.py +0 -0
  107. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/project.py +0 -0
  108. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/app/retouch.py +0 -0
  109. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/config/__init__.py +0 -0
  110. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/config/app_config.py +0 -0
  111. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/config/config.py +0 -0
  112. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/config/gui_constants.py +0 -0
  113. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/core/__init__.py +0 -0
  114. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/core/colors.py +0 -0
  115. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/core/core_utils.py +0 -0
  116. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/core/logging.py +0 -0
  117. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/__init__.py +0 -0
  118. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/base_form_dialog.py +0 -0
  119. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/colors.py +0 -0
  120. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/config_dialog.py +0 -0
  121. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/flow_layout.py +0 -0
  122. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/gui_logging.py +0 -0
  123. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
  124. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
  125. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/ico/shinestacker.png +0 -0
  126. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/ico/shinestacker.svg +0 -0
  127. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/dark/close-round-line-icon.png +0 -0
  128. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/dark/forward-button-icon.png +0 -0
  129. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/dark/play-button-round-icon.png +0 -0
  130. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/dark/plus-round-line-icon.png +0 -0
  131. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/dark/shinestacker_bkg.png +0 -0
  132. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/light/close-round-line-icon.png +0 -0
  133. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/light/forward-button-icon.png +0 -0
  134. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/light/play-button-round-icon.png +0 -0
  135. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/light/plus-round-line-icon.png +0 -0
  136. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/img/light/shinestacker_bkg.png +0 -0
  137. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/main_window.py +0 -0
  138. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/menu_manager.py +0 -0
  139. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/project_converter.py +0 -0
  140. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/recent_file_manager.py +0 -0
  141. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/select_path_widget.py +0 -0
  142. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/sys_mon.py +0 -0
  143. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/tab_widget.py +0 -0
  144. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/gui/time_progress_bar.py +0 -0
  145. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/__init__.py +0 -0
  146. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/adjustments.py +0 -0
  147. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/base_filter.py +0 -0
  148. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/brush.py +0 -0
  149. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/brush_gradient.py +0 -0
  150. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/brush_preview.py +0 -0
  151. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/brush_tool.py +0 -0
  152. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/denoise_filter.py +0 -0
  153. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/display_manager.py +0 -0
  154. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/filter_manager.py +0 -0
  155. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/icon_container.py +0 -0
  156. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/image_editor_ui.py +0 -0
  157. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/image_view_status.py +0 -0
  158. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/image_viewer.py +0 -0
  159. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/io_threads.py +0 -0
  160. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/layer_collection.py +0 -0
  161. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/overlaid_view.py +0 -0
  162. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/paint_area_manager.py +0 -0
  163. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/shortcuts_help.py +0 -0
  164. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/sidebyside_view.py +0 -0
  165. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/transformation_manager.py +0 -0
  166. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/undo_manager.py +0 -0
  167. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/unsharp_mask_filter.py +0 -0
  168. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/view_strategy.py +0 -0
  169. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/vignetting_filter.py +0 -0
  170. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker/retouch/white_balance_filter.py +0 -0
  171. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker.egg-info/dependency_links.txt +0 -0
  172. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker.egg-info/entry_points.txt +0 -0
  173. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker.egg-info/requires.txt +0 -0
  174. {shinestacker-1.8.0 → shinestacker-1.9.0}/src/shinestacker.egg-info/top_level.txt +0 -0
@@ -2,6 +2,45 @@
2
2
 
3
3
  This page reports the main releases only and the main changes therein.
4
4
 
5
+
6
+ ## [v1.9.0] - 2025-10-19
7
+ ** Added PNG format support and EXIF failure fix**
8
+
9
+ ### Added
10
+ - support of images in PNG format, both in 8 bit and 16 bit depth. Note: EXIF data are not supported for 16 bit PNG because of limitations in the PIL and Open CV python libraries.
11
+
12
+ ### Fixed
13
+ - if saving EXIF data fails, a warning is issued instead of stopping the run
14
+
15
+ -----
16
+
17
+
18
+ ## [v1.8.1] - 2025-10-16
19
+ ** Alignment stability and performance improvements **
20
+
21
+ ### Added
22
+ - optional alignment algorithm based on phase correlation as fallback when no feature match is found
23
+ - retry limits in parallel alignment, determined by new configurable parameter delta_max
24
+ - new configurable parameters in persistent default settings
25
+
26
+ ### Fixed
27
+ - reference frame indexing if sequential processing is applied as fallback from multithread run
28
+ - job configuration dialog failure if input is aready selected
29
+ - preview thumbnail failure for very large images
30
+ - minor inaccuracies in logger messages
31
+ - minor GUI issues
32
+ - computations for vignetting summary plot
33
+
34
+ ### Changed
35
+ - improved robustness of alignment strategy for poorly focused images
36
+ - better tuning of parallel frame alignment
37
+ - consistent handling of noise map output folders
38
+ - improved naming scheme for wizard-generated projects
39
+ - more reliable default settings persistency
40
+ - code refactoring and cleanup
41
+
42
+ -----
43
+
5
44
  ## [v1.8.0] - 2025-10-08
6
45
  ** Minor improvements and accessibility fix **
7
46
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 1.8.0
3
+ Version: 1.9.0
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -30,11 +30,9 @@ Provides-Extra: dev
30
30
  Requires-Dist: pytest; extra == "dev"
31
31
  Dynamic: license-file
32
32
 
33
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
34
-
35
33
  # Shine Stacker
36
34
 
37
- ## Focus Stacking Processing Framework and GUI
35
+ Focus Stacking Processing Framework and GUI designed for macro photographers, microscopists, and researchers who need precise control and reproducible stacking results.
38
36
 
39
37
  [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
40
38
  [![PyPI version](https://img.shields.io/pypi/v/shinestacker?color=success)](https://pypi.org/project/shinestacker/)
@@ -45,60 +43,55 @@ Dynamic: license-file
45
43
  [![Documentation Status](https://readthedocs.org/projects/shinestacker/badge/?version=latest)](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
46
44
  [![License: LGPL v3](https://img.shields.io/badge/License-LGPL_v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)
47
45
  [![PyPI Downloads](https://static.pepy.tech/badge/shinestacker)](https://pepy.tech/projects/shinestacker)
48
-
49
- <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">
50
-
51
- <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">
52
-
53
- > **Focus stacking** for microscopy, macro photography, and computational imaging
46
+ <center><img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo"></center>
54
47
 
55
48
  ## Key Features
56
- - 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
57
- - 🧩 **Modular Architecture**: Mix-and-match processing modules
58
- - 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
59
- - 📊 **Jupyter Integration**: Image processing python notebooks
49
+ - 🪟 **Cross-Platform GUI**: Native app built with Qt6, available for Windows, macOS, and Linux.
50
+ - 🚀 **Batch Processing**: Automatically align, balance, and stack hundreds of images — perfect for macro or microscopy datasets.
51
+ - 🧩 **Modular Architecture**: Combine configurable modules for alignment, normalization, and blending to build custom workflows.
52
+ - 🖌️ **Retouch Editor**: Interactively refine your stacked image by painting in details from individual frames.
53
+ - 📊 **Jupyter & Python Integration**: Use Shine Stacker as a library inside your Python or Jupyter workflows.
54
+
55
+ <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">
60
56
 
61
57
  ## Interactive GUI
62
58
 
63
- The GUI has two main working areas:
59
+ The graphical interface makes complex stacking tasks simple:
60
+ - **Project View** – Configure, preview, and run stacking workflows with optional intermediate results.
61
+ - **Retouch View** – Manually refine the final image by blending details from selected frames and applying filters.
64
62
 
65
- * *Project*: manage and run focus stacking workflows in a flexible and configurable way, with optional intermediate batch stacking.
63
+ Ideal for users who want the power of scripting and the comfort of a modern UI.
66
64
 
67
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-project-run.png' width="600" referrerpolicy="no-referrer">
65
+ <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">
68
66
 
69
- * *Retouch*: select interactively details from individual frames and apply final filters to the blended image.
67
+ ## Get Started
70
68
 
71
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
69
+ - 📦 [Install via PyPI](https://pypi.org/project/shinestacker/)
70
+ - 💻 [Run the GUI app](https://shinestacker.readthedocs.io/en/latest/gui.html)
71
+ - 🧠 [Reference](https://shinestacker.readthedocs.io/en/)
72
+ - 🐛 [Report an issue](https://github.com/lucalista/shinestacker/issues)
72
73
 
73
74
  ## Resources
74
75
 
75
76
  🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
76
77
 
77
- ## Note for macOS users
78
-
79
- **The following note is only relevant if you download the application as compressed archive from the [release page](https://github.com/lucalista/shinestacker/releases).**
78
+ ## Installation
80
79
 
81
- The macOS system security protection prevent to run applications downloaded from the web that come from developers that don't hold an Apple Developer Certificate.
80
+ See the [main documentation](https://github.com/lucalista/shinestacker/blob/main/docs/main.md) for detailed installation instructions.
82
81
 
83
- In order to prevent this, follow the instructions below:
82
+ **Platform notes:**
83
+ - **Windows:** If you download the installer or ZIP archive, you may need to whitelist the app in your antivirus software.
84
+ - **macOS:** See the [installation note for macOS users](https://github.com/lucalista/shinestacker/blob/main/docs/macos-install.md).
84
85
 
85
- 1. Download the compressed archive ```shinestacker-macos.tar.gz``` in your ```Download``` folder.
86
- 2. Double-click the archive to uncompress it. You will find a new folder ```shinestacker```.
87
- 3. Open a terminal (*Applications > Utilities > Terminal*)
88
- 4. Type the folliwng command on the terminal (assuming you installed the app from the ```dmg``` image under ```Applications```):
89
- ```bash
90
- xattr -cr /Applications/shinestacker/shinestacker.app
91
- ```
92
- 5. Now you can double-click the Sine Stacker icon app and it should run.
93
86
 
94
- macOS adds a quarantine flag to all files downloaded from the internet. The above command removes that flag while preserving all other application functionality.
87
+ ## Acknowledgements & References
95
88
 
96
- ## Credits
97
-
98
- The first version of the core focus stack algorithm was initially inspired by the [Laplacian pyramids method](https://github.com/sjawhar/focus-stacking) implementation by Sami Jawhar that was used under permission of the author. The implementation in the latest releases was rewritten from the original code.
99
-
100
- ## Resources
89
+ The first version of the core focus stack algorithm was inspired by the
90
+ [Laplacian pyramids method](https://github.com/sjawhar/focus-stacking) implementation
91
+ by Sami Jawhar, used under permission. The implementation in the latest releases
92
+ was rewritten from the original code.
101
93
 
94
+ Key references:
102
95
  * [Pyramid Methods in Image Processing](https://www.researchgate.net/publication/246727904_Pyramid_Methods_in_Image_Processing), E. H. Adelson, C. H. Anderson, J. R. Bergen, P. J. Burt, J. M. Ogden, RCA Engineer, 29-6, Nov/Dec 1984
103
96
  Pyramid methods in image processing
104
97
  * [A Multi-focus Image Fusion Method Based on Laplacian Pyramid](http://www.jcomputers.us/vol6/jcp0612-07.pdf), Wencheng Wang, Faliang Chang, Journal of Computers 6 (12), 2559, December 2011
@@ -108,13 +101,18 @@ Pyramid methods in image processing
108
101
  <img src="https://www.gnu.org/graphics/lgplv3-147x51.png" alt="LGPL 3 logo">
109
102
 
110
103
  - **Code**: The software is provided as is under the [GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html). See [LICENSE](https://github.com/lucalista/shinestacker/blob/main/LICENSE) for details.
111
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
112
104
 
113
105
  - **Logo**: The Shine Stacker logo was designed by [Alessandro Lista](https://linktr.ee/alelista). Copyright © Alessandro Lista. All rights reserved. The logo is not covered by the LGPL-3.0 license of this project.
114
106
 
115
107
  ## Attribution request
108
+
116
109
  📸 If you publish images created with Shine Stacker, please consider adding a note such as:
117
110
 
118
111
  *Created with Shine Stacker – https://github.com/lucalista/shinestacker*
119
112
 
120
113
  This is not mandatory, but highly appreciated.
114
+
115
+ ---
116
+ > Developed and maintained by [Luca Lista](https://github.com/lucalista).
117
+ > 💡 Contributions, feedback, and feature suggestions are warmly welcome.
118
+ > If you enjoy Shine Stacker, consider giving it a ⭐️ on GitHub — it really helps visibility!
@@ -1,8 +1,6 @@
1
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
2
-
3
1
  # Shine Stacker
4
2
 
5
- ## Focus Stacking Processing Framework and GUI
3
+ Focus Stacking Processing Framework and GUI designed for macro photographers, microscopists, and researchers who need precise control and reproducible stacking results.
6
4
 
7
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)
8
6
  [![PyPI version](https://img.shields.io/pypi/v/shinestacker?color=success)](https://pypi.org/project/shinestacker/)
@@ -13,60 +11,55 @@
13
11
  [![Documentation Status](https://readthedocs.org/projects/shinestacker/badge/?version=latest)](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
14
12
  [![License: LGPL v3](https://img.shields.io/badge/License-LGPL_v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)
15
13
  [![PyPI Downloads](https://static.pepy.tech/badge/shinestacker)](https://pepy.tech/projects/shinestacker)
16
-
17
- <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">
18
-
19
- <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">
20
-
21
- > **Focus stacking** for microscopy, macro photography, and computational imaging
14
+ <center><img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo"></center>
22
15
 
23
16
  ## Key Features
24
- - 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
25
- - 🧩 **Modular Architecture**: Mix-and-match processing modules
26
- - 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
27
- - 📊 **Jupyter Integration**: Image processing python notebooks
17
+ - 🪟 **Cross-Platform GUI**: Native app built with Qt6, available for Windows, macOS, and Linux.
18
+ - 🚀 **Batch Processing**: Automatically align, balance, and stack hundreds of images — perfect for macro or microscopy datasets.
19
+ - 🧩 **Modular Architecture**: Combine configurable modules for alignment, normalization, and blending to build custom workflows.
20
+ - 🖌️ **Retouch Editor**: Interactively refine your stacked image by painting in details from individual frames.
21
+ - 📊 **Jupyter & Python Integration**: Use Shine Stacker as a library inside your Python or Jupyter workflows.
22
+
23
+ <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">
28
24
 
29
25
  ## Interactive GUI
30
26
 
31
- The GUI has two main working areas:
27
+ The graphical interface makes complex stacking tasks simple:
28
+ - **Project View** – Configure, preview, and run stacking workflows with optional intermediate results.
29
+ - **Retouch View** – Manually refine the final image by blending details from selected frames and applying filters.
32
30
 
33
- * *Project*: manage and run focus stacking workflows in a flexible and configurable way, with optional intermediate batch stacking.
31
+ Ideal for users who want the power of scripting and the comfort of a modern UI.
34
32
 
35
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-project-run.png' width="600" referrerpolicy="no-referrer">
33
+ <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">
36
34
 
37
- * *Retouch*: select interactively details from individual frames and apply final filters to the blended image.
35
+ ## Get Started
38
36
 
39
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
37
+ - 📦 [Install via PyPI](https://pypi.org/project/shinestacker/)
38
+ - 💻 [Run the GUI app](https://shinestacker.readthedocs.io/en/latest/gui.html)
39
+ - 🧠 [Reference](https://shinestacker.readthedocs.io/en/)
40
+ - 🐛 [Report an issue](https://github.com/lucalista/shinestacker/issues)
40
41
 
41
42
  ## Resources
42
43
 
43
44
  🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
44
45
 
45
- ## Note for macOS users
46
-
47
- **The following note is only relevant if you download the application as compressed archive from the [release page](https://github.com/lucalista/shinestacker/releases).**
46
+ ## Installation
48
47
 
49
- The macOS system security protection prevent to run applications downloaded from the web that come from developers that don't hold an Apple Developer Certificate.
48
+ See the [main documentation](https://github.com/lucalista/shinestacker/blob/main/docs/main.md) for detailed installation instructions.
50
49
 
51
- In order to prevent this, follow the instructions below:
50
+ **Platform notes:**
51
+ - **Windows:** If you download the installer or ZIP archive, you may need to whitelist the app in your antivirus software.
52
+ - **macOS:** See the [installation note for macOS users](https://github.com/lucalista/shinestacker/blob/main/docs/macos-install.md).
52
53
 
53
- 1. Download the compressed archive ```shinestacker-macos.tar.gz``` in your ```Download``` folder.
54
- 2. Double-click the archive to uncompress it. You will find a new folder ```shinestacker```.
55
- 3. Open a terminal (*Applications > Utilities > Terminal*)
56
- 4. Type the folliwng command on the terminal (assuming you installed the app from the ```dmg``` image under ```Applications```):
57
- ```bash
58
- xattr -cr /Applications/shinestacker/shinestacker.app
59
- ```
60
- 5. Now you can double-click the Sine Stacker icon app and it should run.
61
54
 
62
- macOS adds a quarantine flag to all files downloaded from the internet. The above command removes that flag while preserving all other application functionality.
55
+ ## Acknowledgements & References
63
56
 
64
- ## Credits
65
-
66
- The first version of the core focus stack algorithm was initially inspired by the [Laplacian pyramids method](https://github.com/sjawhar/focus-stacking) implementation by Sami Jawhar that was used under permission of the author. The implementation in the latest releases was rewritten from the original code.
67
-
68
- ## Resources
57
+ The first version of the core focus stack algorithm was inspired by the
58
+ [Laplacian pyramids method](https://github.com/sjawhar/focus-stacking) implementation
59
+ by Sami Jawhar, used under permission. The implementation in the latest releases
60
+ was rewritten from the original code.
69
61
 
62
+ Key references:
70
63
  * [Pyramid Methods in Image Processing](https://www.researchgate.net/publication/246727904_Pyramid_Methods_in_Image_Processing), E. H. Adelson, C. H. Anderson, J. R. Bergen, P. J. Burt, J. M. Ogden, RCA Engineer, 29-6, Nov/Dec 1984
71
64
  Pyramid methods in image processing
72
65
  * [A Multi-focus Image Fusion Method Based on Laplacian Pyramid](http://www.jcomputers.us/vol6/jcp0612-07.pdf), Wencheng Wang, Faliang Chang, Journal of Computers 6 (12), 2559, December 2011
@@ -76,13 +69,18 @@ Pyramid methods in image processing
76
69
  <img src="https://www.gnu.org/graphics/lgplv3-147x51.png" alt="LGPL 3 logo">
77
70
 
78
71
  - **Code**: The software is provided as is under the [GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html). See [LICENSE](https://github.com/lucalista/shinestacker/blob/main/LICENSE) for details.
79
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
80
72
 
81
73
  - **Logo**: The Shine Stacker logo was designed by [Alessandro Lista](https://linktr.ee/alelista). Copyright © Alessandro Lista. All rights reserved. The logo is not covered by the LGPL-3.0 license of this project.
82
74
 
83
75
  ## Attribution request
76
+
84
77
  📸 If you publish images created with Shine Stacker, please consider adding a note such as:
85
78
 
86
79
  *Created with Shine Stacker – https://github.com/lucalista/shinestacker*
87
80
 
88
81
  This is not mandatory, but highly appreciated.
82
+
83
+ ---
84
+ > Developed and maintained by [Luca Lista](https://github.com/lucalista).
85
+ > 💡 Contributions, feedback, and feature suggestions are warmly welcome.
86
+ > If you enjoy Shine Stacker, consider giving it a ⭐️ on GitHub — it really helps visibility!
@@ -67,7 +67,9 @@ alignment_config = {
67
67
  'border_blur': 50,
68
68
  'subsample': 0,
69
69
  'fast_subsampling': False,
70
- 'min_good_matches': 100
70
+ 'min_good_matches': 100,
71
+ 'phase_corr_fallback': False,
72
+ 'abort_abnormal': False
71
73
  }
72
74
  ```
73
75
  * ```transform``` (optional, default: ```ALIGN_RIGID```): the transformation applied to register images. Possible values are:
@@ -83,6 +85,8 @@ alignment_config = {
83
85
  * ```subsample``` (optional, default: 0=automatic): subsample image for faster alignment. Faster, but alignment could be less accurate if only a small portion of the image is focused. It can save time, in particular for large images.
84
86
  * ```fast_subsampling``` (optional, default: ```False```): perform fast image subsampling without interpolation. Used if ```subsample``` is set to ```True```.
85
87
  * ```min_good_matches``` (optional, default: 100): if ```subsample```>1 and the number of good matches is below ```min_good_matches```, the alignment is retried without subsampling. This improbes robustness in case a too large subsampling factor is specified.
88
+ * ```phase_corr_fallback``` (optional, default: ```False```): use phase correlation alignment in case the number of matches is too low to allow to estimate the transformation. This algorithm is not very precise, and may help only in case of blurred images.
89
+ * ```abort_abnormal``` (optional, default: ```False```): abort in case of anormal tansformation. By default, frames where abnormal transformation is found are skipped, and processing continunes to next frame.
86
90
  * ```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:
87
91
  * ```BORDER_CONSTANT```: pad the image with a constant value. The border value is specified with the parameter ```border_value```.
88
92
  * ```BORDER_REPLICATE```: the rows and columns at the very edge of the original are replicated to the extra border.
@@ -101,6 +105,7 @@ This class has extra parameters, in addition to the above ones:
101
105
  * ```max_threads``` (optional, default: ```2```): number of parallel processes allowed. The number of actual threads will not be greater than the number of available CPU cores.
102
106
  * ```chunk_submit``` (optional, default: ```True```): submit at most ```max_threads``` parallel processes. If ```chunk_submit``` is greater than ```max_threads``` a moderate performance gain is achieved at the cost of a possibly large memory occupancy.
103
107
  * ```bw_matching``` (optional, default: ```False```): perform matches on black and white version of the images in order to save memory. Preliminary tests indicate that the gain with this option is marginal, and this option may be dropped in the future.
108
+ * ```delta_max``` (optional, defaut: 2): maximum consecutive frames skipped in case of too few matches found.
104
109
 
105
110
  ## Automatic selection of processing strategy
106
111
 
@@ -13,6 +13,8 @@ Arguments for the constructor of ```FocusStack``` are:
13
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
+ * ```scratch_output_dir``` (optional, default: ```True```): scratch output directory before processing. This avoids that existing files pollute the output.
17
+ * ```delete_output_at_end``` (optional, default: ```False```): delete output after processing. This cleans disk space in case of processing an intermediate step that is not part of the final output.
16
18
 
17
19
  ## Focus Stacking in bunches of frames
18
20
 
@@ -31,6 +33,8 @@ Arguments for the constructor of ```FocusStackBunch``` are:
31
33
  * ```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
34
  * ```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
35
  * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
36
+ * ```scratch_output_dir``` (optional, default: ```True```): scratch output directory before processing. This avoids that existing files pollute the output.
37
+ * ```delete_output_at_end``` (optional, default: ```False```): delete output after processing. This cleans disk space in case of processing an intermediate step that is not part of the final output.
34
38
 
35
39
  ## Stack algorithms
36
40
 
@@ -12,24 +12,28 @@ noisy pixel masking.
12
12
 
13
13
  ## Starting
14
14
 
15
- * If the python package is donwloaded and installed, the GUI can start either from a console command line :
15
+ * The python package can be installed from [PyPI](https://pypi.org/project/shinestacker/) using ```pip```:
16
16
 
17
17
  ```console
18
- > focusstack
18
+ > pip install shinestacker
19
19
  ```
20
+ Onace installed, the GUI app can start either from a console command line :
20
21
 
21
- * If the app is dowloaded from the [releases page](https://github.com/lucalista/focusstack/releases), after the ```zip``` archive is uncompressed, just double-click the app icon.
22
-
23
- <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-finder.png' width="300" referrerpolicy="no-referrer">
22
+ ```console
23
+ > shinestacker
24
+ ```
24
25
 
25
- **Platform Tip**: Windows apps are inside `/focusstack/`, macOS/Linux apps are directly in the uncompressed folder.
26
+ * The app can be dowloaded from the [releases page](https://github.com/lucalista/shinestacker/releases):
27
+ - Windows: as installer or ```zip``` archive for local installation
28
+ - macOS: as ```dmg``` disk image, where the app can be dragged to the Application folder
29
+ - Linux: as ```tar.gz``` archive
26
30
 
27
31
  The GUI has two main working areas:
28
32
 
29
33
  * *Project*
30
34
  * *Retouch*
31
35
 
32
- Switching from *Project* to *Retouch* can be done from the *FocusStack* main menu.
36
+ Switching from *Project* to *Retouch* can be done from the *ShineStacker* main menu.
33
37
 
34
38
  ## Project area
35
39
 
@@ -48,17 +52,13 @@ When the app starts, it proposes to create a new project.
48
52
 
49
53
  > **Large Set Tip**: For 100+ images:
50
54
  > - Split into 10-15 image "bunches"
51
- > - Set frame overlap (default: 2 frames)
55
+ > - Set number of overlapping frame from consecutive bunches
52
56
  > - Combine intermediate results later
53
57
 
54
- > 💡 **RAM Warning**: >15 images of 20Mpx resolution may need 16GB+ RAM. Combine smaller bunches first, if needed, to stack up to hundreds of frames.
55
-
56
58
  The newly created project consists of a single job that contains more actions.
57
59
  Each action produces a folder as output that has, by default, the action's name.
58
60
  Some actions can be combined in order to produce a single intermediate output (alignment, balancing, etc.).
59
61
 
60
- **Action Outputs**: 📁 `aligned-balanced/` | 📁 `bunches/` | 📁 `stacked/`
61
-
62
62
  > **Pro Tip**: Duplicate jobs when processing similar image sets to save configuration time. You can run multiple jobs in sequence.
63
63
 
64
64
  It is possible to run a single job, or all jobs within a project.
@@ -67,7 +67,7 @@ It is possible to run a single job, or all jobs within a project.
67
67
 
68
68
  ### Project Run Tabs
69
69
 
70
- 1. Job progress bar
70
+ 1. Job progress bar with CPU and RAM usage monitor
71
71
  2. Real-time log viewer
72
72
  3. Retouch button (enabled after processing)
73
73
 
@@ -43,6 +43,8 @@ Arguments for the constructor of ```CombinedActions``` are for the :
43
43
  * ```resample``` (optional, default: 1): take every *n*<sup>th</sup> frame in the selected directory. Default: take all frames.
44
44
  * ```reference_index``` (optional, default: 0): the index of the image used as reference. Images are numbered starting from one to N. -1 is interpreted as the last image, 0 as the median index.
45
45
  * ```step_process``` (optional): if equal to ```True``` (default), each image is processed with respect to the previous or next image, depending if its file is placed in alphabetic order after or befor the reference image.
46
- * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
46
+ * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
47
+ * ```scratch_output_dir``` (optional, default: ```True```): scratch output directory before processing. This avoids that existing files pollute the output.
48
+ * ```delete_output_at_end``` (optional, default: ```False```): delete output after processing. This cleans disk space in case of processing an intermediate step that is not part of the final output.
47
49
  * ```max_threads``` (optional, default: ```2```): number of parallel processes allowed. The number of actual threads will not be greater than the number of available CPU cores.
48
50
  * ```chunk_submit``` (optional, default: ```True```): submit at most ```max_threads``` parallel processes. If ```chunk_submit``` is greater than ```max_threads``` a moderate performance gain is achieved at the cost of a possibly large memory occupancy.
@@ -0,0 +1,19 @@
1
+ # Installation Note for macOS Users
2
+
3
+ **This note applies only if you downloaded Shine Stacker as a compressed archive from the [release page](https://github.com/lucalista/shinestacker/releases).**
4
+
5
+ macOS system security (Gatekeeper) may prevent applications from running if they were downloaded from the Internet and are not signed with an official Apple Developer Certificate.
6
+
7
+ To allow Shine Stacker to run safely, please follow these steps:
8
+
9
+ 1. Download the disk image file ```shinestacker-macos.dmg```.
10
+ 2. Double-click the ```.dmg``` file and drag the **Shine Stacker** app into your **Application** folder.
11
+ 3. Open the **Terminal** (found in *Applications > Utilities > Terminal*).
12
+ 4. Run the following command to remove the quarantine attribute:
13
+ ```bash
14
+ xattr -cr /Applications/shinestacker/shinestacker.app
15
+ ```
16
+ 5. You can now launch Shine Stacker normally from your Applications folder.
17
+
18
+ > 💡 Tip: macOS might still show a security warning the first time you open the app.
19
+ > If that happens, right-click the app and choose Open, then confirm.
@@ -103,5 +103,6 @@ pip install ipywidgets
103
103
 
104
104
  | Issue | Workaround |
105
105
  |----------|----------------|
106
- | PNG and RAW unsupported | Convert to TIFF/JPEG first |
106
+ | RAW format unsupported | Convert to TIFF/JPEG first |
107
+ | EXIF data not supported for 16-bit PNG files | convert to 16-bit TIFF first |
107
108
  | GUI tests limited | Report any bugs as GitHub issuse |
@@ -13,14 +13,14 @@ Usually, this job should be run first, enabling the option ```plot_histograms```
13
13
  Arguments for the constructor of ```NoiseDetection``` are:
14
14
  * ```name``` (optional, default: ```noise-map```): name of the action and default name of the subdirectory within ```working_path``` where aligned noise map is written.
15
15
  * ```input_path``` (optional): one or more subdirectory within ```working_path``` that contains input images to be combined. If not specified, the last output path is used, or, if this is the first action, the ```input_path``` specified with the ```StackJob``` construction is used. If the ```StackJob``` specifies no ```input_path```, at least the first action must specify an ```input_path```.
16
- * ```output_path``` (optional): unused
16
+ * ```output_path``` (optional): the subdirectory within ```working_path``` where noise map is written. If not specified, it is equal to ```name```.
17
17
  * ```working_path``` (optional): the directory that contains input and output image subdirectories. If not specified, it is the same as ```job.working_path```.
18
18
  * ```max_frames``` (optional): if provided, at most ```max_frames``` images are analyzed to extract noisy pixel mask.
19
19
  * ```plot_path``` (optional, default: ```plots```): the directory within ```working_path``` that contains plots produced by the different actions
20
20
  * ```plot_histograms``` (optional, default: ```False```): if ```True```, plot a summary of the number of hot pixel by channel as a function of the applied threshold. It may be useful to set the optimal threshold values.
21
21
  * ```channel_thresholds``` (optional, default: ```(13, 13, 13)```): threshold values for noisy pixel detections in the color channels R, G, B, respectively.
22
22
  * ```blur_size``` (optional, default: 5): image blur amount for pixel detection.
23
- * ```file_name``` (optional, default: ```hot```): noise map filename. The noisy pixel map is stored bydefault in the file ```hot-rgb.png```. Noisy pixel maps individyally for the R, G and B channels are also stored in ```hot-r.png```, ```hot-g.png``` and ```hot-b.png```, respectively.
23
+ * ```file_name``` (optional, default: ```hot_pixels.png```): noise map filename.
24
24
  * ```plot_range``` (optiona, default: (5, 30)): range of the horizontal axis of the plot showing the number of hot pixel as a function of the intensity threshold.
25
25
  * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
26
26
 
@@ -41,7 +41,7 @@ job.add_action(Actions("align", [MaskNoise(),
41
41
  Note that if the number of pixels contained in the mask file (```noise_mask``` option) is greater than 1000, the job is aborted.
42
42
 
43
43
  Arguments for the constructor of ```NoiseDetection``` are:
44
- * ```noise_mask``` (optional, default: ```noise-map/hot-rgb.png```): filename of the noise mask
44
+ * ```noise_mask``` (optional, default: ```hot-rgb.png```): filename of the noise mask
45
45
  * ```kernel_size``` (optional, default: 3): blur size use to extract noisy pixels
46
46
  * ```method``` (optional, default: ```INTERPOLATE_MEAN```): possible values: ```INTERPOLATE_MEAN```, ```INTERPOLATE_MEDIAN```. Interpolate using mean or median of neighborhood pixels to replace a noisy pixel.
47
47
  * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
@@ -0,0 +1 @@
1
+ __version__ = '1.9.0'