shinestacker 1.2.1__tar.gz → 1.3.1__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 (145) hide show
  1. {shinestacker-1.2.1 → shinestacker-1.3.1}/CHANGELOG.md +41 -1
  2. {shinestacker-1.2.1/src/shinestacker.egg-info → shinestacker-1.3.1}/PKG-INFO +6 -6
  3. {shinestacker-1.2.1 → shinestacker-1.3.1}/README.md +4 -5
  4. {shinestacker-1.2.1 → shinestacker-1.3.1}/THIRD_PARTY_LICENSES.txt +6 -13
  5. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/alignment.md +15 -0
  6. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/focus_stacking.md +1 -0
  7. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/job.md +2 -0
  8. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/main.md +1 -1
  9. shinestacker-1.3.1/index.html +47 -0
  10. {shinestacker-1.2.1 → shinestacker-1.3.1}/pyproject.toml +1 -0
  11. {shinestacker-1.2.1 → shinestacker-1.3.1}/requirements.txt +1 -0
  12. shinestacker-1.3.1/src/shinestacker/_version.py +1 -0
  13. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/align.py +152 -112
  14. shinestacker-1.3.1/src/shinestacker/algorithms/align_auto.py +76 -0
  15. shinestacker-1.3.1/src/shinestacker/algorithms/align_parallel.py +336 -0
  16. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/balance.py +3 -1
  17. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/base_stack_algo.py +25 -22
  18. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/depth_map.py +9 -14
  19. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/multilayer.py +8 -8
  20. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/noise_detection.py +10 -10
  21. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/pyramid.py +10 -24
  22. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/pyramid_auto.py +21 -24
  23. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/pyramid_tiles.py +31 -25
  24. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/stack.py +21 -17
  25. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/stack_framework.py +98 -47
  26. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/utils.py +16 -0
  27. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/vignetting.py +13 -10
  28. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/gui_utils.py +10 -0
  29. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/main.py +10 -4
  30. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/project.py +3 -1
  31. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/retouch.py +3 -1
  32. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/config/constants.py +60 -25
  33. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/config/gui_constants.py +1 -1
  34. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/core/core_utils.py +4 -0
  35. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/core/framework.py +104 -23
  36. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/action_config.py +4 -5
  37. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/action_config_dialog.py +409 -239
  38. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/base_form_dialog.py +2 -2
  39. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/colors.py +1 -0
  40. shinestacker-1.3.1/src/shinestacker/gui/folder_file_selection.py +106 -0
  41. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/gui_run.py +12 -10
  42. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/main_window.py +10 -5
  43. shinestacker-1.3.1/src/shinestacker/gui/new_project.py +348 -0
  44. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/project_controller.py +10 -6
  45. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/project_converter.py +4 -2
  46. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/project_editor.py +40 -28
  47. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/select_path_widget.py +1 -1
  48. shinestacker-1.3.1/src/shinestacker/gui/sys_mon.py +97 -0
  49. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/time_progress_bar.py +4 -3
  50. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/exif_data.py +1 -1
  51. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/image_editor_ui.py +2 -0
  52. {shinestacker-1.2.1 → shinestacker-1.3.1/src/shinestacker.egg-info}/PKG-INFO +6 -6
  53. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker.egg-info/SOURCES.txt +5 -0
  54. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker.egg-info/requires.txt +1 -0
  55. shinestacker-1.2.1/src/shinestacker/_version.py +0 -1
  56. shinestacker-1.2.1/src/shinestacker/gui/new_project.py +0 -250
  57. {shinestacker-1.2.1 → shinestacker-1.3.1}/.coveragerc +0 -0
  58. {shinestacker-1.2.1 → shinestacker-1.3.1}/.flake8 +0 -0
  59. {shinestacker-1.2.1 → shinestacker-1.3.1}/.github/workflows/ci-multiplatform.yml +0 -0
  60. {shinestacker-1.2.1 → shinestacker-1.3.1}/.github/workflows/pylint.yml +0 -0
  61. {shinestacker-1.2.1 → shinestacker-1.3.1}/.github/workflows/pypi-publish.yml +0 -0
  62. {shinestacker-1.2.1 → shinestacker-1.3.1}/.github/workflows/release.yml +0 -0
  63. {shinestacker-1.2.1 → shinestacker-1.3.1}/.gitignore +0 -0
  64. {shinestacker-1.2.1 → shinestacker-1.3.1}/.pylintrc +0 -0
  65. {shinestacker-1.2.1 → shinestacker-1.3.1}/.readthedocs.yaml +0 -0
  66. {shinestacker-1.2.1 → shinestacker-1.3.1}/LICENSE +0 -0
  67. {shinestacker-1.2.1 → shinestacker-1.3.1}/MANIFEST.in +0 -0
  68. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/api.md +0 -0
  69. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/balancing.md +0 -0
  70. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/conf.py +0 -0
  71. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/gui.md +0 -0
  72. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/index.md +0 -0
  73. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/multilayer.md +0 -0
  74. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/noise.md +0 -0
  75. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/requirements.txt +0 -0
  76. {shinestacker-1.2.1 → shinestacker-1.3.1}/docs/vignetting.md +0 -0
  77. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/coffee.gif +0 -0
  78. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/coffee_stack.jpg +0 -0
  79. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/extreme-vignetting.jpg +0 -0
  80. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/flies.gif +0 -0
  81. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/flies_stack.jpg +0 -0
  82. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/flow-diagram.png +0 -0
  83. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/gui-finder.png +0 -0
  84. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/gui-project-new.png +0 -0
  85. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/gui-project-run.png +0 -0
  86. {shinestacker-1.2.1 → shinestacker-1.3.1}/img/gui-retouch.png +0 -0
  87. {shinestacker-1.2.1 → shinestacker-1.3.1}/scripts/build_release.py +0 -0
  88. {shinestacker-1.2.1 → shinestacker-1.3.1}/scripts/git-rev-list.sh +0 -0
  89. {shinestacker-1.2.1 → shinestacker-1.3.1}/scripts/validate-tomli.py +0 -0
  90. {shinestacker-1.2.1 → shinestacker-1.3.1}/setup.cfg +0 -0
  91. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/__init__.py +0 -0
  92. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/__init__.py +0 -0
  93. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/denoise.py +0 -0
  94. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/exif.py +0 -0
  95. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/sharpen.py +0 -0
  96. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/algorithms/white_balance.py +0 -0
  97. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/__init__.py +0 -0
  98. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/about_dialog.py +0 -0
  99. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/help_menu.py +0 -0
  100. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/app/open_frames.py +0 -0
  101. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/config/__init__.py +0 -0
  102. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/config/config.py +0 -0
  103. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/core/__init__.py +0 -0
  104. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/core/colors.py +0 -0
  105. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/core/exceptions.py +0 -0
  106. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/core/logging.py +0 -0
  107. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/__init__.py +0 -0
  108. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/flow_layout.py +0 -0
  109. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/gui_images.py +0 -0
  110. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/gui_logging.py +0 -0
  111. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/ico/focus_stack_bkg.png +0 -0
  112. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
  113. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
  114. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/ico/shinestacker.png +0 -0
  115. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/ico/shinestacker.svg +0 -0
  116. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/img/close-round-line-icon.png +0 -0
  117. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/img/forward-button-icon.png +0 -0
  118. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/img/play-button-round-icon.png +0 -0
  119. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/img/plus-round-line-icon.png +0 -0
  120. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/menu_manager.py +0 -0
  121. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/project_model.py +0 -0
  122. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/gui/tab_widget.py +0 -0
  123. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/__init__.py +0 -0
  124. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/base_filter.py +0 -0
  125. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/brush.py +0 -0
  126. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/brush_gradient.py +0 -0
  127. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/brush_preview.py +0 -0
  128. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/brush_tool.py +0 -0
  129. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/denoise_filter.py +0 -0
  130. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/display_manager.py +0 -0
  131. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/file_loader.py +0 -0
  132. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/filter_manager.py +0 -0
  133. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/icon_container.py +0 -0
  134. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/image_viewer.py +0 -0
  135. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/io_gui_handler.py +0 -0
  136. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/io_manager.py +0 -0
  137. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/layer_collection.py +0 -0
  138. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/shortcuts_help.py +0 -0
  139. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/undo_manager.py +0 -0
  140. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/unsharp_mask_filter.py +0 -0
  141. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/vignetting_filter.py +0 -0
  142. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker/retouch/white_balance_filter.py +0 -0
  143. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker.egg-info/dependency_links.txt +0 -0
  144. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker.egg-info/entry_points.txt +0 -0
  145. {shinestacker-1.2.1 → shinestacker-1.3.1}/src/shinestacker.egg-info/top_level.txt +0 -0
