shinestacker 0.3.1__tar.gz → 0.3.4__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-0.3.4/.flake8 +8 -0
- shinestacker-0.3.4/.github/workflows/pylint.yml +28 -0
- shinestacker-0.3.4/.pylintrc +6 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/CHANGELOG.md +38 -0
- shinestacker-0.3.4/MANIFEST.in +2 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/PKG-INFO +12 -5
- {shinestacker-0.3.1 → shinestacker-0.3.4}/README.md +11 -4
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/alignment.md +1 -1
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/focus_stacking.md +2 -2
- shinestacker-0.3.4/docs/index.md +17 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/job.md +13 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/main.md +13 -23
- shinestacker-0.3.4/img/coffee.gif +0 -0
- shinestacker-0.3.4/img/coffee_stack.jpg +0 -0
- shinestacker-0.3.4/img/coins.gif +0 -0
- shinestacker-0.3.4/img/coins_stack.jpg +0 -0
- shinestacker-0.3.4/img/flies.gif +0 -0
- shinestacker-0.3.4/img/flies_stack.jpg +0 -0
- shinestacker-0.3.4/img/gui-project-run.png +0 -0
- shinestacker-0.3.4/img/gui-retouch.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/pyproject.toml +6 -0
- shinestacker-0.3.4/requirements.txt +13 -0
- shinestacker-0.3.4/src/shinestacker/__init__.py +17 -0
- shinestacker-0.3.4/src/shinestacker/_version.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/__init__.py +3 -2
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/align.py +102 -64
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/balance.py +92 -46
- shinestacker-0.3.4/src/shinestacker/algorithms/base_stack_algo.py +42 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/core_utils.py +6 -6
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/denoise.py +4 -1
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/depth_map.py +28 -39
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/exif.py +43 -38
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/multilayer.py +48 -28
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/noise_detection.py +36 -23
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/pyramid.py +42 -42
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/sharpen.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack.py +42 -41
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack_framework.py +111 -65
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/utils.py +12 -11
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/vignetting.py +48 -22
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/algorithms/white_balance.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/about_dialog.py +6 -2
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/app_config.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/gui_utils.py +20 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/help_menu.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/main.py +9 -18
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/open_frames.py +11 -8
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/project.py +5 -16
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/retouch.py +5 -17
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/__init__.py +2 -1
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/config.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/constants.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/config/gui_constants.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/__init__.py +4 -3
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/colors.py +4 -3
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/core_utils.py +6 -6
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/exceptions.py +3 -1
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/framework.py +46 -32
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/core/logging.py +9 -10
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/action_config.py +267 -206
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/actions_window.py +39 -32
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/colors.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/gui_images.py +7 -3
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/gui_logging.py +3 -2
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/gui_run.py +53 -38
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/main_window.py +69 -25
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/new_project.py +35 -2
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/project_converter.py +21 -20
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/project_editor.py +45 -52
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/project_model.py +15 -23
- shinestacker-0.3.4/src/shinestacker/retouch/base_filter.py +117 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/brush.py +1 -0
- shinestacker-0.3.4/src/shinestacker/retouch/brush_gradient.py +34 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/brush_preview.py +19 -16
- shinestacker-0.3.4/src/shinestacker/retouch/brush_tool.py +173 -0
- shinestacker-0.3.4/src/shinestacker/retouch/denoise_filter.py +57 -0
- shinestacker-0.3.4/src/shinestacker/retouch/display_manager.py +183 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/exif_data.py +3 -1
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/file_loader.py +13 -9
- shinestacker-0.3.4/src/shinestacker/retouch/filter_manager.py +15 -0
- shinestacker-0.3.4/src/shinestacker/retouch/image_editor.py +201 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/image_editor_ui.py +41 -76
- shinestacker-0.3.4/src/shinestacker/retouch/image_filters.py +69 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/image_viewer.py +54 -44
- shinestacker-0.3.4/src/shinestacker/retouch/io_gui_handler.py +220 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/io_manager.py +11 -14
- shinestacker-0.3.4/src/shinestacker/retouch/layer_collection.py +174 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/shortcuts_help.py +1 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/undo_manager.py +7 -0
- shinestacker-0.3.4/src/shinestacker/retouch/unsharp_mask_filter.py +85 -0
- shinestacker-0.3.4/src/shinestacker/retouch/white_balance_filter.py +116 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/PKG-INFO +12 -5
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/SOURCES.txt +17 -72
- shinestacker-0.3.1/.flake8 +0 -4
- shinestacker-0.3.1/docs/index.md +0 -23
- shinestacker-0.3.1/examples/balance-only.fsp +0 -1
- shinestacker-0.3.1/examples/complete-project.fsp +0 -1
- shinestacker-0.3.1/examples/focus-stack-1.ipynb +0 -163
- shinestacker-0.3.1/examples/focus-stack-2.ipynb +0 -174
- shinestacker-0.3.1/examples/input/img-jpg/0000.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-jpg/0001.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-jpg/0002.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-jpg/0003.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-jpg/0004.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-jpg/0005.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-noise/0001.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-noise/0002.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-noise/0003.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-noise/0004.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-noise/0005.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-noise/0006.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-tif/0000.tif +0 -0
- shinestacker-0.3.1/examples/input/img-tif/0001.tif +0 -0
- shinestacker-0.3.1/examples/input/img-tif/0002.tif +0 -0
- shinestacker-0.3.1/examples/input/img-tif/0003.tif +0 -0
- shinestacker-0.3.1/examples/input/img-tif/0004.tif +0 -0
- shinestacker-0.3.1/examples/input/img-tif/0005.tif +0 -0
- shinestacker-0.3.1/examples/input/img-vignetted/vig-0000.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-vignetted/vig-0001.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-vignetted/vig-0002.jpg +0 -0
- shinestacker-0.3.1/examples/input/img-vignetted/vig-0003.jpg +0 -0
- shinestacker-0.3.1/examples/stack-comparison.fsp +0 -1
- shinestacker-0.3.1/examples/stack-from-frames.fsp +0 -1
- shinestacker-0.3.1/examples/vignetting.fsp +0 -1
- shinestacker-0.3.1/img/flies.gif +0 -0
- shinestacker-0.3.1/img/flies_stack.jpg +0 -0
- shinestacker-0.3.1/img/gui-project-run.png +0 -0
- shinestacker-0.3.1/img/gui-retouch.png +0 -0
- shinestacker-0.3.1/src/shinestacker/__init__.py +0 -16
- shinestacker-0.3.1/src/shinestacker/_version.py +0 -1
- shinestacker-0.3.1/src/shinestacker/retouch/brush_controller.py +0 -57
- shinestacker-0.3.1/src/shinestacker/retouch/brush_gradient.py +0 -20
- shinestacker-0.3.1/src/shinestacker/retouch/image_editor.py +0 -561
- shinestacker-0.3.1/src/shinestacker/retouch/image_filters.py +0 -391
- shinestacker-0.3.1/src/shinestacker/retouch/layer_collection.py +0 -54
- shinestacker-0.3.1/tests/test-align-balance.ipynb +0 -282
- shinestacker-0.3.1/tests/test-align.ipynb +0 -242
- shinestacker-0.3.1/tests/test-balance.ipynb +0 -918
- shinestacker-0.3.1/tests/test-exif.ipynb +0 -121
- shinestacker-0.3.1/tests/test-job.ipynb +0 -79
- shinestacker-0.3.1/tests/test-logging.ipynb +0 -93
- shinestacker-0.3.1/tests/test-multilayer.ipynb +0 -72
- shinestacker-0.3.1/tests/test-noise-detection.ipynb +0 -110
- shinestacker-0.3.1/tests/test-stack.ipynb +0 -97
- shinestacker-0.3.1/tests/test-vignetting.ipynb +0 -154
- shinestacker-0.3.1/tests/test_0000_logging.py +0 -66
- shinestacker-0.3.1/tests/test_0001_colors.py +0 -32
- shinestacker-0.3.1/tests/test_0002_config.py +0 -60
- shinestacker-0.3.1/tests/test_0005_make_test_img.py +0 -18
- shinestacker-0.3.1/tests/test_0006_exceptions.py +0 -99
- shinestacker-0.3.1/tests/test_0010_job.py +0 -49
- shinestacker-0.3.1/tests/test_0011_core_utils.py +0 -105
- shinestacker-0.3.1/tests/test_0020_noise_detection.py +0 -62
- shinestacker-0.3.1/tests/test_0030_align.py +0 -74
- shinestacker-0.3.1/tests/test_0031_align_precision.py +0 -111
- shinestacker-0.3.1/tests/test_0032_align_methods.py +0 -68
- shinestacker-0.3.1/tests/test_0040_balance.py +0 -90
- shinestacker-0.3.1/tests/test_0050_align_balance.py +0 -59
- shinestacker-0.3.1/tests/test_0051_denoise.py +0 -34
- shinestacker-0.3.1/tests/test_0052_sharpen.py +0 -34
- shinestacker-0.3.1/tests/test_0053_white_balance.py +0 -37
- shinestacker-0.3.1/tests/test_0060_stack.py +0 -51
- shinestacker-0.3.1/tests/test_0061_depth_map.py +0 -84
- shinestacker-0.3.1/tests/test_0070_multilayer.py +0 -74
- shinestacker-0.3.1/tests/test_0080_exif.py +0 -220
- shinestacker-0.3.1/tests/test_0090_vignetting.py +0 -19
- shinestacker-0.3.1/tests/test_0091_vignetting_algo.py +0 -127
- shinestacker-0.3.1/tests/test_0100_layer_collection.py +0 -66
- shinestacker-0.3.1/tests/test_1000_brush_mask.py +0 -13
- shinestacker-0.3.1/tests/test_1010_gui.py +0 -42
- shinestacker-0.3.1/tests/test_1020_gui_images.py +0 -128
- shinestacker-0.3.1/tests/test_1030_gui_logging.py +0 -118
- shinestacker-0.3.1/tests/test_1040_action_config.py +0 -120
- shinestacker-0.3.1/tests/test_1050_project_converter.py +0 -157
- shinestacker-0.3.1/tests/test_1060_gui_run.py +0 -136
- shinestacker-0.3.1/tests/test_1070_project_editor.py +0 -180
- shinestacker-0.3.1/tests/test_1080_actions_window.py +0 -138
- {shinestacker-0.3.1 → shinestacker-0.3.4}/.coverage +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/.coveragerc +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/.github/workflows/ci-multiplatform.yml +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/.github/workflows/pypi-publish.yml +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/.github/workflows/release.yml +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/.gitignore +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/.readthedocs.yaml +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/LICENSE +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/api.md +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/balancing.md +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/conf.py +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/gui.md +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/multilayer.md +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/noise.md +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/requirements.txt +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/docs/vignetting.md +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/img/extreme-vignetting.jpg +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/img/flow-diagram.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/img/gui-finder.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/img/gui-project-new.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/scripts/build_release.py +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/scripts/validate-tomli.py +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/setup.cfg +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/app/__init__.py +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/__init__.py +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/focus_stack_bkg.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/close-round-line-icon.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/forward-button-icon.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/play-button-round-icon.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/gui/img/plus-round-line-icon.png +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker/retouch/__init__.py +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/dependency_links.txt +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/entry_points.txt +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/requires.txt +0 -0
- {shinestacker-0.3.1 → shinestacker-0.3.4}/src/shinestacker.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Pylint Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, master ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main, master ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
pylint:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: write
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- uses: Silleellie/pylint-github-action@v2.1
|
|
18
|
+
with:
|
|
19
|
+
lint-path: src
|
|
20
|
+
python-version: 3.9
|
|
21
|
+
requirements-path: requirements.txt
|
|
22
|
+
readme-path: README.md
|
|
23
|
+
pylintrc-path: .pylintrc
|
|
24
|
+
badge-text: PyLint
|
|
25
|
+
color-bad-score: red
|
|
26
|
+
color-ok-score: orange
|
|
27
|
+
color-good-score: yellow
|
|
28
|
+
color-perfect-score: brightgreen
|
|
@@ -4,6 +4,44 @@ This page reports the main releases only and the main changes therein.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [v0.3.4] - 2025-08-16
|
|
8
|
+
**Code consolidation and fixes**
|
|
9
|
+
|
|
10
|
+
### Changes
|
|
11
|
+
|
|
12
|
+
* code consolidation with support of pylint code checking
|
|
13
|
+
* some bug fixes
|
|
14
|
+
* new project dialog shows the number of bunches, if selected
|
|
15
|
+
* updated sample images, examples and documentation
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## [v0.3.3] - 2025-08-13
|
|
20
|
+
**Fixed PyPI distribution**
|
|
21
|
+
|
|
22
|
+
This release is equivalent to v0.3.2, but resolves a problem for PyPI distribution.
|
|
23
|
+
|
|
24
|
+
### Changes
|
|
25
|
+
|
|
26
|
+
* examples and tests removed from PyPI distribution in order to fix file size limit
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## [v0.3.2] - 2025-08-13
|
|
31
|
+
**Fixes and code refactoring**
|
|
32
|
+
|
|
33
|
+
### Changes
|
|
34
|
+
|
|
35
|
+
* fixed ```from shinestacker import *```
|
|
36
|
+
* restored jupyter support and updated examples
|
|
37
|
+
* several bug fixes
|
|
38
|
+
* several code refactoring reduces interclass dependencies
|
|
39
|
+
* updated documentation
|
|
40
|
+
* added new sample images and project files
|
|
41
|
+
* examples removed from PyPI distribution
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
7
45
|
## [v0.3.1] - 2025-08-12
|
|
8
46
|
**Fixes and code refactoring**
|
|
9
47
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: shinestacker
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: ShineStacker
|
|
5
5
|
Author-email: Luca Lista <luka.lista@gmail.com>
|
|
6
6
|
License-Expression: LGPL-3.0
|
|
@@ -36,18 +36,25 @@ Dynamic: license-file
|
|
|
36
36
|
[](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
|
|
37
37
|
[](https://pypi.org/project/shinestacker/)
|
|
38
38
|
[](https://pypi.org/project/shinestacker/)
|
|
39
|
+
[](https://www.qt.io/qt-for-python)
|
|
39
40
|
[](https://codecov.io/github/lucalista/shinestacker)
|
|
41
|
+
[](https://github.com/lucalista/shinestacker/blob/main/.github/workflows/pylint.yml)
|
|
40
42
|
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
41
43
|
|
|
44
|
+
|
|
45
|
+
|
|
42
46
|
<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">
|
|
43
47
|
|
|
48
|
+
<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">
|
|
49
|
+
|
|
50
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
44
51
|
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
45
52
|
|
|
46
53
|
## Key Features
|
|
47
54
|
- 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
|
|
48
55
|
- 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
|
|
49
56
|
- 🧩 **Modular Architecture**: Mix-and-match processing modules
|
|
50
|
-
- 🖌️ **
|
|
57
|
+
- 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
|
|
51
58
|
- 📊 **Jupyter Integration**: Reproducible research notebooks
|
|
52
59
|
|
|
53
60
|
## Interactive GUI
|
|
@@ -58,13 +65,13 @@ The GUI has two main working areas:
|
|
|
58
65
|
|
|
59
66
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-project-run.png' width="600" referrerpolicy="no-referrer">
|
|
60
67
|
|
|
61
|
-
* *Retouch*:
|
|
68
|
+
* *Retouch*: select interactively details from individual frames and apply final filters to the blended image.
|
|
62
69
|
|
|
63
70
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
|
|
64
71
|
|
|
65
|
-
#
|
|
72
|
+
# Resources
|
|
66
73
|
|
|
67
|
-
📖 [Main documentation](https://
|
|
74
|
+
🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
|
|
68
75
|
|
|
69
76
|
|
|
70
77
|
# Credits
|
|
@@ -5,18 +5,25 @@
|
|
|
5
5
|
[](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
|
|
6
6
|
[](https://pypi.org/project/shinestacker/)
|
|
7
7
|
[](https://pypi.org/project/shinestacker/)
|
|
8
|
+
[](https://www.qt.io/qt-for-python)
|
|
8
9
|
[](https://codecov.io/github/lucalista/shinestacker)
|
|
10
|
+
[](https://github.com/lucalista/shinestacker/blob/main/.github/workflows/pylint.yml)
|
|
9
11
|
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
10
12
|
|
|
13
|
+
|
|
14
|
+
|
|
11
15
|
<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">
|
|
12
16
|
|
|
17
|
+
<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">
|
|
18
|
+
|
|
19
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
13
20
|
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
14
21
|
|
|
15
22
|
## Key Features
|
|
16
23
|
- 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
|
|
17
24
|
- 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
|
|
18
25
|
- 🧩 **Modular Architecture**: Mix-and-match processing modules
|
|
19
|
-
- 🖌️ **
|
|
26
|
+
- 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
|
|
20
27
|
- 📊 **Jupyter Integration**: Reproducible research notebooks
|
|
21
28
|
|
|
22
29
|
## Interactive GUI
|
|
@@ -27,13 +34,13 @@ The GUI has two main working areas:
|
|
|
27
34
|
|
|
28
35
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-project-run.png' width="600" referrerpolicy="no-referrer">
|
|
29
36
|
|
|
30
|
-
* *Retouch*:
|
|
37
|
+
* *Retouch*: select interactively details from individual frames and apply final filters to the blended image.
|
|
31
38
|
|
|
32
39
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
|
|
33
40
|
|
|
34
|
-
#
|
|
41
|
+
# Resources
|
|
35
42
|
|
|
36
|
-
📖 [Main documentation](https://
|
|
43
|
+
🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
|
|
37
44
|
|
|
38
45
|
|
|
39
46
|
# Credits
|
|
@@ -79,7 +79,7 @@ alignment_config = {
|
|
|
79
79
|
* ```refine_iters``` (optional, default: 100): refinement iterations. Used only if ```transform=ALIGN_RIGID```.
|
|
80
80
|
* ```align_confidence``` (optional, default: 99.9): alignment algorithm confidence (%). Used only if ```transform=ALIGN_RIGID```.
|
|
81
81
|
* ```max_iters``` (optional, default: 2000): maximum number of iterations. Used only if ```transform=ALIGN_HOMOGRAPHY```.
|
|
82
|
-
* ```subsample``` (optional, default: 1): subsample image for faster alignment. Faster, but alignment could be less accurate.
|
|
82
|
+
* ```subsample``` (optional, default: 1): subsample image for faster alignment. Faster, but alignment could be less accurate. It can save time, in particular for large images.
|
|
83
83
|
* ```fast_subsampling``` (optiona, default: ```False```): perform fast image subsampling without interpolation. Used if ```subsample``` is set to ```True```.
|
|
84
84
|
* ```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:
|
|
85
85
|
* ```BORDER_CONSTANT```: pad the image with a constant value. The border value is specified with the parameter ```border_value```.
|
|
@@ -10,7 +10,7 @@ Arguments for the constructor of ```FocusStack``` are:
|
|
|
10
10
|
* ```output_path``` (optional): the subdirectory within ```working_path``` where aligned images are written. If not specified, it is equal to ```name```.
|
|
11
11
|
* ```working_path```: the directory that contains input and output image subdirectories. If not specified, it is the same as ```job.working_path```.
|
|
12
12
|
* ```exif_path``` (optional): if specified, EXIF data are copied to the output file from file in the specified directory. If not specified, it is the source directory used as input for the first action. If set equal to ```''``` no EXIF data is saved.
|
|
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
16
|
|
|
@@ -28,7 +28,7 @@ Arguments for the constructor of ```FocusStackBunch``` are:
|
|
|
28
28
|
* ```exif_path``` (optional): if specified, EXIF data are copied to the output file from file in the specified directory. If not specified, it is the source directory used as * ```frames``` (optional, default: 10): the number of frames in each bunch that are stacked together.
|
|
29
29
|
* ```frames``` (optional, default: 10): the number of frames that are fused together.
|
|
30
30
|
* ```overlap``` (optional, default: 0): the number of overlapping frames between a bunch and the following one.
|
|
31
|
-
* ```
|
|
31
|
+
* ```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
32
|
* ```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
33
|
* ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
|
|
34
34
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Shine Stacker
|
|
2
|
+
|
|
3
|
+
## Focus Stacking Processing Framework and GUI
|
|
4
|
+
|
|
5
|
+
```{toctree}
|
|
6
|
+
:maxdepth: 2
|
|
7
|
+
:caption: Content
|
|
8
|
+
|
|
9
|
+
main.md
|
|
10
|
+
gui.md
|
|
11
|
+
job.md
|
|
12
|
+
alignment.md
|
|
13
|
+
balancing.md
|
|
14
|
+
focus_stacking.md
|
|
15
|
+
multilayer.md
|
|
16
|
+
noise.md
|
|
17
|
+
vignetting.md
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Create a job, then schedule the desired actions in a job, then run the job.
|
|
4
4
|
|
|
5
|
+
Quick start example:
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from shinestacker import *
|
|
9
|
+
|
|
10
|
+
job = StackJob("job", "E:/focus_stacking/project_directory/", input_path="tiff_images")
|
|
11
|
+
job.add_action(CombinedActions("align", actions=[AlignFrames(), BalanceFrames()]))
|
|
12
|
+
job.add_action(FocusStackBunch("batches", PyramidStack(), frames=12, overlap=2))
|
|
13
|
+
job.add_action(FocusStack("stack", PyramidStack(), prefix='pyram_'))
|
|
14
|
+
job.add_action(FocusStack("stack", DepthMapStack(), prefix='dmap_'))
|
|
15
|
+
job.run()
|
|
16
|
+
```
|
|
17
|
+
|
|
5
18
|
```python
|
|
6
19
|
job = StackJob(name, working_path [, input_path])
|
|
7
20
|
```
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Focus Stacking Processing Framework and GUI
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](https://pypi.org/project/shinestacker/)
|
|
7
|
-
[](https://pypi.org/project/shinestacker/)
|
|
8
|
-
[](https://codecov.io/github/lucalista/shinestacker)
|
|
9
|
-
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
5
|
+
<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">
|
|
10
6
|
|
|
11
|
-
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/
|
|
7
|
+
<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">
|
|
8
|
+
|
|
9
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
12
10
|
|
|
13
11
|
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
14
12
|
|
|
@@ -36,8 +34,8 @@ job.run()
|
|
|
36
34
|
Clone the pagkage from GitHub:
|
|
37
35
|
|
|
38
36
|
```bash
|
|
39
|
-
git clone https://github.com/lucalista/
|
|
40
|
-
cd
|
|
37
|
+
git clone https://github.com/lucalista/shinestacker.git
|
|
38
|
+
cd shinestacker
|
|
41
39
|
pip install -e .
|
|
42
40
|
```
|
|
43
41
|
|
|
@@ -45,7 +43,7 @@ pip install -e .
|
|
|
45
43
|
Launch GUI
|
|
46
44
|
|
|
47
45
|
```bash
|
|
48
|
-
|
|
46
|
+
shinestacker
|
|
49
47
|
```
|
|
50
48
|
|
|
51
49
|
Follow [GUI guide](gui.md) for batch processing and retouching.
|
|
@@ -54,21 +52,13 @@ Follow [GUI guide](gui.md) for batch processing and retouching.
|
|
|
54
52
|
## Advanced Processing Pipeline
|
|
55
53
|
|
|
56
54
|
```python
|
|
57
|
-
from shinestacker
|
|
58
|
-
|
|
59
|
-
job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
|
|
60
|
-
job.add_action(NoiseDetection())
|
|
61
|
-
job.run()
|
|
55
|
+
from shinestacker import *
|
|
62
56
|
|
|
63
|
-
job = StackJob("job", "E:/
|
|
64
|
-
job.add_action(CombinedActions("align",
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
job.add_action(FocusStackBunch("bunches", PyramidStack(), frames=10, overlap=2, denoise=0.8))
|
|
69
|
-
job.add_action(FocusStack("stack", PyramidStack(), prefix='pyramid_', denoise=0.8))
|
|
70
|
-
job.add_action(FocusStack("stack", DepthMapStack(), input_path='batches', prefix='depthmap_', denoise=0.8))
|
|
71
|
-
job.add_action(MultiLayer("multilayer", input_path=['batches', 'stack']))
|
|
57
|
+
job = StackJob("job", "E:/focus_stacking/project_directory/", input_path="tiff_images")
|
|
58
|
+
job.add_action(CombinedActions("align", actions=[AlignFrames(), BalanceFrames()]))
|
|
59
|
+
job.add_action(FocusStackBunch("batches", PyramidStack(), frames=12, overlap=2))
|
|
60
|
+
job.add_action(FocusStack("stack", PyramidStack(), prefix='pyram_'))
|
|
61
|
+
job.add_action(FocusStack("stack", DepthMapStack(), prefix='dmap_'))
|
|
72
62
|
job.run()
|
|
73
63
|
```
|
|
74
64
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -47,6 +47,12 @@ shinestacker = "shinestacker.app.main:main"
|
|
|
47
47
|
shinestacker-project = "shinestacker.app.project:main"
|
|
48
48
|
shinestacker-retouch = "shinestacker.app.retouch:main"
|
|
49
49
|
|
|
50
|
+
[tool.setuptools.exclude-package-data]
|
|
51
|
+
"*" = [
|
|
52
|
+
"examples/*",
|
|
53
|
+
"tests/*"
|
|
54
|
+
]
|
|
55
|
+
|
|
50
56
|
[tool.setuptools]
|
|
51
57
|
package-dir = {"" = "src"}
|
|
52
58
|
packages = [
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# flake8: noqa F401 F403
|
|
2
|
+
# pylint: disable=C0114, E0401
|
|
3
|
+
from ._version import __version__
|
|
4
|
+
from . import config
|
|
5
|
+
from . import core
|
|
6
|
+
from . import algorithms
|
|
7
|
+
from .config import __all__ as config_all
|
|
8
|
+
from .core import __all__ as core_all
|
|
9
|
+
from .algorithms import __all__ as algorithms_all
|
|
10
|
+
from .config import *
|
|
11
|
+
from .core import *
|
|
12
|
+
from .algorithms import *
|
|
13
|
+
|
|
14
|
+
__all__ = ['__version__']
|
|
15
|
+
__all__ += config_all
|
|
16
|
+
__all__ += core_all
|
|
17
|
+
__all__ += algorithms_all
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.3.4'
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
# flake8: noqa F401
|
|
2
|
+
# pylint: disable=C0114
|
|
3
|
+
import logging
|
|
2
4
|
from .. config.constants import constants
|
|
3
5
|
from .stack_framework import StackJob, CombinedActions
|
|
4
6
|
from .align import AlignFrames
|
|
@@ -9,11 +11,10 @@ from .pyramid import PyramidStack
|
|
|
9
11
|
from .multilayer import MultiLayer
|
|
10
12
|
from .noise_detection import NoiseDetection, MaskNoise
|
|
11
13
|
from .vignetting import Vignetting
|
|
12
|
-
import logging
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
14
15
|
logger.addHandler(logging.NullHandler())
|
|
15
16
|
|
|
16
17
|
__all__ = [
|
|
17
18
|
'StackJob', 'CombinedActions', 'AlignFrames', 'BalanceFrames', 'FocusStackBunch', 'FocusStack',
|
|
18
19
|
'DepthMapStack', 'PyramidStack', 'MultiLayer', 'NoiseDetection', 'MaskNoise', 'Vignetting'
|
|
19
|
-
]
|
|
20
|
+
]
|