shinestacker 0.3.3__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 (137) 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.3 → shinestacker-0.3.4}/CHANGELOG.md +23 -0
  5. {shinestacker-0.3.3 → shinestacker-0.3.4}/PKG-INFO +10 -4
  6. {shinestacker-0.3.3 → shinestacker-0.3.4}/README.md +9 -3
  7. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/focus_stacking.md +2 -2
  8. shinestacker-0.3.4/docs/index.md +17 -0
  9. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/job.md +6 -13
  10. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/main.md +11 -23
  11. shinestacker-0.3.4/img/coffee.gif +0 -0
  12. shinestacker-0.3.4/img/coffee_stack.jpg +0 -0
  13. shinestacker-0.3.4/img/flies.gif +0 -0
  14. shinestacker-0.3.4/img/flies_stack.jpg +0 -0
  15. shinestacker-0.3.4/requirements.txt +13 -0
  16. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/__init__.py +2 -1
  17. shinestacker-0.3.4/src/shinestacker/_version.py +1 -0
  18. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/__init__.py +3 -2
  19. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/align.py +102 -64
  20. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/balance.py +89 -42
  21. shinestacker-0.3.4/src/shinestacker/algorithms/base_stack_algo.py +42 -0
  22. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/core_utils.py +6 -6
  23. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/denoise.py +4 -1
  24. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/depth_map.py +28 -39
  25. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/exif.py +43 -38
  26. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/multilayer.py +48 -28
  27. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/noise_detection.py +34 -23
  28. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/pyramid.py +42 -42
  29. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/sharpen.py +1 -0
  30. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack.py +42 -41
  31. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack_framework.py +111 -65
  32. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/utils.py +12 -11
  33. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/vignetting.py +48 -22
  34. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/white_balance.py +1 -0
  35. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/about_dialog.py +6 -2
  36. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/app_config.py +1 -0
  37. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/gui_utils.py +20 -0
  38. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/help_menu.py +1 -0
  39. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/main.py +9 -18
  40. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/open_frames.py +5 -4
  41. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/project.py +5 -16
  42. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/retouch.py +5 -17
  43. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/colors.py +4 -4
  44. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/core_utils.py +1 -1
  45. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/exceptions.py +2 -1
  46. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/framework.py +46 -33
  47. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/logging.py +9 -10
  48. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/action_config.py +253 -197
  49. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/actions_window.py +32 -28
  50. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/colors.py +1 -0
  51. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/gui_images.py +7 -3
  52. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/gui_logging.py +3 -2
  53. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/gui_run.py +53 -38
  54. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/main_window.py +69 -25
  55. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/new_project.py +35 -2
  56. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/project_converter.py +21 -20
  57. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/project_editor.py +45 -52
  58. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/project_model.py +15 -23
  59. shinestacker-0.3.3/src/shinestacker/retouch/filter_base.py → shinestacker-0.3.4/src/shinestacker/retouch/base_filter.py +7 -4
  60. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/brush.py +1 -0
  61. shinestacker-0.3.4/src/shinestacker/retouch/brush_gradient.py +34 -0
  62. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/brush_preview.py +14 -10
  63. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/brush_tool.py +28 -19
  64. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/denoise_filter.py +3 -2
  65. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/display_manager.py +11 -5
  66. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/exif_data.py +1 -0
  67. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/file_loader.py +13 -9
  68. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/filter_manager.py +1 -0
  69. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_editor.py +14 -48
  70. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_editor_ui.py +10 -5
  71. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_filters.py +4 -2
  72. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_viewer.py +33 -31
  73. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/io_gui_handler.py +25 -13
  74. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/io_manager.py +3 -2
  75. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/layer_collection.py +79 -23
  76. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/shortcuts_help.py +1 -0
  77. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/undo_manager.py +7 -0
  78. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/unsharp_mask_filter.py +3 -2
  79. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/white_balance_filter.py +11 -6
  80. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/PKG-INFO +10 -4
  81. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/SOURCES.txt +7 -1
  82. shinestacker-0.3.3/.flake8 +0 -4
  83. shinestacker-0.3.3/docs/index.md +0 -23
  84. shinestacker-0.3.3/img/flies.gif +0 -0
  85. shinestacker-0.3.3/img/flies_stack.jpg +0 -0
  86. shinestacker-0.3.3/src/shinestacker/_version.py +0 -1
  87. shinestacker-0.3.3/src/shinestacker/retouch/brush_gradient.py +0 -20
  88. {shinestacker-0.3.3 → shinestacker-0.3.4}/.coverage +0 -0
  89. {shinestacker-0.3.3 → shinestacker-0.3.4}/.coveragerc +0 -0
  90. {shinestacker-0.3.3 → shinestacker-0.3.4}/.github/workflows/ci-multiplatform.yml +0 -0
  91. {shinestacker-0.3.3 → shinestacker-0.3.4}/.github/workflows/pypi-publish.yml +0 -0
  92. {shinestacker-0.3.3 → shinestacker-0.3.4}/.github/workflows/release.yml +0 -0
  93. {shinestacker-0.3.3 → shinestacker-0.3.4}/.gitignore +0 -0
  94. {shinestacker-0.3.3 → shinestacker-0.3.4}/.readthedocs.yaml +0 -0
  95. {shinestacker-0.3.3 → shinestacker-0.3.4}/LICENSE +0 -0
  96. {shinestacker-0.3.3 → shinestacker-0.3.4}/MANIFEST.in +0 -0
  97. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/alignment.md +0 -0
  98. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/api.md +0 -0
  99. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/balancing.md +0 -0
  100. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/conf.py +0 -0
  101. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/gui.md +0 -0
  102. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/multilayer.md +0 -0
  103. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/noise.md +0 -0
  104. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/requirements.txt +0 -0
  105. {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/vignetting.md +0 -0
  106. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/coins.gif +0 -0
  107. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/coins_stack.jpg +0 -0
  108. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/extreme-vignetting.jpg +0 -0
  109. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/flow-diagram.png +0 -0
  110. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-finder.png +0 -0
  111. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-project-new.png +0 -0
  112. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-project-run.png +0 -0
  113. {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-retouch.png +0 -0
  114. {shinestacker-0.3.3 → shinestacker-0.3.4}/pyproject.toml +0 -0
  115. {shinestacker-0.3.3 → shinestacker-0.3.4}/scripts/build_release.py +0 -0
  116. {shinestacker-0.3.3 → shinestacker-0.3.4}/scripts/validate-tomli.py +0 -0
  117. {shinestacker-0.3.3 → shinestacker-0.3.4}/setup.cfg +0 -0
  118. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/__init__.py +0 -0
  119. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/__init__.py +0 -0
  120. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/config.py +0 -0
  121. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/constants.py +0 -0
  122. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/gui_constants.py +0 -0
  123. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/__init__.py +0 -0
  124. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/__init__.py +0 -0
  125. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/focus_stack_bkg.png +0 -0
  126. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
  127. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
  128. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.png +0 -0
  129. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/close-round-line-icon.png +0 -0
  130. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/forward-button-icon.png +0 -0
  131. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/play-button-round-icon.png +0 -0
  132. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/plus-round-line-icon.png +0 -0
  133. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/__init__.py +0 -0
  134. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/dependency_links.txt +0 -0
  135. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/entry_points.txt +0 -0
  136. {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/requires.txt +0 -0
  137. {shinestacker-0.3.3 → 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,29 @@ 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
+
7
30
  ## [v0.3.2] - 2025-08-13
8
31
  **Fixes and code refactoring**
9
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 0.3.3
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,11 +36,17 @@ 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
+
44
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">
45
51
  > **Focus stacking** for microscopy, macro photography, and computational imaging
46
52
 
@@ -48,7 +54,7 @@ Dynamic: license-file
48
54
  - 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
49
55
  - 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
50
56
  - 🧩 **Modular Architecture**: Mix-and-match processing modules
51
- - 🖌️ **Non-Destructive Editing**: Save multilayer TIFFs for retouching
57
+ - 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
52
58
  - 📊 **Jupyter Integration**: Reproducible research notebooks
53
59
 
54
60
  ## Interactive GUI
@@ -63,9 +69,9 @@ The GUI has two main working areas:
63
69
 
64
70
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
65
71
 
66
- # Documentation
72
+ # Resources
67
73
 
68
- 📖 [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)
69
75
 
70
76
 
71
77
  # Credits
@@ -5,11 +5,17 @@
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
+
13
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">
14
20
  > **Focus stacking** for microscopy, macro photography, and computational imaging
15
21
 
@@ -17,7 +23,7 @@
17
23
  - 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
18
24
  - 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
19
25
  - 🧩 **Modular Architecture**: Mix-and-match processing modules
20
- - 🖌️ **Non-Destructive Editing**: Save multilayer TIFFs for retouching
26
+ - 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
21
27
  - 📊 **Jupyter Integration**: Reproducible research notebooks
22
28
 
23
29
  ## Interactive GUI
@@ -32,9 +38,9 @@ The GUI has two main working areas:
32
38
 
33
39
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
34
40
 
35
- # Documentation
41
+ # Resources
36
42
 
37
- 📖 [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)
38
44
 
39
45
 
40
46
  # Credits
@@ -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
@@ -5,20 +5,13 @@ Create a job, then schedule the desired actions in a job, then run the job.
5
5
  Quick start example:
6
6
 
7
7
  ```python
8
- from focus_stack import *
8
+ from shinestacker import *
9
9
 
10
- job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
11
- job.add_action(NoiseDetection())
12
- job.run()
13
-
14
- job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
15
- job.add_action(Actions("align", actions=[MaskNoise(),
16
- AlignFrames(),
17
- BalanceFrames(mask_size=0.9, i_min=150, i_max=65385)]))
18
- job.add_action(FocusStackBunch("batches", PyramidStack(), frames=10, overlap=2, denoise=0.8))
19
- job.add_action(FocusStack("stack", PyramidStack(), postfix='_py', denoise=0.8))
20
- job.add_action(FocusStack("stack", DepthMapStack(), input_path='batches', postfix='_dm', denoise=0.8))
21
- job.add_action(MultiLayer("multilayer", input_path=['batches', 'stack']))
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_'))
22
15
  job.run()
23
16
  ```
24
17
 
@@ -2,14 +2,10 @@
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)
10
-
11
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">
12
6
 
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
+
13
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">
14
10
 
15
11
  > **Focus stacking** for microscopy, macro photography, and computational imaging
@@ -38,8 +34,8 @@ job.run()
38
34
  Clone the pagkage from GitHub:
39
35
 
40
36
  ```bash
41
- git clone https://github.com/lucalista/focusstack.git
42
- cd focusstack
37
+ git clone https://github.com/lucalista/shinestacker.git
38
+ cd shinestacker
43
39
  pip install -e .
44
40
  ```
45
41
 
@@ -47,7 +43,7 @@ pip install -e .
47
43
  Launch GUI
48
44
 
49
45
  ```bash
50
- focusstack
46
+ shinestacker
51
47
  ```
52
48
 
53
49
  Follow [GUI guide](gui.md) for batch processing and retouching.
@@ -56,21 +52,13 @@ Follow [GUI guide](gui.md) for batch processing and retouching.
56
52
  ## Advanced Processing Pipeline
57
53
 
58
54
  ```python
59
- from shinestacker.algorithms import *
60
-
61
- job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
62
- job.add_action(NoiseDetection())
63
- job.run()
55
+ from shinestacker import *
64
56
 
65
- job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
66
- job.add_action(CombinedActions("align",
67
- [MaskNoise(),Vignetting(), AlignFrames(),
68
- BalanceFrames(mask_size=0.9,
69
- intensity_interval={'min': 150, 'max': 65385})]))
70
- job.add_action(FocusStackBunch("bunches", PyramidStack(), frames=10, overlap=2, denoise=0.8))
71
- job.add_action(FocusStack("stack", PyramidStack(), prefix='pyramid_', denoise=0.8))
72
- job.add_action(FocusStack("stack", DepthMapStack(), input_path='batches', prefix='depthmap_', denoise=0.8))
73
- 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_'))
74
62
  job.run()
75
63
  ```
76
64
 
Binary file
Binary file
Binary file
Binary file
@@ -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
@@ -1,4 +1,5 @@
1
1
  # flake8: noqa F401 F403
2
+ # pylint: disable=C0114, E0401
2
3
  from ._version import __version__
3
4
  from . import config
4
5
  from . import core
@@ -13,4 +14,4 @@ from .algorithms import *
13
14
  __all__ = ['__version__']
14
15
  __all__ += config_all
15
16
  __all__ += core_all
16
- __all__ += algorithms_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
+ ]