@@ -2,8 +2,46 @@
2
2
 
3
3
  This page reports the main releases only and the main changes therein.
4
4
 
5
- ## [v1.2.1] - 2025-09-01
5
+ ## [v1.3.1] - 2025-09-08
6
+
7
+ ## Fixed
8
+ - fixed input folder widget in job configuration
9
+ - better management of patological alignments
10
+
11
+ ### Changed
12
+ - improved automatic parameters for parallel alignment
13
+ - improved pyramid performances by combining two input steps
14
+ - improved performances of ORB and SURF feature extraction with key points caching
15
+ - improved configuration GUI using tabs and other minor GUI improvements
16
+ - code clean up and some fixes
17
+
18
+ ---
19
+
20
+ ## [v1.3.0] - 2025-09-06
21
+ **Parallel processing and input flexibility**
22
+
23
+ ### Added
24
+ - Parallel processing in alignment feature extraction
25
+ - Parallel processing of combined actions
26
+ - Job input can now specify a list of files (not only a folder)
27
+ - CPU and memory usage monitor widget for running jobs
28
+
29
+ ### Fixed
30
+ - Path in example project
31
+ - Bug fix in config dialog
32
+
33
+ ### Changed
34
+ - Changes some default parameters for better performances
35
+ - Some GUI restyling
36
+ - Code cleanup
37
+
38
+ ---
39
+
40
+ ## [v1.2.1] - 2025-09-02
6
41
  **Bug fixes and minor improvements**
