shinestacker 0.2.0.post1.dev1__tar.gz → 0.2.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 (164) hide show
  1. {shinestacker-0.2.0.post1.dev1/sandbox → shinestacker-0.2.1/.github/workflows}/pypi-publish.yml +1 -1
  2. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/PKG-INFO +3 -1
  3. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/README.md +2 -0
  4. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/main.md +2 -0
  5. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/scripts/build_release.py +2 -8
  6. shinestacker-0.2.1/src/shinestacker/_version.py +1 -0
  7. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/main.py +1 -6
  8. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/project.py +2 -1
  9. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/retouch.py +3 -1
  10. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/main_window.py +3 -0
  11. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/new_project.py +1 -6
  12. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/project_editor.py +0 -3
  13. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/exif_data.py +1 -6
  14. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/image_editor.py +0 -2
  15. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/shortcuts_help.py +1 -6
  16. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker.egg-info/PKG-INFO +3 -1
  17. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker.egg-info/SOURCES.txt +5 -5
  18. shinestacker-0.2.0.post1.dev1/src/shinestacker/_version.py +0 -1
  19. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/.flake8 +0 -0
  20. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/.github/workflows/ci-multiplatform.yml +0 -0
  21. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/.github/workflows/release.yml +0 -0
  22. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/.gitignore +0 -0
  23. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/CHANGELOG.md +0 -0
  24. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/LICENSE +0 -0
  25. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/alignment.md +0 -0
  26. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/balancing.md +0 -0
  27. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/focus_stacking.md +0 -0
  28. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/gui.md +0 -0
  29. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/job.md +0 -0
  30. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/multilayer.md +0 -0
  31. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/noise.md +0 -0
  32. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/docs/vignetting.md +0 -0
  33. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/balance-only.fsp +0 -0
  34. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/complete-project.fsp +0 -0
  35. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/focus-stack-1.ipynb +0 -0
  36. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/focus-stack-2.ipynb +0 -0
  37. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-jpg/0000.jpg +0 -0
  38. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-jpg/0001.jpg +0 -0
  39. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-jpg/0002.jpg +0 -0
  40. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-jpg/0003.jpg +0 -0
  41. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-jpg/0004.jpg +0 -0
  42. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-jpg/0005.jpg +0 -0
  43. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-noise/0001.jpg +0 -0
  44. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-noise/0002.jpg +0 -0
  45. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-noise/0003.jpg +0 -0
  46. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-noise/0004.jpg +0 -0
  47. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-noise/0005.jpg +0 -0
  48. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-noise/0006.jpg +0 -0
  49. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-tif/0000.tif +0 -0
  50. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-tif/0001.tif +0 -0
  51. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-tif/0002.tif +0 -0
  52. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-tif/0003.tif +0 -0
  53. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-tif/0004.tif +0 -0
  54. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-tif/0005.tif +0 -0
  55. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-vignetted/vig-0000.jpg +0 -0
  56. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-vignetted/vig-0001.jpg +0 -0
  57. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-vignetted/vig-0002.jpg +0 -0
  58. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/input/img-vignetted/vig-0003.jpg +0 -0
  59. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/stack-comparison.fsp +0 -0
  60. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/stack-from-frames.fsp +0 -0
  61. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/examples/vignetting.fsp +0 -0
  62. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/img/flies.gif +0 -0
  63. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/img/flies_stack.jpg +0 -0
  64. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/img/flow-diagram.png +0 -0
  65. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/img/gui-finder.png +0 -0
  66. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/img/gui-project-new.png +0 -0
  67. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/img/gui-project-run.png +0 -0
  68. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/img/gui-retouch.png +0 -0
  69. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/pyproject.toml +0 -0
  70. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/sandbox/test_alignment_multiple.py +0 -0
  71. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/scripts/validate-tomli.py +0 -0
  72. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/setup.cfg +0 -0
  73. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/__init__.py +0 -0
  74. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/__init__.py +0 -0
  75. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/align.py +0 -0
  76. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/balance.py +0 -0
  77. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/core_utils.py +0 -0
  78. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/depth_map.py +0 -0
  79. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/exif.py +0 -0
  80. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/multilayer.py +0 -0
  81. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/noise_detection.py +0 -0
  82. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/pyramid.py +0 -0
  83. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/stack.py +0 -0
  84. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/stack_framework.py +0 -0
  85. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/utils.py +0 -0
  86. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/algorithms/vignetting.py +0 -0
  87. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/__init__.py +0 -0
  88. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/about_dialog.py +0 -0
  89. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/app_config.py +0 -0
  90. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/gui_utils.py +0 -0
  91. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/help_menu.py +0 -0
  92. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/app/open_frames.py +0 -0
  93. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/config/__init__.py +0 -0
  94. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/config/config.py +0 -0
  95. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/config/constants.py +0 -0
  96. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/config/gui_constants.py +0 -0
  97. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/core/__init__.py +0 -0
  98. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/core/colors.py +0 -0
  99. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/core/core_utils.py +0 -0
  100. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/core/exceptions.py +0 -0
  101. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/core/framework.py +0 -0
  102. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/core/logging.py +0 -0
  103. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/__init__.py +0 -0
  104. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/action_config.py +0 -0
  105. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/actions_window.py +0 -0
  106. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/colors.py +0 -0
  107. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/gui_images.py +0 -0
  108. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/gui_logging.py +0 -0
  109. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/gui_run.py +0 -0
  110. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1/src/shinestacker/gui}/ico/focus_stack_bkg.png +0 -0
  111. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1/src/shinestacker/gui}/ico/shinestacker.icns +0 -0
  112. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1/src/shinestacker/gui}/ico/shinestacker.ico +0 -0
  113. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1/src/shinestacker/gui}/ico/shinestacker.png +0 -0
  114. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/img/close-round-line-icon.png +0 -0
  115. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/img/forward-button-icon.png +0 -0
  116. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/img/play-button-round-icon.png +0 -0
  117. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/img/plus-round-line-icon.png +0 -0
  118. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/project_converter.py +0 -0
  119. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/gui/project_model.py +0 -0
  120. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/__init__.py +0 -0
  121. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/brush.py +0 -0
  122. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/brush_controller.py +0 -0
  123. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/brush_preview.py +0 -0
  124. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/file_loader.py +0 -0
  125. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/image_editor_ui.py +0 -0
  126. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/image_viewer.py +0 -0
  127. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker/retouch/undo_manager.py +0 -0
  128. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker.egg-info/dependency_links.txt +0 -0
  129. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker.egg-info/entry_points.txt +0 -0
  130. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker.egg-info/requires.txt +0 -0
  131. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/src/shinestacker.egg-info/top_level.txt +0 -0
  132. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-align-balance.ipynb +0 -0
  133. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-align.ipynb +0 -0
  134. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-balance.ipynb +0 -0
  135. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-exif.ipynb +0 -0
  136. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-job.ipynb +0 -0
  137. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-logging.ipynb +0 -0
  138. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-multilayer.ipynb +0 -0
  139. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-noise-detection.ipynb +0 -0
  140. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-stack.ipynb +0 -0
  141. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test-vignetting.ipynb +0 -0
  142. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0000_logging.py +0 -0
  143. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0001_colors.py +0 -0
  144. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0005_make_test_img.py +0 -0
  145. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0010_job.py +0 -0
  146. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0020_noise_detection.py +0 -0
  147. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0030_align.py +0 -0
  148. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0031_align_precision.py +0 -0
  149. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0032_align_methods.py +0 -0
  150. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0040_balance.py +0 -0
  151. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0050_align_balance.py +0 -0
  152. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0060_stack.py +0 -0
  153. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0070_multilayer.py +0 -0
  154. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0080_exif.py +0 -0
  155. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_0090_vignetting.py +0 -0
  156. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1000_brush_mask.py +0 -0
  157. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1010_gui.py +0 -0
  158. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1020_gui_images.py +0 -0
  159. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1030_gui_logging.py +0 -0
  160. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1040_action_config.py +0 -0
  161. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1050_project_converter.py +0 -0
  162. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1060_gui_run.py +0 -0
  163. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1070_project_editor.py +0 -0
  164. {shinestacker-0.2.0.post1.dev1 → shinestacker-0.2.1}/tests/test_1080_actions_window.py +0 -0
