shinestacker 1.6.1__py3-none-any.whl → 1.8.0__py3-none-any.whl

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 (45) hide show
  1. shinestacker/_version.py +1 -1
  2. shinestacker/algorithms/corrections.py +26 -0
  3. shinestacker/algorithms/stack.py +9 -0
  4. shinestacker/algorithms/stack_framework.py +35 -16
  5. shinestacker/algorithms/utils.py +5 -1
  6. shinestacker/app/args_parser_opts.py +39 -0
  7. shinestacker/app/gui_utils.py +19 -2
  8. shinestacker/app/main.py +16 -27
  9. shinestacker/app/project.py +12 -23
  10. shinestacker/app/retouch.py +12 -25
  11. shinestacker/app/settings_dialog.py +46 -3
  12. shinestacker/config/settings.py +4 -1
  13. shinestacker/core/core_utils.py +2 -2
  14. shinestacker/core/framework.py +7 -2
  15. shinestacker/core/logging.py +2 -2
  16. shinestacker/gui/action_config_dialog.py +72 -45
  17. shinestacker/gui/gui_run.py +1 -2
  18. shinestacker/gui/ico/shinestacker.icns +0 -0
  19. shinestacker/gui/img/dark/close-round-line-icon.png +0 -0
  20. shinestacker/gui/img/dark/forward-button-icon.png +0 -0
  21. shinestacker/gui/img/dark/play-button-round-icon.png +0 -0
  22. shinestacker/gui/img/dark/plus-round-line-icon.png +0 -0
  23. shinestacker/gui/img/dark/shinestacker_bkg.png +0 -0
  24. shinestacker/gui/img/light/shinestacker_bkg.png +0 -0
  25. shinestacker/gui/main_window.py +20 -7
  26. shinestacker/gui/menu_manager.py +18 -7
  27. shinestacker/gui/new_project.py +0 -2
  28. shinestacker/gui/tab_widget.py +16 -10
  29. shinestacker/retouch/adjustments.py +98 -0
  30. shinestacker/retouch/base_filter.py +62 -7
  31. shinestacker/retouch/denoise_filter.py +1 -1
  32. shinestacker/retouch/image_editor_ui.py +26 -4
  33. shinestacker/retouch/unsharp_mask_filter.py +13 -28
  34. shinestacker/retouch/vignetting_filter.py +1 -1
  35. {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/METADATA +4 -4
  36. {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/RECORD +44 -37
  37. shinestacker/gui/ico/focus_stack_bkg.png +0 -0
  38. /shinestacker/gui/img/{close-round-line-icon.png → light/close-round-line-icon.png} +0 -0
  39. /shinestacker/gui/img/{forward-button-icon.png → light/forward-button-icon.png} +0 -0
  40. /shinestacker/gui/img/{play-button-round-icon.png → light/play-button-round-icon.png} +0 -0
  41. /shinestacker/gui/img/{plus-round-line-icon.png → light/plus-round-line-icon.png} +0 -0
  42. {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/WHEEL +0 -0
  43. {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/entry_points.txt +0 -0
  44. {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/licenses/LICENSE +0 -0
  45. {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,7 @@ from .. algorithms.denoise import denoise
6
6
  class DenoiseFilter(OneSliderBaseFilter):
7
7
  def __init__(self, name, parent, image_viewer, layer_collection, undo_manager):
8
8
  super().__init__(name, parent, image_viewer, layer_collection, undo_manager,
9
- 10.0, 2.5, "Denoise",
9
+ 0.0, 10.0, 2.5, "Denoise",
10
10
  allow_partial_preview=True, preview_at_startup=False)
11
11
 
12
12
  def apply(self, image, strength):
@@ -24,6 +24,7 @@ from .denoise_filter import DenoiseFilter
24
24
  from .unsharp_mask_filter import UnsharpMaskFilter
25
25
  from .white_balance_filter import WhiteBalanceFilter
26
26
  from .vignetting_filter import VignettingFilter
27
+ from .adjustments import LumiContrastFilter, SaturationVibranceFilter
27
28
  from .transformation_manager import TransfromationManager
28
29
 
29
30
 
@@ -296,6 +297,21 @@ class ImageEditorUI(QMainWindow, LayerCollectionHandler):
296
297
  transf_menu.addAction(rotate_180_action)
297
298
  edit_menu.addMenu(transf_menu)
298
299
 
300
+ adjust_menu = QMenu("&Adjust")
301
+ luminosity_action = QAction("Luminosity, Contrast", self)
302
+ luminosity_action.setProperty("requires_file", True)
303
+ luminosity_action.triggered.connect(self.luminosity_filter)
304
+ adjust_menu.addAction(luminosity_action)
305
+ saturation_action = QAction("Saturation, Vibrance", self)
306
+ saturation_action.setProperty("requires_file", True)
307
+ saturation_action.triggered.connect(self.saturation_filter)
308
+ adjust_menu.addAction(saturation_action)
309
+ white_balance_action = QAction("White Balance", self)
310
+ white_balance_action.setProperty("requires_file", True)
311
+ white_balance_action.triggered.connect(self.white_balance)
312
+ adjust_menu.addAction(white_balance_action)
313
+ edit_menu.addMenu(adjust_menu)
314
+
299
315
  edit_menu.addSeparator()
300
316
 
301
317
  copy_current_to_master_action = QAction("Copy Current Layer to Master", self)
@@ -343,6 +359,10 @@ class ImageEditorUI(QMainWindow, LayerCollectionHandler):
343
359
  self.mark_as_modified,
344
360
  self.view_strategy_menu.setEnabled
345
361
  )
362
+ self.filter_manager.register_filter(
363
+ "Luminosity, Contrast", LumiContrastFilter, *filter_handles)
364
+ self.filter_manager.register_filter(
365
+ "Saturation, Vibrance", SaturationVibranceFilter, *filter_handles)
346
366
  self.filter_manager.register_filter(
347
367
  "Denoise", DenoiseFilter, *filter_handles)
348
368
  self.filter_manager.register_filter(
@@ -462,10 +482,6 @@ class ImageEditorUI(QMainWindow, LayerCollectionHandler):
462
482
  unsharp_mask_action.setProperty("requires_file", True)
463
483
  unsharp_mask_action.triggered.connect(self.unsharp_mask)
464
484
  filter_menu.addAction(unsharp_mask_action)
465
- white_balance_action = QAction("White Balance", self)
466
- white_balance_action.setProperty("requires_file", True)
467
- white_balance_action.triggered.connect(self.white_balance)
468
- filter_menu.addAction(white_balance_action)
469
485
  vignetting_action = QAction("Vignetting Correction", self)
470
486
  vignetting_action.setProperty("requires_file", True)
471
487
  vignetting_action.triggered.connect(self.vignetting_correction)
@@ -660,6 +676,12 @@ class ImageEditorUI(QMainWindow, LayerCollectionHandler):
660
676
  self.redo_action.setText("Redo")
661
677
  self.redo_action.setEnabled(False)
662
678
 
679
+ def luminosity_filter(self):
680
+ self.filter_manager.apply("Luminosity, Contrast")
681
+
682
+ def saturation_filter(self):
683
+ self.filter_manager.apply("Saturation, Vibrance")
684
+
663
685
  def denoise_filter(self):
664
686
  self.filter_manager.apply("Denoise")
665
687
 
@@ -1,6 +1,4 @@
1
1
  # pylint: disable=C0114, C0115, C0116, E0611, W0221, R0902, R0914, R0913, R0917
2
- from PySide6.QtWidgets import QHBoxLayout, QLabel, QSlider, QDialogButtonBox
3
- from PySide6.QtCore import Qt, QTimer
4
2
  from .. algorithms.sharpen import unsharp_mask
5
3
  from .base_filter import BaseFilter
6
4
 
@@ -9,9 +7,11 @@ class UnsharpMaskFilter(BaseFilter):
9
7
  def __init__(self, name, parent, image_viewer, layer_collection, undo_manager):
10
8
  super().__init__(name, parent, image_viewer, layer_collection, undo_manager,
11
9
  preview_at_startup=True)
12
- self.max_range = 500.0
10
+ self.min_radius = 0.0
13
11
  self.max_radius = 4.0
12
+ self.min_amount = 0.0
14
13
  self.max_amount = 3.0
14
+ self.min_threshold = 0.0
15
15
  self.max_threshold = 64.0
16
16
  self.initial_radius = 1.0
17
17
  self.initial_amount = 0.5
@@ -24,31 +24,20 @@ class UnsharpMaskFilter(BaseFilter):
24
24
  dlg.setWindowTitle("Unsharp Mask")
25
25
  dlg.setMinimumWidth(600)
26
26
  params = {
27
- "Radius": (self.max_radius, self.initial_radius, "{:.2f}"),
28
- "Amount": (self.max_amount, self.initial_amount, "{:.1%}"),
29
- "Threshold": (self.max_threshold, self.initial_threshold, "{:.2f}")
27
+ "Radius": (self.min_radius, self.max_radius, self.initial_radius, "{:.2f}"),
28
+ "Amount": (self.min_amount, self.max_amount, self.initial_amount, "{:.1%}"),
29
+ "Threshold": (self.min_threshold, self.max_threshold, self.initial_threshold, "{:.2f}")
30
30
  }
31
- value_labels = {}
32
- for name, (max_val, init_val, fmt) in params.items():
33
- param_layout = QHBoxLayout()
34
- name_label = QLabel(f"{name}:")
35
- param_layout.addWidget(name_label)
36
- slider = QSlider(Qt.Horizontal)
37
- slider.setRange(0, self.max_range)
38
- slider.setValue(int(init_val / max_val * self.max_range))
39
- param_layout.addWidget(slider)
40
- value_label = QLabel(fmt.format(init_val))
41
- param_layout.addWidget(value_label)
42
- layout.addLayout(param_layout)
31
+
32
+ def set_slider(name, slider):
43
33
  if name == "Radius":
44
34
  self.radius_slider = slider
45
35
  elif name == "Amount":
46
36
  self.amount_slider = slider
47
37
  elif name == "Threshold":
48
38
  self.threshold_slider = slider
49
- value_labels[name] = value_label
50
- self.create_base_widgets(
51
- layout, QDialogButtonBox.Ok | QDialogButtonBox.Cancel, 200, dlg)
39
+
40
+ value_labels = self.create_sliders(params, dlg, layout, set_slider)
52
41
 
53
42
  def update_value(name, value, max_val, fmt):
54
43
  float_value = max_val * value / self.max_range
@@ -57,16 +46,12 @@ class UnsharpMaskFilter(BaseFilter):
57
46
  self.preview_timer.start()
58
47
 
59
48
  self.radius_slider.valueChanged.connect(
60
- lambda v: update_value("Radius", v, self.max_radius, params["Radius"][2]))
49
+ lambda v: update_value("Radius", v, self.max_radius, params["Radius"][3]))
61
50
  self.amount_slider.valueChanged.connect(
62
- lambda v: update_value("Amount", v, self.max_amount, params["Amount"][2]))
51
+ lambda v: update_value("Amount", v, self.max_amount, params["Amount"][3]))
63
52
  self.threshold_slider.valueChanged.connect(
64
53
  lambda v: update_value("Threshold", v, self.max_threshold, params["Threshold"][2]))
65
- self.preview_timer.timeout.connect(do_preview)
66
- self.connect_preview_toggle(self.preview_check, do_preview, restore_original)
67
- self.button_box.accepted.connect(dlg.accept)
68
- self.button_box.rejected.connect(dlg.reject)
69
- QTimer.singleShot(0, do_preview)
54
+ self.set_timer(do_preview, restore_original, dlg)
70
55
 
71
56
  def get_params(self):
72
57
  return (
@@ -9,7 +9,7 @@ from .base_filter import OneSliderBaseFilter
9
9
  class VignettingFilter(OneSliderBaseFilter):
10
10
  def __init__(self, name, parent, image_viewer, layer_collection, undo_manager):
11
11
  super().__init__(name, parent, image_viewer, layer_collection, undo_manager,
12
- 1.0, 0.90, "Vignetting correction",
12
+ 0.0, 1.0, 0.90, "Vignetting correction",
13
13
  allow_partial_preview=False, preview_at_startup=False)
14
14
  self.subsample_box = None
15
15
  self.fast_subsampling_check = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 1.6.1
3
+ Version: 1.8.0
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -85,11 +85,11 @@ In order to prevent this, follow the instructions below:
85
85
  1. Download the compressed archive ```shinestacker-macos.tar.gz``` in your ```Download``` folder.
86
86
  2. Double-click the archive to uncompress it. You will find a new folder ```shinestacker```.
87
87
  3. Open a terminal (*Applications > Utilities > Terminal*)
88
- 4. Type the folliwng command on the terminal:
88
+ 4. Type the folliwng command on the terminal (assuming you installed the app from the ```dmg``` image under ```Applications```):
89
89
  ```bash
90
- xattr -cr ~/Downloads/shinestacker/shinestacker.app
90
+ xattr -cr /Applications/shinestacker/shinestacker.app
91
91
  ```
92
- 5. Now you can double-click the Sine Stacker icon app in the ```shiestacker``` folder and it should run.
92
+ 5. Now you can double-click the Sine Stacker icon app and it should run.
93
93
 
94
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.
95
95
 
@@ -1,11 +1,12 @@
1
1
  shinestacker/__init__.py,sha256=uq2fjAw2z_6TpH3mOcWFZ98GoEPRsNhTAK8N0MMm_e8,448
2
- shinestacker/_version.py,sha256=DH87PU9LcZeI_uvttoH-lyhGyb55UShgeFtsG2qIZgE,21
2
+ shinestacker/_version.py,sha256=xuQIDWcR8IgFZlyRjAXziglSj4bv_gjPpNiRgJlQSGc,21
3
3
  shinestacker/algorithms/__init__.py,sha256=1FwVJ3w9GGbFFkjYJRUedTvcdE4j0ieSgaH9RC9iCY4,877
4
4
  shinestacker/algorithms/align.py,sha256=mb44u-YxZI1TTSHz81nRpX_2c8awlOhnGrK0LyfTQeQ,33543
5
5
  shinestacker/algorithms/align_auto.py,sha256=pJetw6zZEWQLouzcelkI8gD4cPiOp887ePXzVbm0E6Q,3800
6
6
  shinestacker/algorithms/align_parallel.py,sha256=5ru4HDcUObLNDP8bPUgsgwpLyflpcyVA16pPqHpYZfs,17671
7
7
  shinestacker/algorithms/balance.py,sha256=aoqnc1u5A2C3R7fKaOoKnzudRiOT8GRIu4LEP-uzyZQ,24053
8
8
  shinestacker/algorithms/base_stack_algo.py,sha256=RzxvLDHqxqhnAl83u2onjvfsRea1qGK_blbh2Vo0kxA,2670
9
+ shinestacker/algorithms/corrections.py,sha256=DrfLM33D20l4svuuBtoOiH-KGUH_BL1mAV7mHCA_nGA,1094
9
10
  shinestacker/algorithms/denoise.py,sha256=GL3Z4_6MHxSa7Wo4ZzQECZS87tHBFqO0sIVF_jPuYQU,426
10
11
  shinestacker/algorithms/depth_map.py,sha256=nRBrZQWbdUqFOtYMEQx9UNdnybrBTeAOr1eV91FlN8U,5611
11
12
  shinestacker/algorithms/exif.py,sha256=SM4ZDDe8hCJ3xY6053FNndOiwzEStzdp0WrXurlcHVc,9429
@@ -15,36 +16,36 @@ shinestacker/algorithms/pyramid.py,sha256=Z7tlp8Hh3ploAXJCr0VNe33d8H9GNrlqHXq_La
15
16
  shinestacker/algorithms/pyramid_auto.py,sha256=fl_jXNYLWsBiX0M0UghzCLqai0SGXlmKYHU7Z9SUYSo,6173
16
17
  shinestacker/algorithms/pyramid_tiles.py,sha256=ZBWIeifkDOIVFF4SCyspRZHSj6K_1P3dk4WLmuo53RU,12213
17
18
  shinestacker/algorithms/sharpen.py,sha256=h7PMJBYxucg194Usp_6pvItPUMFYbT-ebAc_-7XBFUw,949
18
- shinestacker/algorithms/stack.py,sha256=p9bLCbMjDMm7rX_FRfgXRTEJAj3GhNPOCvwePE9hVmc,5549
19
- shinestacker/algorithms/stack_framework.py,sha256=OMrjD5dKquHQXhM7TfLRExDsqN1n938WWhGAfkPYLZM,13883
20
- shinestacker/algorithms/utils.py,sha256=l6GJpEXpzDr_ml9Not03a1_F7wYvPwn8JkEWDuNwL9o,12116
19
+ shinestacker/algorithms/stack.py,sha256=VvYo6w01sGbMIWS3w_4fVz6k7qOTpuEREXTP4kze6B0,5738
20
+ shinestacker/algorithms/stack_framework.py,sha256=x_IFYFgKn8Gz56BOhU7SwsT41WN0DDhITwtmvLaCVgw,14357
21
+ shinestacker/algorithms/utils.py,sha256=VJFOT-OBtDe5ds64VgwyZKa8AX1N91SSJlsgUVC9vMs,12303
21
22
  shinestacker/algorithms/vignetting.py,sha256=gJOv-FN3GnTgaVn70W_6d-qbw3WmqinDiO9oL053cus,10351
22
23
  shinestacker/algorithms/white_balance.py,sha256=PMKsBtxOSn5aRr_Gkx1StHS4eN6kBN2EhNnhg4UG24g,501
23
24
  shinestacker/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
25
  shinestacker/app/about_dialog.py,sha256=pkH7nnxUP8yc0D3vRGd1jRb5cwi1nDVbQRk_OC9yLk8,4144
25
- shinestacker/app/args_parser_opts.py,sha256=c6IUXOI0SJIFckPWPXYnwmBmdNnOcrtvU5S8hUDU_AQ,979
26
- shinestacker/app/gui_utils.py,sha256=EGZejp0XZXRLVa_Wd_2VYAwK3oe9hMSoZzNgT7NUNRw,2986
26
+ shinestacker/app/args_parser_opts.py,sha256=G3jQjxBYk87ycmyf8Idk40c5H90O1l0owz0asTodm88,2183
27
+ shinestacker/app/gui_utils.py,sha256=rNDtC6vQ1hAJ5F3Vd-VKglCE06mhleu5eiw-oitgnxU,3656
27
28
  shinestacker/app/help_menu.py,sha256=g8lKG_xZmXtNQaC3SIRzyROKVWva_PLEgZsQWh6zUcQ,499
28
- shinestacker/app/main.py,sha256=OQwPJvhrsAThv9kmiqtX7CX-smfwXdFXagQmGsQdmuU,11258
29
+ shinestacker/app/main.py,sha256=c9_rax1eemOfkJqWV7tT7-ZkEBkqz6n4kBST8iXsjD4,10662
29
30
  shinestacker/app/open_frames.py,sha256=bsu32iJSYJQLe_tQQbvAU5DuMDVX6MRuNdE7B5lojZc,1488
30
- shinestacker/app/project.py,sha256=jn4LlMTMxrJeAyQQrR5nVS4Di1rOrjiOJ8LOg0CZbwE,3045
31
- shinestacker/app/retouch.py,sha256=fyk74fgpeoBqY1mRJiXWf1hRzSeG7xXFx4V-Sphr3Kg,3069
32
- shinestacker/app/settings_dialog.py,sha256=0P3nqqZEiTIFgidW1_e3Q_zE7NbAouNsuj-yNsU41vk,8192
31
+ shinestacker/app/project.py,sha256=nwvXllD2FBLQ4ChePQdIGVug46Wh2ubjrJ0sC7klops,2596
32
+ shinestacker/app/retouch.py,sha256=8XcYMv7-feG6yxNCpvlijZQRPlhmRK0OfZO5MuBju-0,2552
33
+ shinestacker/app/settings_dialog.py,sha256=udeRsSuTtXNkFio8CVeshOK6g_8ZY-lKMkpJL0iA7-c,10500
33
34
  shinestacker/config/__init__.py,sha256=aXxi-LmAvXd0daIFrVnTHE5OCaYeK1uf1BKMr7oaXQs,197
34
35
  shinestacker/config/app_config.py,sha256=rM1Rndk1GDa5c0AhcVNEN9zSAzxPZixzQYfjODbJUwE,771
35
36
  shinestacker/config/config.py,sha256=eBko2D3ADhLTIm9X6hB_a_WsIjwgfE-qmBVkhP1XSvc,1636
36
37
  shinestacker/config/constants.py,sha256=Z7QjaklrYYsPjTX68Tjyh_wCOuYyQPBR8dnYrZfNwA8,8376
37
38
  shinestacker/config/gui_constants.py,sha256=PNxzwmVEppJ2mV_vwp68NhWzJOEitVy1Pk9SwSmRsho,2882
38
- shinestacker/config/settings.py,sha256=4p4r6wKOCbttzfH9tyHQSTd-iv-GfgCd1LxI3C7WIjU,3861
39
+ shinestacker/config/settings.py,sha256=5_NuuSarJOEPcEH6QyZptvmVp16IzTftp8u0F_FXe8Y,4020
39
40
  shinestacker/core/__init__.py,sha256=IUEIx6SQ3DygDEHN3_E6uKpHjHtUa4a_U_1dLd_8yEU,484
40
41
  shinestacker/core/colors.py,sha256=kr_tJA1iRsdck2JaYDb2lS-codZ4Ty9gdu3kHfiWvuM,1340
41
- shinestacker/core/core_utils.py,sha256=wmpu9_idDRe866JFEylMvGPJRT8lSVhikK9PljcbPSI,1392
42
+ shinestacker/core/core_utils.py,sha256=PYrV5asW-_L_AavPlk6p63UqzuQGrm55hwkRzmaaCd0,1424
42
43
  shinestacker/core/exceptions.py,sha256=2-noG-ORAGdvDhL8jBQFs0xxZS4fI6UIkMqrWekgk2c,1618
43
- shinestacker/core/framework.py,sha256=QaTfnzEUHwzlbyFG7KzeyteckTSWHWEEJE4d5Tc8H18,11015
44
- shinestacker/core/logging.py,sha256=T-ZTGYjN2n2_5Vu2mBJ2id9qj1c9NA79OD2H2w-W0nM,3096
44
+ shinestacker/core/framework.py,sha256=ndSW7xWNDC2OYgaTv_34iVgD_mRXA0dQLSBuuB16REs,11113
45
+ shinestacker/core/logging.py,sha256=pN4FGcHwI5ouJKwCVoDWQx_Tg3t84mmPh0xhqszDDkw,3111
45
46
  shinestacker/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
47
  shinestacker/gui/action_config.py,sha256=Xv7SGbhPl1F_dUnU04VBt_E-wIItnN_q6QuhU_d9GfI,25929
47
- shinestacker/gui/action_config_dialog.py,sha256=QN95FiVPYL6uin2sYO5F7tq6G5rBWh9yRkeTVvwKrwU,38341
48
+ shinestacker/gui/action_config_dialog.py,sha256=mhxcV3loZWq1S7XBUneQHyORboDJbJyxVK-WjgLwj24,39503
48
49
  shinestacker/gui/base_form_dialog.py,sha256=KAUQNtmJazttmOIe4E4pFifbtvcByTAhtCmcIYeA4UE,766
49
50
  shinestacker/gui/colors.py,sha256=-HaFprDuzRSKjXoZfX1rdOuvawQAkazqdgLBEiZcFII,1476
50
51
  shinestacker/gui/config_dialog.py,sha256=yt3nvh0HPHQuCn3AFlzlIHUJnnxcz-Rrw3W3jS9ZYiE,3447
@@ -52,10 +53,10 @@ shinestacker/gui/flow_layout.py,sha256=3yBU_z7VtvHKpx1H97CHVd81eq9pe1Dcja2EZBGGK
52
53
  shinestacker/gui/folder_file_selection.py,sha256=IYWfZQFkoD5iO7zJ7BxVVDP9F3Dc0EXLILAhL4q-Cb8,4117
53
54
  shinestacker/gui/gui_images.py,sha256=k39DpdsxcmYoRdHNNZj6OpFAas0GOHS4JSG542wfheg,5728
54
55
  shinestacker/gui/gui_logging.py,sha256=kiZcrC2AFYCWgPZo0O5SKw-E5cFrezwf4anS3HjPuNw,8168
55
- shinestacker/gui/gui_run.py,sha256=zr7x4BVmM0n_ZRsSEaJVVKvHSWHuwhftgkUvgeg90gU,15767
56
- shinestacker/gui/main_window.py,sha256=0G-ZjSVKY_rCK_DmstRn3wxOdvS5i3Ba3FBR2ijxpe0,25220
57
- shinestacker/gui/menu_manager.py,sha256=q4m3cBSxUR68gexpwfIROVRKJ86zp-XPZVrohh1PfQU,11786
58
- shinestacker/gui/new_project.py,sha256=XMv1ttYrkuqaN9629anXtVSn1bxosgyJpxSFPjlVryU,16437
56
+ shinestacker/gui/gui_run.py,sha256=38ke2Zq7KfQBZDNCzfw6RVIUdDTElLKf-tawBarlWyw,15684
57
+ shinestacker/gui/main_window.py,sha256=VYGX-w-A8sy1zsQAJEfLpImax8oB-inx_nZ2XofDEBQ,25777
58
+ shinestacker/gui/menu_manager.py,sha256=mS-pRMymd1yYimbr6Z5YXjMA5AsNuaNcezs8MYWF2DU,12364
59
+ shinestacker/gui/new_project.py,sha256=bbEKz0e5YsKzB920hTRD4s_Q5B39dQTT_Js7ygVWfeo,16351
59
60
  shinestacker/gui/project_controller.py,sha256=MYv8QJNXUdc7r1K5D6LnBbds9YalCKSAo_CaO6b0TO8,16636
60
61
  shinestacker/gui/project_converter.py,sha256=Gmna0HwbvACcXiX74TaQYumif8ZV8sZ2APLTMM-L1mU,7436
61
62
  shinestacker/gui/project_editor.py,sha256=lSgQ42IoaobHs-NQQWT88Qhg5l7nu5ejxAO5VgIupr8,25498
@@ -63,30 +64,36 @@ shinestacker/gui/project_model.py,sha256=9dId8N-np4YHDpz_wO20Mvd06np3YKlej-0TMWa
63
64
  shinestacker/gui/recent_file_manager.py,sha256=010bciuirKLiVCfOAKs0uFlB3iUjHNBlPX_9K2vH5j0,2916
64
65
  shinestacker/gui/select_path_widget.py,sha256=HSwgSr702w5Et4c-6nkRXnIpm1KFqKJetAF5xQNa5zI,1017
65
66
  shinestacker/gui/sys_mon.py,sha256=zU41YYVeqQ1-v6oGIh2_BFzQWq87keN-398Wdm59-Nk,3526
66
- shinestacker/gui/tab_widget.py,sha256=VgRmuktWXCgbXbV7c1Tho0--W5_EmmzXPfzRZgwhGfg,2965
67
+ shinestacker/gui/tab_widget.py,sha256=rS4OCJMKjjE0yZxVEzohZo7wVlPnTt_BExbh3xWOlio,3122
67
68
  shinestacker/gui/time_progress_bar.py,sha256=7_sllrQgayjRh__mwJ0-4lghXIakuRAx8wWucJ6olYs,3028
68
- shinestacker/gui/ico/focus_stack_bkg.png,sha256=Q86TgqvKEi_IzKI8m6aZB2a3T40UkDtexf2PdeBM9XE,163151
69
- shinestacker/gui/ico/shinestacker.icns,sha256=3IshIOv0uFexYsAEPkE9xiyuw8mB5X5gffekOUhFlt0,45278
69
+ shinestacker/gui/ico/shinestacker.icns,sha256=lKmyIUBTjpMQ6Cajcov6WA5neAbZS9-JN5ca02nCz5I,204834
70
70
  shinestacker/gui/ico/shinestacker.ico,sha256=8IMRk-toObWUz8iDXA-zHBWQ8Ps3vXN5u5ZEyw7sP3c,109613
71
71
  shinestacker/gui/ico/shinestacker.png,sha256=VybGY-nig_-wMW8g_uImGxRYvcnltWcAVEPSX6AZUHM,22448
72
72
  shinestacker/gui/ico/shinestacker.svg,sha256=r8jx5aiIT9K70MRP0ANWniFE0ctRCqH7LMQ7vcGJ8ss,6571
73
- shinestacker/gui/img/close-round-line-icon.png,sha256=9HZwCjgni1s_JGUPUb_MoOfoe4tRZgM5OWzk92XFZlE,8019
74
- shinestacker/gui/img/forward-button-icon.png,sha256=lNw86T4TOEd_uokHYF8myGSGUXzdsHvmDAjlbE18Pgo,4788
75
- shinestacker/gui/img/play-button-round-icon.png,sha256=9j6Ks9mOGa-2cXyRFpimepAAvSaHzqJKBfxShRb4_dE,4595
76
- shinestacker/gui/img/plus-round-line-icon.png,sha256=LS068Hlu-CeBvJuB3dwwdJg1lZq6D5MUIv53lu1yKJA,7534
73
+ shinestacker/gui/img/dark/close-round-line-icon.png,sha256=kq3xxlLpig4t2yBJ_MaSN8zW11YyX7gHlUx6a1L7RV4,13819
74
+ shinestacker/gui/img/dark/forward-button-icon.png,sha256=o26xL4ep0W9Upe6oYoSR4pBZgkZU_eU2UGSczeWOkyM,8102
75
+ shinestacker/gui/img/dark/play-button-round-icon.png,sha256=jAaTZGMsvjWBKMXBANLMGRkQx_tUjBOiEX6oKTmhU5w,7745
76
+ shinestacker/gui/img/dark/plus-round-line-icon.png,sha256=S52m17SVjCxZJECSioDrTInSVgXgVoWYfHqMvlvy1zE,13369
77
+ shinestacker/gui/img/dark/shinestacker_bkg.png,sha256=0kgFDH8lF_ttyhILRJAOn71hbpU-rO4W2DYH05Ib_XY,9748
78
+ shinestacker/gui/img/light/close-round-line-icon.png,sha256=9HZwCjgni1s_JGUPUb_MoOfoe4tRZgM5OWzk92XFZlE,8019
79
+ shinestacker/gui/img/light/forward-button-icon.png,sha256=lNw86T4TOEd_uokHYF8myGSGUXzdsHvmDAjlbE18Pgo,4788
80
+ shinestacker/gui/img/light/play-button-round-icon.png,sha256=9j6Ks9mOGa-2cXyRFpimepAAvSaHzqJKBfxShRb4_dE,4595
81
+ shinestacker/gui/img/light/plus-round-line-icon.png,sha256=LS068Hlu-CeBvJuB3dwwdJg1lZq6D5MUIv53lu1yKJA,7534
82
+ shinestacker/gui/img/light/shinestacker_bkg.png,sha256=C91Ek4bm8hPcit4JUac8FAjRTQsHfiKIKPTZMweHKqo,10462
77
83
  shinestacker/retouch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- shinestacker/retouch/base_filter.py,sha256=ObrAcwZv9YJbIhWMHcryHEEj41oAk9hfHmE4phEd1gE,11263
84
+ shinestacker/retouch/adjustments.py,sha256=LGbsUnPF5CJaJ5U_5Fmk5LoNGW0STttrFUcBjWN06As,3928
85
+ shinestacker/retouch/base_filter.py,sha256=o_OkJbdD3jOGY--_sGL1_WqAMQI-QHGw-EEYxGhXOaQ,13976
79
86
  shinestacker/retouch/brush.py,sha256=dzD2FzSpBIPdJRmTZobcrQ1FrVd3tF__ZPnUplNE72s,357
80
87
  shinestacker/retouch/brush_gradient.py,sha256=F5SFhyzl8YTMqjJU3jK8BrIlLCYLUvITd5wz3cQE4xk,1453
81
88
  shinestacker/retouch/brush_preview.py,sha256=cOFVMCbEsgR_alzmr_-LLghtGU_unrE-hAjLHcvrZAY,5484
82
89
  shinestacker/retouch/brush_tool.py,sha256=8uVncTA375uC3Nhp2YM0eZjpOR-nN47i2eGjN8tJzOU,8714
83
- shinestacker/retouch/denoise_filter.py,sha256=UpNKbFs7uArdglEej8AUHan7oCVYV5E7HNzkovj7XMQ,571
90
+ shinestacker/retouch/denoise_filter.py,sha256=QVXFU54MDcylNWtiIcdQSZ3eClW_xNWZhCMIeoEQ8zk,576
84
91
  shinestacker/retouch/display_manager.py,sha256=fTZTGbvmX5DXagexuvbNgOF5GiH2Vv-stLUQQwoglp8,10181
85
92
  shinestacker/retouch/exif_data.py,sha256=LF-fRXW-reMq-xJ_QRE5j8DC2LVGKIlC6MR3QbC1cdg,1896
86
93
  shinestacker/retouch/file_loader.py,sha256=z02-A8_uDZxayI1NFTxT2GVUvEBWStchX9hlN1o5-0U,4784
87
94
  shinestacker/retouch/filter_manager.py,sha256=tOGIWj5HjViL1-iXHkd91X-sZ1c1G531pDmLO0x6zx0,866
88
95
  shinestacker/retouch/icon_container.py,sha256=6gw1HO1bC2FrdB4dc_iH81DQuLjzuvRGksZ2hKLT9yA,585
89
- shinestacker/retouch/image_editor_ui.py,sha256=r2S4Fgyi3xQi2XeqlVYTUxZ9YlPZe2rMaIpvIak8Aog,33181
96
+ shinestacker/retouch/image_editor_ui.py,sha256=w6tyeYm1Arjyr-MxbLNKYvURV0qEZqigK0iUoqGy92o,34244
90
97
  shinestacker/retouch/image_view_status.py,sha256=2rWi2ugdyjMhWCtRJkwOnb7-tCtVfnGfCY_54qpZhwM,1970
91
98
  shinestacker/retouch/image_viewer.py,sha256=xf1vYZRPb9ClCQbqrqAFhPubdqIIpku7DgcY8O5bvYU,4694
92
99
  shinestacker/retouch/io_gui_handler.py,sha256=tyHMmR6_uE_IEI-CIcJibVhupxarKYHzX2fuhnesHaI,14616
@@ -98,13 +105,13 @@ shinestacker/retouch/shortcuts_help.py,sha256=BFWTT5QvodqMhqa_9LI25hZqjICfckgyWG
98
105
  shinestacker/retouch/sidebyside_view.py,sha256=4sNa_IUMbNH18iECO7eDO9S_ls3v2ENwP1AWrBFhofI,18907
99
106
  shinestacker/retouch/transformation_manager.py,sha256=QFYCL-l9V6qlhw3y7tcs0saWWClNPsh7F9pTBkfPbRU,1711
100
107
  shinestacker/retouch/undo_manager.py,sha256=J4hEAnv9bKLQ0N1wllWswjJBhgRgasCnBoMT5LEw-dM,4453
101
- shinestacker/retouch/unsharp_mask_filter.py,sha256=Iapc8UmSVpj3V0LcJq_38P5qerRqTevMynbbk5Rk6iE,3634
108
+ shinestacker/retouch/unsharp_mask_filter.py,sha256=SO-6ZgPPDAO9em_MMefVvvSvt01-2gm1HF6OBsShmL4,2795
102
109
  shinestacker/retouch/view_strategy.py,sha256=jZxB_vX3_0notH0ClxKkLzbdtx4is3vQiYoIP-sDv3M,30216
103
- shinestacker/retouch/vignetting_filter.py,sha256=JhFr6OVIripQzSJrZEG4lxq7wBsmpofLqJQ-aP2bKw8,3789
110
+ shinestacker/retouch/vignetting_filter.py,sha256=M7PZGPdVSq4bqo6wkEznrILMIG3-mTT7iwpgK4Hieyg,3794
104
111
  shinestacker/retouch/white_balance_filter.py,sha256=UaH4yxG3fU4vPutBAkV5oTXIQyUTN09x0uTywAzv3sY,8286
105
- shinestacker-1.6.1.dist-info/licenses/LICENSE,sha256=pWgb-bBdsU2Gd2kwAXxketnm5W_2u8_fIeWEgojfrxs,7651
106
- shinestacker-1.6.1.dist-info/METADATA,sha256=9sevPHbXS-yaj-wYc-42q28V34PNOdnPlntqNzlsgOo,6978
107
- shinestacker-1.6.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
108
- shinestacker-1.6.1.dist-info/entry_points.txt,sha256=SY6g1LqtMmp23q1DGwLUDT_dhLX9iss8DvWkiWLyo_4,166
109
- shinestacker-1.6.1.dist-info/top_level.txt,sha256=MhijwnBVX5psfsyX8JZjqp3SYiWPsKe69f3Gnyze4Fw,13
110
- shinestacker-1.6.1.dist-info/RECORD,,
112
+ shinestacker-1.8.0.dist-info/licenses/LICENSE,sha256=pWgb-bBdsU2Gd2kwAXxketnm5W_2u8_fIeWEgojfrxs,7651
113
+ shinestacker-1.8.0.dist-info/METADATA,sha256=CMjh4hu6hIdcM1y3GNgnQQ9mAzWV_7PkpR6hBMpMe9c,7031
114
+ shinestacker-1.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
115
+ shinestacker-1.8.0.dist-info/entry_points.txt,sha256=SY6g1LqtMmp23q1DGwLUDT_dhLX9iss8DvWkiWLyo_4,166
116
+ shinestacker-1.8.0.dist-info/top_level.txt,sha256=MhijwnBVX5psfsyX8JZjqp3SYiWPsKe69f3Gnyze4Fw,13
117
+ shinestacker-1.8.0.dist-info/RECORD,,
Binary file