42
+
43
+ ### Changes
44
+
7
45
  * alignment is more tolerant in case of failures: frames are skipped and the running job is not stopped
8
46
  * fixed the -x (--expert) option
9
47
  * more safety checks prevent crashes for abnormal conditions
@@ -16,6 +54,8 @@ This page reports the main releases only and the main changes therein.
16
54
  ## [v1.2.0] - 2025-08-31
17
55
  **Parallel processing and more improvements**
18
56
 
57
+ ### Changes
58
+
19
59
  * Implemented parallel processing for pyramid stacking algorithm
20
60
  * optimized pyramid algorithm: selects automatically the best within the given memory budget to avoid memory issues in case many pictures are selected. Explicit configuration is also possible for specific needs.
21
61
  * Implemented automatic subsample option for alignment, balancing and vignetting, now default
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 1.2.1
3
+ Version: 1.3.1
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -20,6 +20,7 @@ Requires-Dist: numpy
20
20
  Requires-Dist: opencv_python
21
21
  Requires-Dist: pillow
22
22
  Requires-Dist: psdtags
23
+ Requires-Dist: psutil
23
24
  Requires-Dist: PySide6
24
25
  Requires-Dist: scipy
25
26
  Requires-Dist: tifffile
@@ -69,6 +70,10 @@ The GUI has two main working areas:
69
70
 
70
71
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
71
72
 
73
+ # Resources
74
+
75
+ 🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
76
+
72
77
  # Note for macOS users
73
78
 
74
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).**
@@ -88,11 +93,6 @@ xattr -cr ~/Downloads/shinestacker/shinestacker.app
88
93
 
89
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.
90
95
 
91
- # Resources
92
-
93
- 🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
94
-
95
-
96
96
  # Credits
97
97
 
98
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.
@@ -38,6 +38,10 @@ The GUI has two main working areas:
38
38
 
