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.
- shinestacker/_version.py +1 -1
- shinestacker/algorithms/corrections.py +26 -0
- shinestacker/algorithms/stack.py +9 -0
- shinestacker/algorithms/stack_framework.py +35 -16
- shinestacker/algorithms/utils.py +5 -1
- shinestacker/app/args_parser_opts.py +39 -0
- shinestacker/app/gui_utils.py +19 -2
- shinestacker/app/main.py +16 -27
- shinestacker/app/project.py +12 -23
- shinestacker/app/retouch.py +12 -25
- shinestacker/app/settings_dialog.py +46 -3
- shinestacker/config/settings.py +4 -1
- shinestacker/core/core_utils.py +2 -2
- shinestacker/core/framework.py +7 -2
- shinestacker/core/logging.py +2 -2
- shinestacker/gui/action_config_dialog.py +72 -45
- shinestacker/gui/gui_run.py +1 -2
- shinestacker/gui/ico/shinestacker.icns +0 -0
- shinestacker/gui/img/dark/close-round-line-icon.png +0 -0
- shinestacker/gui/img/dark/forward-button-icon.png +0 -0
- shinestacker/gui/img/dark/play-button-round-icon.png +0 -0
- shinestacker/gui/img/dark/plus-round-line-icon.png +0 -0
- shinestacker/gui/img/dark/shinestacker_bkg.png +0 -0
- shinestacker/gui/img/light/shinestacker_bkg.png +0 -0
- shinestacker/gui/main_window.py +20 -7
- shinestacker/gui/menu_manager.py +18 -7
- shinestacker/gui/new_project.py +0 -2
- shinestacker/gui/tab_widget.py +16 -10
- shinestacker/retouch/adjustments.py +98 -0
- shinestacker/retouch/base_filter.py +62 -7
- shinestacker/retouch/denoise_filter.py +1 -1
- shinestacker/retouch/image_editor_ui.py +26 -4
- shinestacker/retouch/unsharp_mask_filter.py +13 -28
- shinestacker/retouch/vignetting_filter.py +1 -1
- {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/METADATA +4 -4
- {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/RECORD +44 -37
- shinestacker/gui/ico/focus_stack_bkg.png +0 -0
- /shinestacker/gui/img/{close-round-line-icon.png → light/close-round-line-icon.png} +0 -0
- /shinestacker/gui/img/{forward-button-icon.png → light/forward-button-icon.png} +0 -0
- /shinestacker/gui/img/{play-button-round-icon.png → light/play-button-round-icon.png} +0 -0
- /shinestacker/gui/img/{plus-round-line-icon.png → light/plus-round-line-icon.png} +0 -0
- {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/WHEEL +0 -0
- {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/entry_points.txt +0 -0
- {shinestacker-1.6.1.dist-info → shinestacker-1.8.0.dist-info}/licenses/LICENSE +0 -0
- {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.
|
|
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
|
-
|
|
32
|
-
|
|
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
|
-
|
|
50
|
-
self.
|
|
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"][
|
|
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"][
|
|
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.
|
|
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.
|
|
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
|
|
90
|
+
xattr -cr /Applications/shinestacker/shinestacker.app
|
|
91
91
|
```
|
|
92
|
-
5. Now you can double-click the Sine Stacker icon app
|
|
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=
|
|
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=
|
|
19
|
-
shinestacker/algorithms/stack_framework.py,sha256=
|
|
20
|
-
shinestacker/algorithms/utils.py,sha256=
|
|
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=
|
|
26
|
-
shinestacker/app/gui_utils.py,sha256=
|
|
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=
|
|
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=
|
|
31
|
-
shinestacker/app/retouch.py,sha256=
|
|
32
|
-
shinestacker/app/settings_dialog.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
44
|
-
shinestacker/core/logging.py,sha256=
|
|
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=
|
|
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=
|
|
56
|
-
shinestacker/gui/main_window.py,sha256=
|
|
57
|
-
shinestacker/gui/menu_manager.py,sha256=
|
|
58
|
-
shinestacker/gui/new_project.py,sha256=
|
|
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=
|
|
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/
|
|
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=
|
|
74
|
-
shinestacker/gui/img/forward-button-icon.png,sha256=
|
|
75
|
-
shinestacker/gui/img/play-button-round-icon.png,sha256=
|
|
76
|
-
shinestacker/gui/img/plus-round-line-icon.png,sha256=
|
|
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/
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
110
|
+
shinestacker/retouch/vignetting_filter.py,sha256=M7PZGPdVSq4bqo6wkEznrILMIG3-mTT7iwpgK4Hieyg,3794
|
|
104
111
|
shinestacker/retouch/white_balance_filter.py,sha256=UaH4yxG3fU4vPutBAkV5oTXIQyUTN09x0uTywAzv3sY,8286
|
|
105
|
-
shinestacker-1.
|
|
106
|
-
shinestacker-1.
|
|
107
|
-
shinestacker-1.
|
|
108
|
-
shinestacker-1.
|
|
109
|
-
shinestacker-1.
|
|
110
|
-
shinestacker-1.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|