shinestacker 1.3.0__py3-none-any.whl → 1.3.1__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/align.py +35 -27
- shinestacker/algorithms/align_auto.py +15 -3
- shinestacker/algorithms/align_parallel.py +65 -25
- shinestacker/algorithms/base_stack_algo.py +14 -20
- shinestacker/algorithms/depth_map.py +9 -14
- shinestacker/algorithms/pyramid.py +8 -22
- shinestacker/algorithms/pyramid_auto.py +5 -14
- shinestacker/algorithms/pyramid_tiles.py +18 -20
- shinestacker/algorithms/stack_framework.py +1 -1
- shinestacker/algorithms/utils.py +16 -0
- shinestacker/app/gui_utils.py +10 -0
- shinestacker/app/main.py +3 -1
- shinestacker/app/project.py +3 -1
- shinestacker/app/retouch.py +3 -1
- shinestacker/gui/action_config_dialog.py +302 -272
- shinestacker/gui/colors.py +1 -0
- shinestacker/gui/folder_file_selection.py +5 -0
- shinestacker/gui/main_window.py +4 -4
- shinestacker/gui/new_project.py +5 -5
- shinestacker/gui/project_editor.py +6 -4
- shinestacker/gui/sys_mon.py +24 -23
- {shinestacker-1.3.0.dist-info → shinestacker-1.3.1.dist-info}/METADATA +1 -1
- {shinestacker-1.3.0.dist-info → shinestacker-1.3.1.dist-info}/RECORD +28 -28
- {shinestacker-1.3.0.dist-info → shinestacker-1.3.1.dist-info}/WHEEL +0 -0
- {shinestacker-1.3.0.dist-info → shinestacker-1.3.1.dist-info}/entry_points.txt +0 -0
- {shinestacker-1.3.0.dist-info → shinestacker-1.3.1.dist-info}/licenses/LICENSE +0 -0
- {shinestacker-1.3.0.dist-info → shinestacker-1.3.1.dist-info}/top_level.txt +0 -0
shinestacker/gui/colors.py
CHANGED
|
@@ -16,6 +16,7 @@ class ColorPalette:
|
|
|
16
16
|
BLACK = ColorEntry(0, 0, 0)
|
|
17
17
|
WHITE = ColorEntry(255, 255, 255)
|
|
18
18
|
LIGHT_BLUE = ColorEntry(210, 210, 240)
|
|
19
|
+
LIGHT_GREEN = ColorEntry(210, 240, 210)
|
|
19
20
|
LIGHT_RED = ColorEntry(240, 210, 210)
|
|
20
21
|
DARK_BLUE = ColorEntry(0, 0, 160)
|
|
21
22
|
DARK_RED = ColorEntry(160, 0, 0)
|
|
@@ -58,6 +58,7 @@ class FolderFileSelectionWidget(QWidget):
|
|
|
58
58
|
# self.path_edit.setPlaceholderText("input files")
|
|
59
59
|
|
|
60
60
|
def handle_browse(self):
|
|
61
|
+
self.path_edit.setText('')
|
|
61
62
|
if self.selection_mode == 'folder':
|
|
62
63
|
self.browse_folder()
|
|
63
64
|
else:
|
|
@@ -80,6 +81,7 @@ class FolderFileSelectionWidget(QWidget):
|
|
|
80
81
|
self.selected_files = files
|
|
81
82
|
self.path_edit.setText(parent_dir)
|
|
82
83
|
else:
|
|
84
|
+
self.selected_files = []
|
|
83
85
|
QMessageBox.warning(
|
|
84
86
|
self, "Invalid Selection",
|
|
85
87
|
"All files must be in the same directory."
|
|
@@ -91,6 +93,9 @@ class FolderFileSelectionWidget(QWidget):
|
|
|
91
93
|
def get_selected_files(self):
|
|
92
94
|
return self.selected_files
|
|
93
95
|
|
|
96
|
+
def num_selected_files(self):
|
|
97
|
+
return len(self.selected_files)
|
|
98
|
+
|
|
94
99
|
def get_selected_filenames(self):
|
|
95
100
|
return [os.path.basename(file_path) for file_path in self.selected_files]
|
|
96
101
|
|
shinestacker/gui/main_window.py
CHANGED
|
@@ -301,6 +301,9 @@ class MainWindow(QMainWindow, LogManager):
|
|
|
301
301
|
edit_config_action.triggered.connect(self.edit_current_action)
|
|
302
302
|
menu.addAction(edit_config_action)
|
|
303
303
|
menu.addSeparator()
|
|
304
|
+
menu.addAction(self.menu_manager.run_job_action)
|
|
305
|
+
menu.addAction(self.menu_manager.run_all_jobs_action)
|
|
306
|
+
menu.addSeparator()
|
|
304
307
|
self.current_action_working_path, name = get_action_working_path(current_action)
|
|
305
308
|
if self.current_action_working_path != '' and \
|
|
306
309
|
os.path.exists(self.current_action_working_path):
|
|
@@ -339,9 +342,6 @@ class MainWindow(QMainWindow, LogManager):
|
|
|
339
342
|
self.browse_output_path_action = QAction(action_name)
|
|
340
343
|
self.browse_output_path_action.triggered.connect(self.browse_output_path)
|
|
341
344
|
menu.addAction(self.browse_output_path_action)
|
|
342
|
-
menu.addSeparator()
|
|
343
|
-
menu.addAction(self.menu_manager.run_job_action)
|
|
344
|
-
menu.addAction(self.menu_manager.run_all_jobs_action)
|
|
345
345
|
if current_action.type_name == constants.ACTION_JOB:
|
|
346
346
|
retouch_path = self.get_retouch_path(current_action)
|
|
347
347
|
if len(retouch_path) > 0:
|
|
@@ -533,7 +533,7 @@ class MainWindow(QMainWindow, LogManager):
|
|
|
533
533
|
r = self.get_retouch_path(job)
|
|
534
534
|
if len(r) > 0:
|
|
535
535
|
retouch_paths.append((job.params["name"], r))
|
|
536
|
-
new_window, id_str = self.create_new_window(f"{project_name} [Project
|
|
536
|
+
new_window, id_str = self.create_new_window(f"{project_name} [Project]",
|
|
537
537
|
labels, retouch_paths)
|
|
538
538
|
worker = ProjectLogWorker(self.project(), id_str)
|
|
539
539
|
self.connect_worker_signals(worker, new_window)
|
shinestacker/gui/new_project.py
CHANGED
|
@@ -75,7 +75,7 @@ class NewProjectDialog(BaseFormDialog):
|
|
|
75
75
|
self.focus_stack_depth_map.setChecked(gui_constants.NEW_PROJECT_FOCUS_STACK_DEPTH_MAP)
|
|
76
76
|
self.multi_layer = QCheckBox()
|
|
77
77
|
self.multi_layer.setChecked(gui_constants.NEW_PROJECT_MULTI_LAYER)
|
|
78
|
-
step1_group = QGroupBox("1
|
|
78
|
+
step1_group = QGroupBox("1) Select Input")
|
|
79
79
|
step1_layout = QVBoxLayout()
|
|
80
80
|
step1_layout.setContentsMargins(15, 0, 15, 15)
|
|
81
81
|
step1_layout.addWidget(
|
|
@@ -92,7 +92,7 @@ class NewProjectDialog(BaseFormDialog):
|
|
|
92
92
|
step1_layout.addLayout(input_form)
|
|
93
93
|
step1_group.setLayout(step1_layout)
|
|
94
94
|
self.form_layout.addRow(step1_group)
|
|
95
|
-
step2_group = QGroupBox("2
|
|
95
|
+
step2_group = QGroupBox("2) Basic Options")
|
|
96
96
|
step2_layout = QFormLayout()
|
|
97
97
|
step2_layout.setContentsMargins(15, 0, 15, 15)
|
|
98
98
|
step2_layout.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
|
|
@@ -136,7 +136,7 @@ class NewProjectDialog(BaseFormDialog):
|
|
|
136
136
|
"Save multi layer TIFF:", self.multi_layer)
|
|
137
137
|
step2_group.setLayout(step2_layout)
|
|
138
138
|
self.form_layout.addRow(step2_group)
|
|
139
|
-
step3_group = QGroupBox("3
|
|
139
|
+
step3_group = QGroupBox("3) Confirm")
|
|
140
140
|
step3_layout = QVBoxLayout()
|
|
141
141
|
step3_layout.setContentsMargins(15, 0, 15, 15)
|
|
142
142
|
step3_layout.addWidget(
|
|
@@ -145,7 +145,7 @@ class NewProjectDialog(BaseFormDialog):
|
|
|
145
145
|
QLabel("Select: <b>View</b> > <b>Expert options</b> for advanced configuration."))
|
|
146
146
|
step3_group.setLayout(step3_layout)
|
|
147
147
|
self.form_layout.addRow(step3_group)
|
|
148
|
-
step4_group = QGroupBox("4
|
|
148
|
+
step4_group = QGroupBox("4) Execute")
|
|
149
149
|
step4_layout = QHBoxLayout()
|
|
150
150
|
step4_layout.setContentsMargins(15, 0, 15, 15)
|
|
151
151
|
step4_layout.addWidget(QLabel("Press ▶️ to run your job."))
|
|
@@ -200,7 +200,7 @@ class NewProjectDialog(BaseFormDialog):
|
|
|
200
200
|
return count
|
|
201
201
|
if self.input_widget.get_selection_mode() == 'files' and \
|
|
202
202
|
self.input_widget.get_selected_files():
|
|
203
|
-
self.n_image_files =
|
|
203
|
+
self.n_image_files = self.input_widget.num_selected_files()
|
|
204
204
|
self.selected_filenames = self.input_widget.get_selected_filenames()
|
|
205
205
|
else:
|
|
206
206
|
self.n_image_files = count_image_files(self.input_widget.get_path())
|
|
@@ -268,7 +268,7 @@ class ProjectEditor(QObject):
|
|
|
268
268
|
if os.path.isabs(in_path):
|
|
269
269
|
in_path = ".../" + os.path.basename(in_path)
|
|
270
270
|
ico = constants.ACTION_ICONS[constants.ACTION_JOB]
|
|
271
|
-
return txt + (f" [{ico}Job
|
|
271
|
+
return txt + (f" [{ico}Job] - 📁 {in_path} → 📂 ..." if long_name else "")
|
|
272
272
|
|
|
273
273
|
def action_text(self, action, is_sub_action=False, indent=True, long_name=False, html=False):
|
|
274
274
|
ico = constants.ACTION_ICONS.get(action.type_name, '')
|
|
@@ -285,9 +285,9 @@ class ProjectEditor(QObject):
|
|
|
285
285
|
in_path = ".../" + os.path.basename(in_path)
|
|
286
286
|
if os.path.isabs(out_path):
|
|
287
287
|
out_path = ".../" + os.path.basename(out_path)
|
|
288
|
-
return f"{txt} [{ico}{action.type_name}" + \
|
|
289
|
-
(f"
|
|
290
|
-
if long_name and not is_sub_action else "
|
|
288
|
+
return f"{txt} [{ico}{action.type_name}]" + \
|
|
289
|
+
(f" - 📁 <i>{in_path}</i> → 📂 <i>{out_path}</i>"
|
|
290
|
+
if long_name and not is_sub_action else "")
|
|
291
291
|
|
|
292
292
|
def get_job_at(self, index):
|
|
293
293
|
return None if index < 0 else self.project_job(index)
|
|
@@ -495,6 +495,8 @@ class ProjectEditor(QObject):
|
|
|
495
495
|
text = self.action_text(action, long_name=True, html=True, is_sub_action=is_sub_action)
|
|
496
496
|
item = QListWidgetItem()
|
|
497
497
|
item.setText('')
|
|
498
|
+
item.setToolTip("<b>Double-click:</b> configure parameters<br>"
|
|
499
|
+
"<b>Right-click:</b> show menu")
|
|
498
500
|
item.setData(Qt.ItemDataRole.UserRole, True)
|
|
499
501
|
widget_list.addItem(item)
|
|
500
502
|
html_text = f"✅ <span style='color:#{ColorPalette.DARK_BLUE.hex()};'>{text}</span>" \
|
shinestacker/gui/sys_mon.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import psutil
|
|
3
3
|
from PySide6.QtWidgets import QWidget, QHBoxLayout, QLabel, QProgressBar, QSizePolicy
|
|
4
4
|
from PySide6.QtCore import QTimer, Qt
|
|
5
|
+
from .colors import ColorPalette
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class StatusBarSystemMonitor(QWidget):
|
|
@@ -13,7 +14,7 @@ class StatusBarSystemMonitor(QWidget):
|
|
|
13
14
|
|
|
14
15
|
def setup_ui(self):
|
|
15
16
|
bar_width = 100
|
|
16
|
-
bar_height =
|
|
17
|
+
bar_height = 22
|
|
17
18
|
layout = QHBoxLayout()
|
|
18
19
|
layout.setSpacing(10)
|
|
19
20
|
layout.setContentsMargins(0, 2, 0, 0)
|
|
@@ -25,27 +26,27 @@ class StatusBarSystemMonitor(QWidget):
|
|
|
25
26
|
self.cpu_bar.setRange(0, 100)
|
|
26
27
|
self.cpu_bar.setTextVisible(False)
|
|
27
28
|
self.cpu_bar.setGeometry(0, 0, bar_width, bar_height)
|
|
28
|
-
self.cpu_bar.setStyleSheet("""
|
|
29
|
-
QProgressBar {
|
|
29
|
+
self.cpu_bar.setStyleSheet(f"""
|
|
30
|
+
QProgressBar {{
|
|
30
31
|
border: 1px solid #cccccc;
|
|
31
32
|
border-radius: 5px;
|
|
32
|
-
background: #
|
|
33
|
-
}
|
|
34
|
-
QProgressBar::chunk {
|
|
35
|
-
background-color: #
|
|
33
|
+
background: #F0F0F0;
|
|
34
|
+
}}
|
|
35
|
+
QProgressBar::chunk {{
|
|
36
|
+
background-color: #{ColorPalette.LIGHT_BLUE.hex()};
|
|
36
37
|
border-radius: 5px;
|
|
37
|
-
}
|
|
38
|
+
}}
|
|
38
39
|
""")
|
|
39
40
|
self.cpu_label = QLabel("CPU: --%", cpu_widget)
|
|
40
41
|
self.cpu_label.setAlignment(Qt.AlignCenter)
|
|
41
42
|
self.cpu_label.setGeometry(0, 0, bar_width, bar_height)
|
|
42
|
-
self.cpu_label.setStyleSheet("""
|
|
43
|
-
QLabel {
|
|
44
|
-
color: #
|
|
43
|
+
self.cpu_label.setStyleSheet(f"""
|
|
44
|
+
QLabel {{
|
|
45
|
+
color: #{ColorPalette.DARK_BLUE.hex()};
|
|
45
46
|
font-weight: bold;
|
|
46
47
|
background: transparent;
|
|
47
48
|
font-size: 12px;
|
|
48
|
-
}
|
|
49
|
+
}}
|
|
49
50
|
""")
|
|
50
51
|
mem_widget = QWidget()
|
|
51
52
|
mem_widget.setFixedSize(bar_width, bar_height)
|
|
@@ -53,27 +54,27 @@ class StatusBarSystemMonitor(QWidget):
|
|
|
53
54
|
self.mem_bar.setRange(0, 100)
|
|
54
55
|
self.mem_bar.setTextVisible(False)
|
|
55
56
|
self.mem_bar.setGeometry(0, 0, bar_width, bar_height)
|
|
56
|
-
self.mem_bar.setStyleSheet("""
|
|
57
|
-
QProgressBar {
|
|
58
|
-
border: 1px solid #
|
|
57
|
+
self.mem_bar.setStyleSheet(f"""
|
|
58
|
+
QProgressBar {{
|
|
59
|
+
border: 1px solid #CCCCCC;
|
|
59
60
|
border-radius: 5px;
|
|
60
61
|
background: #f0f0f0;
|
|
61
|
-
}
|
|
62
|
-
QProgressBar::chunk {
|
|
63
|
-
background-color: #
|
|
62
|
+
}}
|
|
63
|
+
QProgressBar::chunk {{
|
|
64
|
+
background-color: #{ColorPalette.LIGHT_GREEN.hex()};
|
|
64
65
|
border-radius: 5px;
|
|
65
|
-
}
|
|
66
|
+
}}
|
|
66
67
|
""")
|
|
67
68
|
self.mem_label = QLabel("MEM: --%", mem_widget)
|
|
68
69
|
self.mem_label.setAlignment(Qt.AlignCenter)
|
|
69
70
|
self.mem_label.setGeometry(0, 0, bar_width, bar_height)
|
|
70
|
-
self.mem_label.setStyleSheet("""
|
|
71
|
-
QLabel {
|
|
72
|
-
color: #
|
|
71
|
+
self.mem_label.setStyleSheet(f"""
|
|
72
|
+
QLabel {{
|
|
73
|
+
color: #{ColorPalette.DARK_BLUE.hex()};
|
|
73
74
|
font-weight: bold;
|
|
74
75
|
background: transparent;
|
|
75
76
|
font-size: 12px;
|
|
76
|
-
}
|
|
77
|
+
}}
|
|
77
78
|
""")
|
|
78
79
|
layout.addWidget(cpu_widget)
|
|
79
80
|
layout.addWidget(mem_widget)
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
shinestacker/__init__.py,sha256=uq2fjAw2z_6TpH3mOcWFZ98GoEPRsNhTAK8N0MMm_e8,448
|
|
2
|
-
shinestacker/_version.py,sha256=
|
|
2
|
+
shinestacker/_version.py,sha256=U9SSjW6vREFTPVkV-L7VR9upz56SvAyLuYgaMCMvw0E,21
|
|
3
3
|
shinestacker/algorithms/__init__.py,sha256=1FwVJ3w9GGbFFkjYJRUedTvcdE4j0ieSgaH9RC9iCY4,877
|
|
4
|
-
shinestacker/algorithms/align.py,sha256=
|
|
5
|
-
shinestacker/algorithms/align_auto.py,sha256=
|
|
6
|
-
shinestacker/algorithms/align_parallel.py,sha256=
|
|
4
|
+
shinestacker/algorithms/align.py,sha256=V6JUTk9zTntnlSbltJnlli32Yl7n3ozWg4PBJQOx190,23735
|
|
5
|
+
shinestacker/algorithms/align_auto.py,sha256=pJetw6zZEWQLouzcelkI8gD4cPiOp887ePXzVbm0E6Q,3800
|
|
6
|
+
shinestacker/algorithms/align_parallel.py,sha256=s4BlLRLDcIFOzZIQEM49rhilyu_Uy15-IeyN0nDbdno,16985
|
|
7
7
|
shinestacker/algorithms/balance.py,sha256=KJ8eXWYyqRVQa7_iZWQhZZ9BfO4wNve5nhZxunK7B5k,23583
|
|
8
|
-
shinestacker/algorithms/base_stack_algo.py,sha256=
|
|
8
|
+
shinestacker/algorithms/base_stack_algo.py,sha256=RzxvLDHqxqhnAl83u2onjvfsRea1qGK_blbh2Vo0kxA,2670
|
|
9
9
|
shinestacker/algorithms/denoise.py,sha256=GL3Z4_6MHxSa7Wo4ZzQECZS87tHBFqO0sIVF_jPuYQU,426
|
|
10
|
-
shinestacker/algorithms/depth_map.py,sha256=
|
|
10
|
+
shinestacker/algorithms/depth_map.py,sha256=nRBrZQWbdUqFOtYMEQx9UNdnybrBTeAOr1eV91FlN8U,5611
|
|
11
11
|
shinestacker/algorithms/exif.py,sha256=SM4ZDDe8hCJ3xY6053FNndOiwzEStzdp0WrXurlcHVc,9429
|
|
12
12
|
shinestacker/algorithms/multilayer.py,sha256=WlB4L5oY9qra3w7Qahg-tqO6S_s3pMB_LmGR8PPR_7w,9904
|
|
13
13
|
shinestacker/algorithms/noise_detection.py,sha256=KSdMDER5GNOCTD6DIAbjJvRDFvrVorul3xr5maXtCh8,9298
|
|
14
|
-
shinestacker/algorithms/pyramid.py,sha256=
|
|
15
|
-
shinestacker/algorithms/pyramid_auto.py,sha256=
|
|
16
|
-
shinestacker/algorithms/pyramid_tiles.py,sha256=
|
|
14
|
+
shinestacker/algorithms/pyramid.py,sha256=Z7tlp8Hh3ploAXJCr0VNe33d8H9GNrlqHXq_LapgRwo,8205
|
|
15
|
+
shinestacker/algorithms/pyramid_auto.py,sha256=fl_jXNYLWsBiX0M0UghzCLqai0SGXlmKYHU7Z9SUYSo,6173
|
|
16
|
+
shinestacker/algorithms/pyramid_tiles.py,sha256=ZBWIeifkDOIVFF4SCyspRZHSj6K_1P3dk4WLmuo53RU,12213
|
|
17
17
|
shinestacker/algorithms/sharpen.py,sha256=h7PMJBYxucg194Usp_6pvItPUMFYbT-ebAc_-7XBFUw,949
|
|
18
18
|
shinestacker/algorithms/stack.py,sha256=V9YX0CbNWrgAo7_uti64rmmuwU6RsRcjDoBpsES4aSE,5137
|
|
19
|
-
shinestacker/algorithms/stack_framework.py,sha256=
|
|
20
|
-
shinestacker/algorithms/utils.py,sha256=
|
|
19
|
+
shinestacker/algorithms/stack_framework.py,sha256=OMrjD5dKquHQXhM7TfLRExDsqN1n938WWhGAfkPYLZM,13883
|
|
20
|
+
shinestacker/algorithms/utils.py,sha256=oyt2sQQsgcTyemlVcU2hJRSza6ntsXQbG7WhHJTP7a0,11808
|
|
21
21
|
shinestacker/algorithms/vignetting.py,sha256=MwhsTqmNMc6GdQl_Bbuyo8IUQPn1OoeGcWj1L6Jjybc,10274
|
|
22
22
|
shinestacker/algorithms/white_balance.py,sha256=PMKsBtxOSn5aRr_Gkx1StHS4eN6kBN2EhNnhg4UG24g,501
|
|
23
23
|
shinestacker/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
24
|
shinestacker/app/about_dialog.py,sha256=pkH7nnxUP8yc0D3vRGd1jRb5cwi1nDVbQRk_OC9yLk8,4144
|
|
25
|
-
shinestacker/app/gui_utils.py,sha256=
|
|
25
|
+
shinestacker/app/gui_utils.py,sha256=fSpkwPXTON_l676UHdAnJNrGq7BPbSlPOiHpOF_LZaI,2519
|
|
26
26
|
shinestacker/app/help_menu.py,sha256=g8lKG_xZmXtNQaC3SIRzyROKVWva_PLEgZsQWh6zUcQ,499
|
|
27
|
-
shinestacker/app/main.py,sha256=
|
|
27
|
+
shinestacker/app/main.py,sha256=XdWYUm1ed1q7aPghxgaFwWJVNijCvZZ_WG0fux8Nisc,10459
|
|
28
28
|
shinestacker/app/open_frames.py,sha256=bsu32iJSYJQLe_tQQbvAU5DuMDVX6MRuNdE7B5lojZc,1488
|
|
29
|
-
shinestacker/app/project.py,sha256=
|
|
30
|
-
shinestacker/app/retouch.py,sha256=
|
|
29
|
+
shinestacker/app/project.py,sha256=oopOiqU6bOK1cQdpot88z49KbKrlB-LAz_q4-8Iui0U,2819
|
|
30
|
+
shinestacker/app/retouch.py,sha256=dpSozNWSxL6wIO0SMjoviDbXZbbfRN_rVLjeL324c54,2527
|
|
31
31
|
shinestacker/config/__init__.py,sha256=aXxi-LmAvXd0daIFrVnTHE5OCaYeK1uf1BKMr7oaXQs,197
|
|
32
32
|
shinestacker/config/config.py,sha256=eBko2D3ADhLTIm9X6hB_a_WsIjwgfE-qmBVkhP1XSvc,1636
|
|
33
33
|
shinestacker/config/constants.py,sha256=EEdr7pZg4JpbIjUWaP7kJQfTuBB85FN739myDNAfn8A,8301
|
|
@@ -40,23 +40,23 @@ shinestacker/core/framework.py,sha256=QaTfnzEUHwzlbyFG7KzeyteckTSWHWEEJE4d5Tc8H1
|
|
|
40
40
|
shinestacker/core/logging.py,sha256=9SuSSy9Usbh7zqmLYMqkmy-VBkOJW000lwqAR0XQs30,3067
|
|
41
41
|
shinestacker/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
42
|
shinestacker/gui/action_config.py,sha256=BhKssL0xHPdNkE5hDkBy7Uw5rZOLZ8PU8hz-Nt_CdwA,19038
|
|
43
|
-
shinestacker/gui/action_config_dialog.py,sha256=
|
|
43
|
+
shinestacker/gui/action_config_dialog.py,sha256=IRK0RkGEBjGY351xalRc87cZb1HyWZdufnLa__vYCO0,43787
|
|
44
44
|
shinestacker/gui/base_form_dialog.py,sha256=KAUQNtmJazttmOIe4E4pFifbtvcByTAhtCmcIYeA4UE,766
|
|
45
|
-
shinestacker/gui/colors.py,sha256
|
|
45
|
+
shinestacker/gui/colors.py,sha256=-HaFprDuzRSKjXoZfX1rdOuvawQAkazqdgLBEiZcFII,1476
|
|
46
46
|
shinestacker/gui/flow_layout.py,sha256=3yBU_z7VtvHKpx1H97CHVd81eq9pe1Dcja2EZBGGKcI,3791
|
|
47
|
-
shinestacker/gui/folder_file_selection.py,sha256=
|
|
47
|
+
shinestacker/gui/folder_file_selection.py,sha256=IYWfZQFkoD5iO7zJ7BxVVDP9F3Dc0EXLILAhL4q-Cb8,4117
|
|
48
48
|
shinestacker/gui/gui_images.py,sha256=k39DpdsxcmYoRdHNNZj6OpFAas0GOHS4JSG542wfheg,5728
|
|
49
49
|
shinestacker/gui/gui_logging.py,sha256=kiZcrC2AFYCWgPZo0O5SKw-E5cFrezwf4anS3HjPuNw,8168
|
|
50
50
|
shinestacker/gui/gui_run.py,sha256=MQPE7muBPw3KTrGDsg-MBcC6nNFYuvvojfXfq84kR8o,15759
|
|
51
|
-
shinestacker/gui/main_window.py,sha256=
|
|
51
|
+
shinestacker/gui/main_window.py,sha256=BbGj6JeIpDNICTktYG6F___NXKtMHgVcHsSiqemtw8w,24516
|
|
52
52
|
shinestacker/gui/menu_manager.py,sha256=ZsND0e-vM263-6unwKUtYAtLbb4YgvIQabh5lCiT2ow,10179
|
|
53
|
-
shinestacker/gui/new_project.py,sha256=
|
|
53
|
+
shinestacker/gui/new_project.py,sha256=VSUaq1xm9CR0gimKHRKfCdQOQ-ErE1sxGmu6x14nlAQ,16113
|
|
54
54
|
shinestacker/gui/project_controller.py,sha256=hvSNGrQM-yDHH3e132oouxBtgRv7mUG7lrigUl21BsA,16043
|
|
55
55
|
shinestacker/gui/project_converter.py,sha256=Gmna0HwbvACcXiX74TaQYumif8ZV8sZ2APLTMM-L1mU,7436
|
|
56
|
-
shinestacker/gui/project_editor.py,sha256=
|
|
56
|
+
shinestacker/gui/project_editor.py,sha256=lSgQ42IoaobHs-NQQWT88Qhg5l7nu5ejxAO5VgIupr8,25498
|
|
57
57
|
shinestacker/gui/project_model.py,sha256=eRUmH3QmRzDtPtZoxgT6amKzN8_5XzwjHgEJeL-_JOE,4263
|
|
58
58
|
shinestacker/gui/select_path_widget.py,sha256=HSwgSr702w5Et4c-6nkRXnIpm1KFqKJetAF5xQNa5zI,1017
|
|
59
|
-
shinestacker/gui/sys_mon.py,sha256=
|
|
59
|
+
shinestacker/gui/sys_mon.py,sha256=zU41YYVeqQ1-v6oGIh2_BFzQWq87keN-398Wdm59-Nk,3526
|
|
60
60
|
shinestacker/gui/tab_widget.py,sha256=VgRmuktWXCgbXbV7c1Tho0--W5_EmmzXPfzRZgwhGfg,2965
|
|
61
61
|
shinestacker/gui/time_progress_bar.py,sha256=7_sllrQgayjRh__mwJ0-4lghXIakuRAx8wWucJ6olYs,3028
|
|
62
62
|
shinestacker/gui/ico/focus_stack_bkg.png,sha256=Q86TgqvKEi_IzKI8m6aZB2a3T40UkDtexf2PdeBM9XE,163151
|
|
@@ -90,9 +90,9 @@ shinestacker/retouch/undo_manager.py,sha256=_ekbcOLcPbQLY7t-o8wf-b1uA6OPY9rRyLM-
|
|
|
90
90
|
shinestacker/retouch/unsharp_mask_filter.py,sha256=uFnth8fpZFGhdIgJCnS8x5v6lBQgJ3hX0CBke9pFXeM,3510
|
|
91
91
|
shinestacker/retouch/vignetting_filter.py,sha256=MA97rQkSL0D-Nh-n2L4AiPR064RoTROkvza4tw84g9U,3658
|
|
92
92
|
shinestacker/retouch/white_balance_filter.py,sha256=glMBYlmrF-i_OrB3sGUpjZE6X4FQdyLC4GBy2bWtaFc,6056
|
|
93
|
-
shinestacker-1.3.
|
|
94
|
-
shinestacker-1.3.
|
|
95
|
-
shinestacker-1.3.
|
|
96
|
-
shinestacker-1.3.
|
|
97
|
-
shinestacker-1.3.
|
|
98
|
-
shinestacker-1.3.
|
|
93
|
+
shinestacker-1.3.1.dist-info/licenses/LICENSE,sha256=pWgb-bBdsU2Gd2kwAXxketnm5W_2u8_fIeWEgojfrxs,7651
|
|
94
|
+
shinestacker-1.3.1.dist-info/METADATA,sha256=uKow_yD_ono611Nztz8cszW4tVsMaGieF2Qfongsds0,6972
|
|
95
|
+
shinestacker-1.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
96
|
+
shinestacker-1.3.1.dist-info/entry_points.txt,sha256=SY6g1LqtMmp23q1DGwLUDT_dhLX9iss8DvWkiWLyo_4,166
|
|
97
|
+
shinestacker-1.3.1.dist-info/top_level.txt,sha256=MhijwnBVX5psfsyX8JZjqp3SYiWPsKe69f3Gnyze4Fw,13
|
|
98
|
+
shinestacker-1.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|