39
39
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
40
40
 
41
+ # Resources
42
+
43
+ 🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
44
+
41
45
  # Note for macOS users
42
46
 
43
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).**
@@ -57,11 +61,6 @@ xattr -cr ~/Downloads/shinestacker/shinestacker.app
57
61
 
58
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.
59
63
 
60
- # Resources
61
-
62
- 🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
63
-
64
-
65
64
  # Credits
66
65
 
67
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.
@@ -40,18 +40,17 @@ psdtags
40
40
  License: MIT
41
41
  https://pypi.org/project/psdtags/
42
42
 
43
+ -------------------------------------------------------------------------------
44
+ psutil
45
+ License: BSD-3-Clause
46
+ https://pypi.org/project/psutil/
47
+
43
48
  -------------------------------------------------------------------------------
44
49
  PySide6
45
50
  License: GNU Lesser General Public License v3.0 (LGPL-3.0)
46
51
  or commercial license from The Qt Company
47
52
  https://doc.qt.io/qtforpython/
48
53
 
49
- Full license text follows:
50
-
51
- --- BEGIN LGPL-3.0 LICENSE ---
52
- <qui incolla il testo completo della LGPL-3.0>
53
- --- END LGPL-3.0 LICENSE ---
54
-
55
54
  -------------------------------------------------------------------------------
56
55
  scipy
57
56
  License: BSD-3-Clause
@@ -67,14 +66,8 @@ tqdm
67
66
  License: Mozilla Public License 2.0 (MPL-2.0)
68
67
  https://github.com/tqdm/tqdm
69
68
 
70
- Full license text follows:
71
-
72
- --- BEGIN MPL-2.0 LICENSE ---
73
- <qui incolla il testo completo della MPL-2.0>
74
- --- END MPL-2.0 LICENSE ---
75
-
76
69
  -------------------------------------------------------------------------------
77
70
 
78
71
  NOTE:
79
72
  This file is provided for license compliance and attribution purposes.