@@ -10,7 +10,7 @@ jobs:
10
10
  runs-on: ubuntu-latest
11
11
 
12
12
  permissions:
13
- id-token: write # Needed for trusted publishing (if you prefer)
13
+ id-token: write
14
14
  contents: read
15
15
 
16
16
  steps:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 0.2.0.post1.dev1
3
+ Version: 0.2.1
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -30,6 +30,8 @@ Dynamic: license-file
30
30
  # Shine Stacker Processing Framework
31
31
 
32
32
  [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
33
+ [![PyPI version](https://badge.fury.io/py/shinestacker.svg)](https://pypi.org/project/shinestacker/)
34
+ [![Python Versions](https://img.shields.io/pypi/pyversions/shinestacker)](https://pypi.org/project/shinestacker/)
33
35
 
34
36
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400">
35
37
 
@@ -1,6 +1,8 @@
1
1
  # Shine Stacker Processing Framework
2
2
 
3
3
  [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
4
+ [![PyPI version](https://badge.fury.io/py/shinestacker.svg)](https://pypi.org/project/shinestacker/)
5
+ [![Python Versions](https://img.shields.io/pypi/pyversions/shinestacker)](https://pypi.org/project/shinestacker/)
4
6
 
5
7
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400">
6
8
 
@@ -1,6 +1,8 @@
1
1
  # Shine Stacker Processing Framework
2
2
 
3
3
  [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
4
+ [![PyPI version](https://badge.fury.io/py/shinestacker.svg)](https://pypi.org/project/shinestacker/)
5
+ [![Python Versions](https://img.shields.io/pypi/pyversions/shinestacker)](https://pypi.org/project/shinestacker/)
4
6
 
5
7
  <img src='../img/flies.gif' width="400"> <img src='../img/flies_stack.jpg' width="400">
6
8
 
@@ -20,20 +20,14 @@ pyinstaller_cmd = ["pyinstaller", "--onedir", f"--name={app_name}", "--paths=src
20
20
  f"--distpath=dist/{package_dir}", f"--collect-all={project_name}",
21
21
  "--collect-data=imagecodecs", "--collect-submodules=imagecodecs", "--copy-metadata=imagecodecs"]
22
22
  if sys_name == 'darwin':
23
- pyinstaller_cmd += ["--windowed", "--icon=ico/shinestacker.icns"]
23
+ pyinstaller_cmd += ["--windowed", "--icon=src/shinestacker/gui/ico/shinestacker.icns"]
24
24
  elif sys_name == 'windows':
25
- pyinstaller_cmd += ["--windowed", "--icon=ico/shinestacker.ico"]
25
+ pyinstaller_cmd += ["--windowed", "--icon=src/shinestacker/gui/ico/shinestacker.ico"]
26
26
  pyinstaller_cmd += ["src/shinestacker/app/main.py"]
27
27
 
28
28
  print(" ".join(pyinstaller_cmd))
29
29
  subprocess.run(pyinstaller_cmd, check=True)
30
30
 
31
- ico_dir = project_root / "ico"
32
- target_ico = dist_dir / package_dir / "ico"
33
- if target_ico.exists():
34
- shutil.rmtree(target_ico)
35
- shutil.copytree(ico_dir, target_ico)
36
-
37
31
  examples_dir = project_root / "examples"
38
32
  target_examples = dist_dir / package_dir / "examples"
39
33
  target_examples.mkdir(exist_ok=True)
@@ -0,0 +1 @@
1
+ __version__ = '0.2.1'
@@ -138,12 +138,7 @@ expert options are visible by default.
138
138
  app.setAttribute(Qt.AA_DontUseNativeMenuBar)
139
139
  else:
140
140
  disable_macos_special_menu_items()
141
- icon_path = f'{get_app_base_path()}'
142
- if os.path.exists(f'{icon_path}/ico'):
143
- icon_path = f'{icon_path}/ico'
144
- else:
145
- icon_path = f'{icon_path}/../ico'
146
- icon_path = f'{icon_path}/shinestacker.png'
141
+ icon_path = f"{os.path.dirname(__file__)}/../gui/ico/shinestacker.png"
147
142
  app.setWindowIcon(QIcon(icon_path))
148
143
  main_app = MainApp()
149
144
  app.main_app = main_app
@@ -73,7 +73,8 @@ expert options are visible by default.
73
73
  app.setAttribute(Qt.AA_DontUseNativeMenuBar)
74
74
  else:
75
75
  disable_macos_special_menu_items()
76
- app.setWindowIcon(QIcon(f'{get_app_base_path()}/ico/shinestacker.png'))
76
+ icon_path = f"{os.path.dirname(__file__)}/../gui/ico/shinestacker.png"
77
+ app.setWindowIcon(QIcon(icon_path))
77
78
  window = ProjectApp()
78
79
  if args['expert']:
79
80
  window.set_expert_options()
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import sys
2
3
  import argparse
3
4
  from PySide6.QtWidgets import QApplication, QMenu
@@ -70,7 +71,8 @@ Multiple directories can be specified separated by ';'.
70
71
  app.setAttribute(Qt.AA_DontUseNativeMenuBar)
71
72
  else:
72
73
  disable_macos_special_menu_items()
73
- app.setWindowIcon(QIcon(f'{get_app_base_path()}/ico/shinestacker.png'))
74
+ icon_path = f"{os.path.dirname(__file__)}/../gui/ico/shinestacker.png"
75
+ app.setWindowIcon(QIcon(icon_path))
74
76
  editor = RetouchApp()
75
77
  app.editor = editor
76
78
  editor.show()
@@ -414,6 +414,9 @@ class MainWindow(ActionsWindow, LogManager):
414
414
  menu.addAction(self.job_retouch_path_action)
415
415
  menu.exec(event.globalPos())
416
416
 
417
+ def get_icon(self, icon):
418
+ return QIcon(os.path.join(self.script_dir, f"img/{icon}.png"))
419
+
417
420
  def get_retouch_path(self, job):
418
421
  frames_path = [get_action_output_path(action)[0]
419
422
  for action in job.sub_actions if action.type_name == constants.ACTION_COMBO]
@@ -39,12 +39,7 @@ class NewProjectDialog(QDialog):
39
39
  self.layout.addRow(label)
40
40
 
41
41
  def create_form(self):
42
- icon_path = f'{get_app_base_path()}'
43
- if os.path.exists(f'{icon_path}/ico'):
44
- icon_path = f'{icon_path}/ico'
45
- else:
46
- icon_path = f'{icon_path}/../ico'
47
- icon_path = f'{icon_path}/shinestacker.png'
42
+ icon_path = f"{os.path.dirname(__file__)}/ico/shinestacker.png"
48
43
  app_icon = QIcon(icon_path)
49
44
  icon_pixmap = app_icon.pixmap(128, 128)
50
45
  icon_label = QLabel()
@@ -328,9 +328,6 @@ class ProjectEditor(QMainWindow):
328
328
  label = QLabel(html_text)
329
329
  widget_list.setItemWidget(item, label)
330
330
 
331
- def get_icon(self, icon):
332
- return QIcon(os.path.join(self.script_dir, f"img/{icon}.png"))
333
-
334
331
  def add_action_CombinedActions(self):
335
332
  self.add_action(constants.ACTION_COMBO)
336
333
 
@@ -32,12 +32,7 @@ class ExifData(QDialog):
32
32
  self.layout.addRow(label)
33
33
 
34
34
  def create_form(self):
35
- icon_path = f'{get_app_base_path()}'
36
- if os.path.exists(f'{icon_path}/ico'):
37
- icon_path = f'{icon_path}/ico'
38
- else:
39
- icon_path = f'{icon_path}/../ico'
40
- icon_path = f'{icon_path}/shinestacker.png'
35
+ icon_path = f"{os.path.dirname(__file__)}/../gui/ico/shinestacker.png"
41
36
  app_icon = QIcon(icon_path)
42
37
  icon_pixmap = app_icon.pixmap(128, 128)
43
38
  icon_label = QLabel()
@@ -364,8 +364,6 @@ class ImageEditor(QMainWindow):
364
364
  QMessageBox.critical(self, "Save Error", f"Could not save file: {str(e)}")
365
365
 
366
366
  def select_exif_path(self):
367
- if self.current_stack is None:
368
- return
369
367
  path, _ = QFileDialog.getOpenFileName(None, "Select file with exif data")
370
368
  if path:
371
369
  self.exif_path = path
@@ -44,12 +44,7 @@ class ShortcutsHelp(QDialog):
44
44
  layout.addRow(label)
45
45
 
46
46
  def create_form(self, left_layout, right_layout):
47
- icon_path = f'{get_app_base_path()}'
48
- if os.path.exists(f'{icon_path}/ico'):
49
- icon_path = f'{icon_path}/ico'
50
- else:
51
- icon_path = f'{icon_path}/../ico'
52
- icon_path = f'{icon_path}/shinestacker.png'
47
+ icon_path = f"{os.path.dirname(__file__)}/../gui/ico/shinestacker.png"
53
48
  app_icon = QIcon(icon_path)
54
49
  icon_pixmap = app_icon.pixmap(128, 128)
55
50
  icon_label = QLabel()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 0.2.0.post1.dev1
3
+ Version: 0.2.1
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -30,6 +30,8 @@ Dynamic: license-file
30
30
  # Shine Stacker Processing Framework
31
31
 
32
32
  [![CI multiplatform](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml/badge.svg)](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
33
+ [![PyPI version](https://badge.fury.io/py/shinestacker.svg)](https://pypi.org/project/shinestacker/)
34
+ [![Python Versions](https://img.shields.io/pypi/pyversions/shinestacker)](https://pypi.org/project/shinestacker/)
33
35
 
34
36
  <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400">
35
37
 
@@ -5,6 +5,7 @@ LICENSE
5
5
  README.md
6
6
  pyproject.toml
7
7
  .github/workflows/ci-multiplatform.yml
8
+ .github/workflows/pypi-publish.yml
8
9
  .github/workflows/release.yml
9
10
  docs/alignment.md
10
11
  docs/balancing.md
@@ -44,10 +45,6 @@ examples/input/img-vignetted/vig-0000.jpg
44
45
  examples/input/img-vignetted/vig-0001.jpg
45
46
  examples/input/img-vignetted/vig-0002.jpg
46
47
  examples/input/img-vignetted/vig-0003.jpg
47
- ico/focus_stack_bkg.png
48
- ico/shinestacker.icns
49
- ico/shinestacker.ico
50
- ico/shinestacker.png
51
48
  img/flies.gif
52
49
  img/flies_stack.jpg
53
50
  img/flow-diagram.png
@@ -55,7 +52,6 @@ img/gui-finder.png
55
52
  img/gui-project-new.png
56
53
  img/gui-project-run.png
57
54
  img/gui-retouch.png
58
- sandbox/pypi-publish.yml
59
55
  sandbox/test_alignment_multiple.py
60
56
  scripts/build_release.py
61
57
  scripts/validate-tomli.py
@@ -111,6 +107,10 @@ src/shinestacker/gui/new_project.py
111
107
  src/shinestacker/gui/project_converter.py
112
108
  src/shinestacker/gui/project_editor.py
113
109
  src/shinestacker/gui/project_model.py
110
+ src/shinestacker/gui/ico/focus_stack_bkg.png
111
+ src/shinestacker/gui/ico/shinestacker.icns
112
+ src/shinestacker/gui/ico/shinestacker.ico
113
+ src/shinestacker/gui/ico/shinestacker.png
114
114
  src/shinestacker/gui/img/close-round-line-icon.png
115
115
  src/shinestacker/gui/img/forward-button-icon.png
116
116
  src/shinestacker/gui/img/play-button-round-icon.png
@@ -1 +0,0 @@
1
- __version__ = '0.2.0.post1.dev1'