shinestacker 1.7.0__tar.gz → 1.8.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.
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.github/workflows/release.yml +2 -6
- {shinestacker-1.7.0 → shinestacker-1.8.1}/CHANGELOG.md +44 -1
- {shinestacker-1.7.0/src/shinestacker.egg-info → shinestacker-1.8.1}/PKG-INFO +35 -39
- {shinestacker-1.7.0 → shinestacker-1.8.1}/README.md +34 -38
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/alignment.md +6 -1
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/focus_stacking.md +4 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/job.md +3 -1
- shinestacker-1.8.1/docs/macos-install.md +19 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/noise.md +3 -3
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/build_release.py +0 -5
- shinestacker-1.8.1/src/shinestacker/_version.py +1 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/align.py +184 -80
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/align_auto.py +13 -11
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/align_parallel.py +41 -16
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/base_stack_algo.py +1 -1
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/noise_detection.py +10 -8
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/pyramid_tiles.py +1 -1
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/stack.py +9 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/stack_framework.py +49 -25
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/utils.py +5 -1
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/vignetting.py +16 -3
- shinestacker-1.8.1/src/shinestacker/app/settings_dialog.py +338 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/config/constants.py +10 -5
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/config/settings.py +29 -8
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/core/core_utils.py +1 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/core/exceptions.py +1 -1
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/core/framework.py +9 -4
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/action_config.py +23 -20
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/action_config_dialog.py +107 -64
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/gui_images.py +27 -3
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/gui_run.py +1 -2
- shinestacker-1.8.1/src/shinestacker/gui/img/dark/close-round-line-icon.png +0 -0
- shinestacker-1.8.1/src/shinestacker/gui/img/dark/forward-button-icon.png +0 -0
- shinestacker-1.8.1/src/shinestacker/gui/img/dark/play-button-round-icon.png +0 -0
- shinestacker-1.8.1/src/shinestacker/gui/img/dark/plus-round-line-icon.png +0 -0
- shinestacker-1.8.1/src/shinestacker/gui/img/dark/shinestacker_bkg.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/main_window.py +20 -7
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/menu_manager.py +18 -7
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/new_project.py +18 -9
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/project_controller.py +13 -6
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/project_editor.py +12 -2
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/project_model.py +4 -4
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/tab_widget.py +16 -6
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/adjustments.py +5 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1/src/shinestacker.egg-info}/PKG-INFO +35 -39
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker.egg-info/SOURCES.txt +11 -6
- shinestacker-1.7.0/shinestacker-inno-setup.iss +0 -68
- shinestacker-1.7.0/src/shinestacker/_version.py +0 -1
- shinestacker-1.7.0/src/shinestacker/app/settings_dialog.py +0 -171
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.coveragerc +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.flake8 +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.github/workflows/ci-multiplatform.yml +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.github/workflows/pylint.yml +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.github/workflows/pypi-publish.yml +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.gitignore +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.pylintrc +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/.readthedocs.yaml +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/LICENSE +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/MANIFEST.in +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/THIRD_PARTY_LICENSES.txt +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/api.md +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/balancing.md +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/conf.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/gui.md +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/index.md +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/main.md +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/multilayer.md +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/requirements.txt +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/docs/vignetting.md +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/coffee.gif +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/coffee_stack.jpg +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/extreme-vignetting.jpg +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/flies.gif +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/flies_stack.jpg +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/flow-diagram.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/gui-finder.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/gui-project-new.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/gui-project-run.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/img/gui-retouch.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/index.html +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/pyproject.toml +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/requirements.txt +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/create_macos_icon.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/git-rev-list.sh +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/hooks/hook-IPython.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/hooks/hook-PySide6.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/hooks/hook-opencv.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/hooks/hook-tests.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/scan_imports.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/shinestacker-inno-setup.iss +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/scripts/validate-tomli.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/setup.cfg +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/__init__.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/__init__.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/balance.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/corrections.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/denoise.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/depth_map.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/exif.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/multilayer.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/pyramid.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/pyramid_auto.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/sharpen.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/algorithms/white_balance.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/__init__.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/about_dialog.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/args_parser_opts.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/gui_utils.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/help_menu.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/main.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/open_frames.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/project.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/app/retouch.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/config/__init__.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/config/app_config.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/config/config.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/config/gui_constants.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/core/__init__.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/core/colors.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/core/logging.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/__init__.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/base_form_dialog.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/colors.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/config_dialog.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/flow_layout.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/folder_file_selection.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/gui_logging.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/ico/shinestacker.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/ico/shinestacker.svg +0 -0
- {shinestacker-1.7.0/src/shinestacker/gui/img → shinestacker-1.8.1/src/shinestacker/gui/img/light}/close-round-line-icon.png +0 -0
- {shinestacker-1.7.0/src/shinestacker/gui/img → shinestacker-1.8.1/src/shinestacker/gui/img/light}/forward-button-icon.png +0 -0
- {shinestacker-1.7.0/src/shinestacker/gui/img → shinestacker-1.8.1/src/shinestacker/gui/img/light}/play-button-round-icon.png +0 -0
- {shinestacker-1.7.0/src/shinestacker/gui/img → shinestacker-1.8.1/src/shinestacker/gui/img/light}/plus-round-line-icon.png +0 -0
- {shinestacker-1.7.0/src/shinestacker/gui/ico → shinestacker-1.8.1/src/shinestacker/gui/img/light}/shinestacker_bkg.png +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/project_converter.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/recent_file_manager.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/select_path_widget.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/sys_mon.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/gui/time_progress_bar.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/__init__.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/base_filter.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/brush.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/brush_gradient.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/brush_preview.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/brush_tool.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/denoise_filter.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/display_manager.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/exif_data.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/file_loader.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/filter_manager.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/icon_container.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/image_editor_ui.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/image_view_status.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/image_viewer.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/io_gui_handler.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/io_threads.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/layer_collection.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/overlaid_view.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/paint_area_manager.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/shortcuts_help.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/sidebyside_view.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/transformation_manager.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/undo_manager.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/unsharp_mask_filter.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/view_strategy.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/vignetting_filter.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker/retouch/white_balance_filter.py +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker.egg-info/dependency_links.txt +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker.egg-info/entry_points.txt +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker.egg-info/requires.txt +0 -0
- {shinestacker-1.7.0 → shinestacker-1.8.1}/src/shinestacker.egg-info/top_level.txt +0 -0
|
@@ -40,9 +40,8 @@ jobs:
|
|
|
40
40
|
pip install -e .[dev]
|
|
41
41
|
|
|
42
42
|
- name: Build and package release
|
|
43
|
-
working-directory: scripts
|
|
44
43
|
run: |
|
|
45
|
-
python build_release.py
|
|
44
|
+
python scripts/build_release.py
|
|
46
45
|
|
|
47
46
|
- name: Upload artifacts
|
|
48
47
|
uses: actions/upload-artifact@v4
|
|
@@ -52,7 +51,6 @@ jobs:
|
|
|
52
51
|
${{ matrix.os == 'windows-latest' && 'dist/shinestacker-release.zip' || '' }}
|
|
53
52
|
${{ matrix.os == 'windows-latest' && 'dist/*.exe' || '' }}
|
|
54
53
|
${{ matrix.os == 'ubuntu-latest' && 'dist/shinestacker-release.tar.gz' || '' }}
|
|
55
|
-
${{ matrix.os == 'macos-latest' && 'dist/shinestacker-release.tar.gz' || '' }}
|
|
56
54
|
${{ matrix.os == 'macos-latest' && 'dist/shinestacker-release.dmg' || '' }}
|
|
57
55
|
if-no-files-found: ignore
|
|
58
56
|
|
|
@@ -70,8 +68,7 @@ jobs:
|
|
|
70
68
|
mkdir -p release_assets
|
|
71
69
|
# Linux
|
|
72
70
|
cp artifacts/shinestacker-ubuntu-latest/shinestacker-release.tar.gz release_assets/shinestacker-ubuntu.tar.gz
|
|
73
|
-
# macOS
|
|
74
|
-
cp artifacts/shinestacker-macos-latest/shinestacker-release.tar.gz release_assets/shinestacker-macos.tar.gz
|
|
71
|
+
# macOS
|
|
75
72
|
cp artifacts/shinestacker-macos-latest/shinestacker-release.dmg release_assets/shinestacker-macos.dmg
|
|
76
73
|
# Windows
|
|
77
74
|
cp artifacts/shinestacker-windows-latest/shinestacker-release.zip release_assets/shinestacker-windows.zip
|
|
@@ -86,7 +83,6 @@ jobs:
|
|
|
86
83
|
draft: true
|
|
87
84
|
files: |
|
|
88
85
|
release_assets/shinestacker-ubuntu.tar.gz
|
|
89
|
-
release_assets/shinestacker-macos.tar.gz
|
|
90
86
|
release_assets/shinestacker-macos.dmg
|
|
91
87
|
release_assets/shinestacker-windows.zip
|
|
92
88
|
release_assets/shinestacker-setup.exe
|
|
@@ -2,8 +2,51 @@
|
|
|
2
2
|
|
|
3
3
|
This page reports the main releases only and the main changes therein.
|
|
4
4
|
|
|
5
|
+
## [v1.8.1] - 2025-10-16
|
|
6
|
+
** Alignment stability and performance improvements **
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- optional alignment algorithm based on phase correlation as fallback when no feature match is found
|
|
10
|
+
- retry limits in parallel alignment, determined by new configurable parameter delta_max
|
|
11
|
+
- new configurable parameters in persistent default settings
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- reference frame indexing if sequential processing is applied as fallback from multithread run
|
|
15
|
+
- job configuration dialog failure if input is aready selected
|
|
16
|
+
- preview thumbnail failure for very large images
|
|
17
|
+
- minor inaccuracies in logger messages
|
|
18
|
+
- minor GUI issues
|
|
19
|
+
- computations for vignetting summary plot
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- improved robustness of alignment strategy for poorly focused images
|
|
23
|
+
- better tuning of parallel frame alignment
|
|
24
|
+
- consistent handling of noise map output folders
|
|
25
|
+
- improved naming scheme for wizard-generated projects
|
|
26
|
+
- more reliable default settings persistency
|
|
27
|
+
- code refactoring and cleanup
|
|
28
|
+
|
|
29
|
+
-----
|
|
30
|
+
|
|
31
|
+
## [v1.8.0] - 2025-10-08
|
|
32
|
+
** Minor improvements and accessibility fix **
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
- temporary disk space can be cleaned up with a new option to scratch output files at the end of a job
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
- new project dialog displays well also with dark background settings
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- icons now adapt automatically to light or dark desktop theme
|
|
42
|
+
- additional alignment parameters added to default settings
|
|
43
|
+
- minor GUI stability fix
|
|
44
|
+
- redundant macOS .tar.gz installer removed, replaced by .dmg image
|
|
45
|
+
|
|
46
|
+
-----
|
|
47
|
+
|
|
5
48
|
## [v1.7.0] - 2025-10-04
|
|
6
|
-
** New image adjustment actions and macOS dmg installer **
|
|
49
|
+
** New image adjustment actions and macOS dmg image installer **
|
|
7
50
|
|
|
8
51
|
### Added
|
|
9
52
|
- luminosity and contrast adjustment action
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: shinestacker
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.1
|
|
4
4
|
Summary: ShineStacker
|
|
5
5
|
Author-email: Luca Lista <luka.lista@gmail.com>
|
|
6
6
|
License-Expression: LGPL-3.0
|
|
@@ -30,11 +30,9 @@ Provides-Extra: dev
|
|
|
30
30
|
Requires-Dist: pytest; extra == "dev"
|
|
31
31
|
Dynamic: license-file
|
|
32
32
|
|
|
33
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
|
|
34
|
-
|
|
35
33
|
# Shine Stacker
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
Focus Stacking Processing Framework and GUI designed for macro photographers, microscopists, and researchers who need precise control and reproducible stacking results.
|
|
38
36
|
|
|
39
37
|
[](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
|
|
40
38
|
[](https://pypi.org/project/shinestacker/)
|
|
@@ -45,60 +43,55 @@ Dynamic: license-file
|
|
|
45
43
|
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
46
44
|
[](https://www.gnu.org/licenses/lgpl-3.0)
|
|
47
45
|
[](https://pepy.tech/projects/shinestacker)
|
|
48
|
-
|
|
49
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
50
|
-
|
|
51
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
52
|
-
|
|
53
|
-
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
46
|
+
<center><img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo"></center>
|
|
54
47
|
|
|
55
48
|
## Key Features
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
49
|
+
- 🪟 **Cross-Platform GUI**: Native app built with Qt6, available for Windows, macOS, and Linux.
|
|
50
|
+
- 🚀 **Batch Processing**: Automatically align, balance, and stack hundreds of images — perfect for macro or microscopy datasets.
|
|
51
|
+
- 🧩 **Modular Architecture**: Combine configurable modules for alignment, normalization, and blending to build custom workflows.
|
|
52
|
+
- 🖌️ **Retouch Editor**: Interactively refine your stacked image by painting in details from individual frames.
|
|
53
|
+
- 📊 **Jupyter & Python Integration**: Use Shine Stacker as a library inside your Python or Jupyter workflows.
|
|
54
|
+
|
|
55
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
60
56
|
|
|
61
57
|
## Interactive GUI
|
|
62
58
|
|
|
63
|
-
The
|
|
59
|
+
The graphical interface makes complex stacking tasks simple:
|
|
60
|
+
- **Project View** – Configure, preview, and run stacking workflows with optional intermediate results.
|
|
61
|
+
- **Retouch View** – Manually refine the final image by blending details from selected frames and applying filters.
|
|
64
62
|
|
|
65
|
-
|
|
63
|
+
Ideal for users who want the power of scripting and the comfort of a modern UI.
|
|
66
64
|
|
|
67
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/
|
|
65
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
68
66
|
|
|
69
|
-
|
|
67
|
+
## Get Started
|
|
70
68
|
|
|
71
|
-
|
|
69
|
+
- 📦 [Install via PyPI](https://pypi.org/project/shinestacker/)
|
|
70
|
+
- 💻 [Run the GUI app](https://shinestacker.readthedocs.io/en/latest/gui.html)
|
|
71
|
+
- 🧠 [Reference](https://shinestacker.readthedocs.io/en/)
|
|
72
|
+
- 🐛 [Report an issue](https://github.com/lucalista/shinestacker/issues)
|
|
72
73
|
|
|
73
74
|
## Resources
|
|
74
75
|
|
|
75
76
|
🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
|
|
76
77
|
|
|
77
|
-
##
|
|
78
|
-
|
|
79
|
-
**The following note is only relevant if you download the application as compressed archive from the [release page](https://github.com/lucalista/shinestacker/releases).**
|
|
78
|
+
## Installation
|
|
80
79
|
|
|
81
|
-
|
|
80
|
+
See the [main documentation](https://github.com/lucalista/shinestacker/blob/main/docs/main.md) for detailed installation instructions.
|
|
82
81
|
|
|
83
|
-
|
|
82
|
+
**Platform notes:**
|
|
83
|
+
- **Windows:** If you download the installer or ZIP archive, you may need to whitelist the app in your antivirus software.
|
|
84
|
+
- **macOS:** See the [installation note for macOS users](https://github.com/lucalista/shinestacker/blob/main/docs/macos-install.md).
|
|
84
85
|
|
|
85
|
-
1. Download the compressed archive ```shinestacker-macos.tar.gz``` in your ```Download``` folder.
|
|
86
|
-
2. Double-click the archive to uncompress it. You will find a new folder ```shinestacker```.
|
|
87
|
-
3. Open a terminal (*Applications > Utilities > Terminal*)
|
|
88
|
-
4. Type the folliwng command on the terminal (assuming you have expanded the ```tar.gz``` under ```Downloads```):
|
|
89
|
-
```bash
|
|
90
|
-
xattr -cr ~/Downloads/shinestacker/shinestacker.app
|
|
91
|
-
```
|
|
92
|
-
5. Now you can double-click the Sine Stacker icon app in the ```shiestacker``` folder and it should run.
|
|
93
86
|
|
|
94
|
-
|
|
87
|
+
## Acknowledgements & References
|
|
95
88
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## Resources
|
|
89
|
+
The first version of the core focus stack algorithm was inspired by the
|
|
90
|
+
[Laplacian pyramids method](https://github.com/sjawhar/focus-stacking) implementation
|
|
91
|
+
by Sami Jawhar, used under permission. The implementation in the latest releases
|
|
92
|
+
was rewritten from the original code.
|
|
101
93
|
|
|
94
|
+
Key references:
|
|
102
95
|
* [Pyramid Methods in Image Processing](https://www.researchgate.net/publication/246727904_Pyramid_Methods_in_Image_Processing), E. H. Adelson, C. H. Anderson, J. R. Bergen, P. J. Burt, J. M. Ogden, RCA Engineer, 29-6, Nov/Dec 1984
|
|
103
96
|
Pyramid methods in image processing
|
|
104
97
|
* [A Multi-focus Image Fusion Method Based on Laplacian Pyramid](http://www.jcomputers.us/vol6/jcp0612-07.pdf), Wencheng Wang, Faliang Chang, Journal of Computers 6 (12), 2559, December 2011
|
|
@@ -108,7 +101,6 @@ Pyramid methods in image processing
|
|
|
108
101
|
<img src="https://www.gnu.org/graphics/lgplv3-147x51.png" alt="LGPL 3 logo">
|
|
109
102
|
|
|
110
103
|
- **Code**: The software is provided as is under the [GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html). See [LICENSE](https://github.com/lucalista/shinestacker/blob/main/LICENSE) for details.
|
|
111
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
|
|
112
104
|
|
|
113
105
|
- **Logo**: The Shine Stacker logo was designed by [Alessandro Lista](https://linktr.ee/alelista). Copyright © Alessandro Lista. All rights reserved. The logo is not covered by the LGPL-3.0 license of this project.
|
|
114
106
|
|
|
@@ -118,3 +110,7 @@ Pyramid methods in image processing
|
|
|
118
110
|
*Created with Shine Stacker – https://github.com/lucalista/shinestacker*
|
|
119
111
|
|
|
120
112
|
This is not mandatory, but highly appreciated.
|
|
113
|
+
---
|
|
114
|
+
> Developed and maintained by [Luca Lista](https://github.com/lucalista).
|
|
115
|
+
> 💡 Contributions, feedback, and feature suggestions are warmly welcome.
|
|
116
|
+
> If you enjoy Shine Stacker, consider giving it a ⭐️ on GitHub — it really helps visibility!
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
|
|
2
|
-
|
|
3
1
|
# Shine Stacker
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
Focus Stacking Processing Framework and GUI designed for macro photographers, microscopists, and researchers who need precise control and reproducible stacking results.
|
|
6
4
|
|
|
7
5
|
[](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
|
|
8
6
|
[](https://pypi.org/project/shinestacker/)
|
|
@@ -13,60 +11,55 @@
|
|
|
13
11
|
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
14
12
|
[](https://www.gnu.org/licenses/lgpl-3.0)
|
|
15
13
|
[](https://pepy.tech/projects/shinestacker)
|
|
16
|
-
|
|
17
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
18
|
-
|
|
19
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
20
|
-
|
|
21
|
-
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
14
|
+
<center><img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo"></center>
|
|
22
15
|
|
|
23
16
|
## Key Features
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
17
|
+
- 🪟 **Cross-Platform GUI**: Native app built with Qt6, available for Windows, macOS, and Linux.
|
|
18
|
+
- 🚀 **Batch Processing**: Automatically align, balance, and stack hundreds of images — perfect for macro or microscopy datasets.
|
|
19
|
+
- 🧩 **Modular Architecture**: Combine configurable modules for alignment, normalization, and blending to build custom workflows.
|
|
20
|
+
- 🖌️ **Retouch Editor**: Interactively refine your stacked image by painting in details from individual frames.
|
|
21
|
+
- 📊 **Jupyter & Python Integration**: Use Shine Stacker as a library inside your Python or Jupyter workflows.
|
|
22
|
+
|
|
23
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
28
24
|
|
|
29
25
|
## Interactive GUI
|
|
30
26
|
|
|
31
|
-
The
|
|
27
|
+
The graphical interface makes complex stacking tasks simple:
|
|
28
|
+
- **Project View** – Configure, preview, and run stacking workflows with optional intermediate results.
|
|
29
|
+
- **Retouch View** – Manually refine the final image by blending details from selected frames and applying filters.
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
Ideal for users who want the power of scripting and the comfort of a modern UI.
|
|
34
32
|
|
|
35
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/
|
|
33
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
## Get Started
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
- 📦 [Install via PyPI](https://pypi.org/project/shinestacker/)
|
|
38
|
+
- 💻 [Run the GUI app](https://shinestacker.readthedocs.io/en/latest/gui.html)
|
|
39
|
+
- 🧠 [Reference](https://shinestacker.readthedocs.io/en/)
|
|
40
|
+
- 🐛 [Report an issue](https://github.com/lucalista/shinestacker/issues)
|
|
40
41
|
|
|
41
42
|
## Resources
|
|
42
43
|
|
|
43
44
|
🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
|
|
44
45
|
|
|
45
|
-
##
|
|
46
|
-
|
|
47
|
-
**The following note is only relevant if you download the application as compressed archive from the [release page](https://github.com/lucalista/shinestacker/releases).**
|
|
46
|
+
## Installation
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
See the [main documentation](https://github.com/lucalista/shinestacker/blob/main/docs/main.md) for detailed installation instructions.
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
**Platform notes:**
|
|
51
|
+
- **Windows:** If you download the installer or ZIP archive, you may need to whitelist the app in your antivirus software.
|
|
52
|
+
- **macOS:** See the [installation note for macOS users](https://github.com/lucalista/shinestacker/blob/main/docs/macos-install.md).
|
|
52
53
|
|
|
53
|
-
1. Download the compressed archive ```shinestacker-macos.tar.gz``` in your ```Download``` folder.
|
|
54
|
-
2. Double-click the archive to uncompress it. You will find a new folder ```shinestacker```.
|
|
55
|
-
3. Open a terminal (*Applications > Utilities > Terminal*)
|
|
56
|
-
4. Type the folliwng command on the terminal (assuming you have expanded the ```tar.gz``` under ```Downloads```):
|
|
57
|
-
```bash
|
|
58
|
-
xattr -cr ~/Downloads/shinestacker/shinestacker.app
|
|
59
|
-
```
|
|
60
|
-
5. Now you can double-click the Sine Stacker icon app in the ```shiestacker``` folder and it should run.
|
|
61
54
|
|
|
62
|
-
|
|
55
|
+
## Acknowledgements & References
|
|
63
56
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
## Resources
|
|
57
|
+
The first version of the core focus stack algorithm was inspired by the
|
|
58
|
+
[Laplacian pyramids method](https://github.com/sjawhar/focus-stacking) implementation
|
|
59
|
+
by Sami Jawhar, used under permission. The implementation in the latest releases
|
|
60
|
+
was rewritten from the original code.
|
|
69
61
|
|
|
62
|
+
Key references:
|
|
70
63
|
* [Pyramid Methods in Image Processing](https://www.researchgate.net/publication/246727904_Pyramid_Methods_in_Image_Processing), E. H. Adelson, C. H. Anderson, J. R. Bergen, P. J. Burt, J. M. Ogden, RCA Engineer, 29-6, Nov/Dec 1984
|
|
71
64
|
Pyramid methods in image processing
|
|
72
65
|
* [A Multi-focus Image Fusion Method Based on Laplacian Pyramid](http://www.jcomputers.us/vol6/jcp0612-07.pdf), Wencheng Wang, Faliang Chang, Journal of Computers 6 (12), 2559, December 2011
|
|
@@ -76,7 +69,6 @@ Pyramid methods in image processing
|
|
|
76
69
|
<img src="https://www.gnu.org/graphics/lgplv3-147x51.png" alt="LGPL 3 logo">
|
|
77
70
|
|
|
78
71
|
- **Code**: The software is provided as is under the [GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html). See [LICENSE](https://github.com/lucalista/shinestacker/blob/main/LICENSE) for details.
|
|
79
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/src/shinestacker/gui/ico/shinestacker.png' width="150" referrerpolicy="no-referrer" alt="Shine Stacker Logo">
|
|
80
72
|
|
|
81
73
|
- **Logo**: The Shine Stacker logo was designed by [Alessandro Lista](https://linktr.ee/alelista). Copyright © Alessandro Lista. All rights reserved. The logo is not covered by the LGPL-3.0 license of this project.
|
|
82
74
|
|
|
@@ -86,3 +78,7 @@ Pyramid methods in image processing
|
|
|
86
78
|
*Created with Shine Stacker – https://github.com/lucalista/shinestacker*
|
|
87
79
|
|
|
88
80
|
This is not mandatory, but highly appreciated.
|
|
81
|
+
---
|
|
82
|
+
> Developed and maintained by [Luca Lista](https://github.com/lucalista).
|
|
83
|
+
> 💡 Contributions, feedback, and feature suggestions are warmly welcome.
|
|
84
|
+
> If you enjoy Shine Stacker, consider giving it a ⭐️ on GitHub — it really helps visibility!
|
|
@@ -67,7 +67,9 @@ alignment_config = {
|
|
|
67
67
|
'border_blur': 50,
|
|
68
68
|
'subsample': 0,
|
|
69
69
|
'fast_subsampling': False,
|
|
70
|
-
'min_good_matches': 100
|
|
70
|
+
'min_good_matches': 100,
|
|
71
|
+
'phase_corr_fallback': False,
|
|
72
|
+
'abort_abnormal': False
|
|
71
73
|
}
|
|
72
74
|
```
|
|
73
75
|
* ```transform``` (optional, default: ```ALIGN_RIGID```): the transformation applied to register images. Possible values are:
|
|
@@ -83,6 +85,8 @@ alignment_config = {
|
|
|
83
85
|
* ```subsample``` (optional, default: 0=automatic): subsample image for faster alignment. Faster, but alignment could be less accurate if only a small portion of the image is focused. It can save time, in particular for large images.
|
|
84
86
|
* ```fast_subsampling``` (optional, default: ```False```): perform fast image subsampling without interpolation. Used if ```subsample``` is set to ```True```.
|
|
85
87
|
* ```min_good_matches``` (optional, default: 100): if ```subsample```>1 and the number of good matches is below ```min_good_matches```, the alignment is retried without subsampling. This improbes robustness in case a too large subsampling factor is specified.
|
|
88
|
+
* ```phase_corr_fallback``` (optional, default: ```False```): use phase correlation alignment in case the number of matches is too low to allow to estimate the transformation. This algorithm is not very precise, and may help only in case of blurred images.
|
|
89
|
+
* ```abort_abnormal``` (optional, default: ```False```): abort in case of anormal tansformation. By default, frames where abnormal transformation is found are skipped, and processing continunes to next frame.
|
|
86
90
|
* ```border_mode``` (optional, default: ```BORDER_REPLICATE_BLUR```): border mode. See [Adding borders to your images](https://docs.opencv.org/3.4/dc/da3/tutorial_copyMakeBorder.html) for more details. Possible values are:
|
|
87
91
|
* ```BORDER_CONSTANT```: pad the image with a constant value. The border value is specified with the parameter ```border_value```.
|
|
88
92
|
* ```BORDER_REPLICATE```: the rows and columns at the very edge of the original are replicated to the extra border.
|
|
@@ -101,6 +105,7 @@ This class has extra parameters, in addition to the above ones:
|
|
|
101
105
|
* ```max_threads``` (optional, default: ```2```): number of parallel processes allowed. The number of actual threads will not be greater than the number of available CPU cores.
|
|
102
106
|
* ```chunk_submit``` (optional, default: ```True```): submit at most ```max_threads``` parallel processes. If ```chunk_submit``` is greater than ```max_threads``` a moderate performance gain is achieved at the cost of a possibly large memory occupancy.
|
|
103
107
|
* ```bw_matching``` (optional, default: ```False```): perform matches on black and white version of the images in order to save memory. Preliminary tests indicate that the gain with this option is marginal, and this option may be dropped in the future.
|
|
108
|
+
* ```delta_max``` (optional, defaut: 2): maximum consecutive frames skipped in case of too few matches found.
|
|
104
109
|
|
|
105
110
|
## Automatic selection of processing strategy
|
|
106
111
|
|
|
@@ -13,6 +13,8 @@ Arguments for the constructor of ```FocusStack``` are:
|
|
|
13
13
|
* ```denoise_amount``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
|
|
14
14
|
* ```prefix``` (optional): if specified, the specified string is pre-pended to the file name. May be useful if more algorithms are ran, and different file names are used for the output of different algorithms.
|
|
15
15
|
* ```enabled``` (optional, default: ``True```): allows to switch on and off this module.
|
|
16
|
+
* ```scratch_output_dir``` (optional, default: ```True```): scratch output directory before processing. This avoids that existing files pollute the output.
|
|
17
|
+
* ```delete_output_at_end``` (optional, default: ```False```): delete output after processing. This cleans disk space in case of processing an intermediate step that is not part of the final output.
|
|
16
18
|
|
|
17
19
|
## Focus Stacking in bunches of frames
|
|
18
20
|
|
|
@@ -31,6 +33,8 @@ Arguments for the constructor of ```FocusStackBunch``` are:
|
|
|
31
33
|
* ```denoise_amount``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
|
|
32
34
|
* ```prefix``` (optional): if specified, the specified string is pre-pended to the file name. May be useful if more algorithms are ran, and different file names are used for the output of different algorithms.
|
|
33
35
|
* ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
|
|
36
|
+
* ```scratch_output_dir``` (optional, default: ```True```): scratch output directory before processing. This avoids that existing files pollute the output.
|
|
37
|
+
* ```delete_output_at_end``` (optional, default: ```False```): delete output after processing. This cleans disk space in case of processing an intermediate step that is not part of the final output.
|
|
34
38
|
|
|
35
39
|
## Stack algorithms
|
|
36
40
|
|
|
@@ -43,6 +43,8 @@ Arguments for the constructor of ```CombinedActions``` are for the :
|
|
|
43
43
|
* ```resample``` (optional, default: 1): take every *n*<sup>th</sup> frame in the selected directory. Default: take all frames.
|
|
44
44
|
* ```reference_index``` (optional, default: 0): the index of the image used as reference. Images are numbered starting from one to N. -1 is interpreted as the last image, 0 as the median index.
|
|
45
45
|
* ```step_process``` (optional): if equal to ```True``` (default), each image is processed with respect to the previous or next image, depending if its file is placed in alphabetic order after or befor the reference image.
|
|
46
|
-
* ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
|
|
46
|
+
* ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
|
|
47
|
+
* ```scratch_output_dir``` (optional, default: ```True```): scratch output directory before processing. This avoids that existing files pollute the output.
|
|
48
|
+
* ```delete_output_at_end``` (optional, default: ```False```): delete output after processing. This cleans disk space in case of processing an intermediate step that is not part of the final output.
|
|
47
49
|
* ```max_threads``` (optional, default: ```2```): number of parallel processes allowed. The number of actual threads will not be greater than the number of available CPU cores.
|
|
48
50
|
* ```chunk_submit``` (optional, default: ```True```): submit at most ```max_threads``` parallel processes. If ```chunk_submit``` is greater than ```max_threads``` a moderate performance gain is achieved at the cost of a possibly large memory occupancy.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Installation Note for macOS Users
|
|
2
|
+
|
|
3
|
+
**This note applies only if you downloaded Shine Stacker as a compressed archive from the [release page](https://github.com/lucalista/shinestacker/releases).**
|
|
4
|
+
|
|
5
|
+
macOS system security (Gatekeeper) may prevent applications from running if they were downloaded from the Internet and are not signed with an official Apple Developer Certificate.
|
|
6
|
+
|
|
7
|
+
To allow Shine Stacker to run safely, please follow these steps:
|
|
8
|
+
|
|
9
|
+
1. Download the disk image file ```shinestacker-macos.dmg```.
|
|
10
|
+
2. Double-click the ```.dmg``` file and drag the **Shine Stacker** app into your **Application** folder.
|
|
11
|
+
3. Open the **Terminal** (found in *Applications > Utilities > Terminal*).
|
|
12
|
+
4. Run the following command to remove the quarantine attribute:
|
|
13
|
+
```bash
|
|
14
|
+
xattr -cr /Applications/shinestacker/shinestacker.app
|
|
15
|
+
```
|
|
16
|
+
5. You can now launch Shine Stacker normally from your Applications folder.
|
|
17
|
+
|
|
18
|
+
> 💡 Tip: macOS might still show a security warning the first time you open the app.
|
|
19
|
+
> If that happens, right-click the app and choose Open, then confirm.
|
|
@@ -13,14 +13,14 @@ Usually, this job should be run first, enabling the option ```plot_histograms```
|
|
|
13
13
|
Arguments for the constructor of ```NoiseDetection``` are:
|
|
14
14
|
* ```name``` (optional, default: ```noise-map```): name of the action and default name of the subdirectory within ```working_path``` where aligned noise map is written.
|
|
15
15
|
* ```input_path``` (optional): one or more subdirectory within ```working_path``` that contains input images to be combined. If not specified, the last output path is used, or, if this is the first action, the ```input_path``` specified with the ```StackJob``` construction is used. If the ```StackJob``` specifies no ```input_path```, at least the first action must specify an ```input_path```.
|
|
16
|
-
* ```output_path``` (optional):
|
|
16
|
+
* ```output_path``` (optional): the subdirectory within ```working_path``` where noise map is written. If not specified, it is equal to ```name```.
|
|
17
17
|
* ```working_path``` (optional): the directory that contains input and output image subdirectories. If not specified, it is the same as ```job.working_path```.
|
|
18
18
|
* ```max_frames``` (optional): if provided, at most ```max_frames``` images are analyzed to extract noisy pixel mask.
|
|
19
19
|
* ```plot_path``` (optional, default: ```plots```): the directory within ```working_path``` that contains plots produced by the different actions
|
|
20
20
|
* ```plot_histograms``` (optional, default: ```False```): if ```True```, plot a summary of the number of hot pixel by channel as a function of the applied threshold. It may be useful to set the optimal threshold values.
|
|
21
21
|
* ```channel_thresholds``` (optional, default: ```(13, 13, 13)```): threshold values for noisy pixel detections in the color channels R, G, B, respectively.
|
|
22
22
|
* ```blur_size``` (optional, default: 5): image blur amount for pixel detection.
|
|
23
|
-
* ```file_name``` (optional, default: ```
|
|
23
|
+
* ```file_name``` (optional, default: ```hot_pixels.png```): noise map filename.
|
|
24
24
|
* ```plot_range``` (optiona, default: (5, 30)): range of the horizontal axis of the plot showing the number of hot pixel as a function of the intensity threshold.
|
|
25
25
|
* ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
|
|
26
26
|
|
|
@@ -41,7 +41,7 @@ job.add_action(Actions("align", [MaskNoise(),
|
|
|
41
41
|
Note that if the number of pixels contained in the mask file (```noise_mask``` option) is greater than 1000, the job is aborted.
|
|
42
42
|
|
|
43
43
|
Arguments for the constructor of ```NoiseDetection``` are:
|
|
44
|
-
* ```noise_mask``` (optional, default: ```
|
|
44
|
+
* ```noise_mask``` (optional, default: ```hot-rgb.png```): filename of the noise mask
|
|
45
45
|
* ```kernel_size``` (optional, default: 3): blur size use to extract noisy pixels
|
|
46
46
|
* ```method``` (optional, default: ```INTERPOLATE_MEAN```): possible values: ```INTERPOLATE_MEAN```, ```INTERPOLATE_MEDIAN```. Interpolate using mean or median of neighborhood pixels to replace a noisy pixel.
|
|
47
47
|
* ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
|
|
@@ -7,7 +7,6 @@ import platform
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def setup_environment():
|
|
10
|
-
os.chdir("../")
|
|
11
10
|
project_root = Path(__file__).resolve().parent.parent
|
|
12
11
|
dist_dir = project_root / "dist"
|
|
13
12
|
project_name = "shinestacker"
|
|
@@ -119,10 +118,6 @@ def package_macos(dist_dir, app_name, project_root):
|
|
|
119
118
|
except subprocess.CalledProcessError as e:
|
|
120
119
|
print(f"Could not set custom icon: {e}")
|
|
121
120
|
shutil.rmtree(dmg_temp_dir)
|
|
122
|
-
archive_path = dist_dir / "shinestacker-release.tar.gz"
|
|
123
|
-
with tarfile.open(archive_path, "w:gz") as tar:
|
|
124
|
-
tar.add(app_bundle, arcname=app_bundle.name, recursive=True)
|
|
125
|
-
print(f"Created tar.gz: {archive_path.name}")
|
|
126
121
|
|
|
127
122
|
|
|
128
123
|
def package_linux(dist_dir, app_name):
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '1.8.1'
|