80
- Your application code is licensed separately under the GNU Lesser General Public License v3.0.
73
+ Shine Stacker code is licensed separately under the GNU Lesser General Public License v3.0.
@@ -93,6 +93,14 @@ alignment_config = {
93
93
  * ```plot_matches``` (optional, default: ```False```): if ```True```, for each image matches with reference frame are drawn. May be useful for inspection and debugging.
94
94
  * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
95
95
 
96
+ ## Parallel processing
97
+
98
+ A class ```AlignFramesParallel``` implements alignment using parallel processing.
99
+ This class has extra parameters, in addition to the above ones:
100
+
101
+ * ```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
+ * ```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
+ * ```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.
96
104
 
97
105
  ## Allowed configurations
98
106
 
@@ -119,3 +127,10 @@ give raise to an exception.
119
127
  | 0.2887 | AKAZE | BRISK | NORM_HAMMING |
120
128
  | 0.4075 | AKAZE | SIFT | KNN |
121
129
  | 0.4397 | SIFT | SIFT | KNN |
130
+
131
+ ## References
132
+
133
+ For a detailed review of the various image registration methods, see the publication below:
134
+ * [A Review of Keypoints’ Detection and Feature Description in Image Registration](https://onlinelibrary.wiley.com/doi/10.1155/2021/8509164), Scientific Programming 2021, 8509164, doi:10.1155/2021/8509164
135
+
136
+
@@ -48,6 +48,7 @@ Arguments for the constructor are, in addition to the ones for ```PyramidStack``
48
48
  * ```tile_size``` (optional, default: 512): size of a time
49
49
  * ```n_tiled_layers``` (optional, default: 2): number of layers that are tiled. Usually the last one or two are the ones that take more memory.
50
50
  * ```max_threads``` (optional, default: number of cores, up to a maximum of 8): maximum number of thread used for parallel processing. The actual number of threads does not exceed the number of available cores.
51
+ * ```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.
51
52
 
52
53
 
53
54
  ```PyramidAutoStack```, pyramid algorithn with capability to automatically switch from all-in-memory to I/O buffered tiled.
@@ -44,3 +44,5 @@ Arguments for the constructor of ```CombinedActions``` are for the :
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
46
  * ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
47
+ * ```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
+ * ```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.
@@ -87,7 +87,7 @@ job.run()
87
87
 
88
88
  ### Core processing
89
89
  ```bash
90
- pip install imagecodecs matplotlib numpy opencv-python pillow psdtags scipy setuptools-scm tifffile tqdm
90
+ pip install imagecodecs matplotlib numpy opencv-python pillow psdtags psutil scipy setuptools-scm tifffile tqdm
91
91
  ```
92
92
  ## GUI support
93
93
  ```bash
@@ -0,0 +1,47 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Shine Stacker</title>
7
+ <meta name="description" content="Shine Stacker – Open source focus stacking framework with GUI for macro and micro photography.">
8
+
9
+ <!-- Open Graph / Facebook -->
10
+ <meta property="og:type" content="website">
11
+ <meta property="og:title" content="Shine Stacker">
12
+ <meta property="og:description" content="Open source focus stacking framework with GUI for macro and micro photography.">
13
+ <meta property="og:image" content="https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png">
14
+ <meta property="og:url" content="https://lucalista.github.io/shinestacker/">
15
+
16
+ <!-- Twitter Card -->
17
+ <meta name="twitter:card" content="summary_large_image">
18
+ <meta name="twitter:title" content="Shine Stacker">
19
+ <meta name="twitter:description" content="Open source focus stacking framework with GUI for macro and micro photography.">
20
+ <meta name="twitter:image" content="https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png">
21
+ <style>
22
+ body { font-family: sans-serif; margin: 40px; line-height: 1.6; background: #f7f7f7; color: #333; }
23
+ h1 { color: #2c3e50; font-size: 48px}
24
+ a { color: #2980b9; text-decoration: none; }
25
+ a:hover { text-decoration: underline; }
26
+ .container { max-width: 800px; margin: auto; background: #fff; padding: 30px; border-radius: 10px; box-shadow: 0 4px 10px rgba(0,0,0,0.1);}
27
+ .logo { width: 150px; }
28
+ ul { text-align: left; }
29
+ .footer { color: #A0A0A0; }
30
+ </style>
31
+ </head>
32
+ <body>
33
+ <div class="container" style="text-align:center;">
34
+ <h1>Shine Stacker</h1>
35
+ <img src="https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png" alt="Shine Stacker Logo" class="logo"> <p>Open source framework and GUI for focus stacking macro and micro photography.</p>
36
+ <h2><a href="https://lucalista.github.io/shinestacker/docs/main.html">Go to GitHub website</h2>
37
+ <ul>
38
+ <li><a href="https://shinestacker.wordpress.com/">Shine Stacker on Wordpress</a></li>
39
+ <li><a href="https://shinestacker.readthedocs.io/">Complete documentation</a></li>
40
+ <li><a href="https://github.com/lucalista/shinestacker">Source code and releases on GitHub</a></li>
41
+ </ul>
42
+ <hr style="color: #f0f0ff;">
43
+ <p class="footer">Shine Stacker, &copy; 2025, <a href="https://github.com/lucalista" alt="Luca Lista">Luca Lista</a> (LGPL-3.0).<br>
44
+ Logo © <a href="https://linktr.ee/alelista" alt="Alessandro Lista">Alessandro Lista</a> — All rights reserved.
45
+ </div>
46
+ </body>
47
+ </html>
@@ -26,6 +26,7 @@ dependencies = [
26
26
  "opencv_python",
27
27
  "pillow",
28
28
  "psdtags",
29
+ "psutil",
29
30
  "PySide6",
30
31
  "scipy",
31
32
  "tifffile",
@@ -6,6 +6,7 @@ numpy
6
6
  opencv_python
7
7
  pillow
8
8
  psdtags
9
+ psutil
9
10
  PySide6
10
11
  scipy
11
12
  tifffile
@@ -0,0 +1 @@
1
+ __version__ = '1.3.1'