Photo-Composition-Designer 0.0.7__tar.gz → 0.0.9__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.
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.idea/workspace.xml +45 -21
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/HISTORY.md +13 -2
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/Makefile +1 -1
- photo_composition_designer-0.0.9/PKG-INFO +130 -0
- photo_composition_designer-0.0.9/README.md +101 -0
- photo_composition_designer-0.0.9/docs/_static/img/gui_main.png +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/getting-started/install.md +1 -0
- photo_composition_designer-0.0.9/docs/index.md +94 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/_version.py +3 -3
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/cli/cli.py +2 -2
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/common/logging.py +11 -15
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/core/base.py +29 -14
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/gui/gui.py +61 -21
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/tools/DescriptionsFileGenerator.py +1 -1
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/tools/GeoPlotter.py +3 -0
- photo_composition_designer-0.0.9/src/Photo_Composition_Designer.egg-info/PKG-INFO +130 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer.egg-info/SOURCES.txt +1 -4
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_DescriptionsFileGenerator.py +1 -1
- photo_composition_designer-0.0.7/PKG-INFO +0 -205
- photo_composition_designer-0.0.7/README.md +0 -62
- photo_composition_designer-0.0.7/docs/develop/contributing.md +0 -163
- photo_composition_designer-0.0.7/docs/develop/make_windows.md +0 -215
- photo_composition_designer-0.0.7/docs/develop/naming_convention.md +0 -46
- photo_composition_designer-0.0.7/docs/develop/pypi_release.md +0 -233
- photo_composition_designer-0.0.7/docs/index.md +0 -169
- photo_composition_designer-0.0.7/src/Photo_Composition_Designer.egg-info/PKG-INFO +0 -205
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/FUNDING.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/actions/setup-environment/action.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/dependabot.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/init.sh +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/release_message.sh +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/rename_project.sh +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/update_funding.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/workflows/build-linux.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/workflows/build-macos.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/workflows/build-win.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/workflows/main.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/workflows/release.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.github/workflows/update_readme.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.gitignore +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.idea/runConfigurations/config_generate.xml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.idea/runConfigurations/module_cli.xml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.idea/runConfigurations/module_gui.xml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.idea/vcs.xml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.pre-commit-config-linux.yaml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.pre-commit-config.yaml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/.readthedocs.yaml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/LICENSE +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/anniversaries.ini +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/config.yaml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/.nav.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/_static/img/favicon.png +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/_static/img/logo.png +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/css/custom.css +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/funding/funding.md +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/getting-started/virtual-environment.md +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/usage/cli.md +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/docs/usage/config.md +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/descriptions.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/title/This is a description for all photos of this calender collage page. It will be displayed in one line between the photos and the calendar items..txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/title/image_02.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_1/description.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_1/image_01.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_2/image_04.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_2/image_13.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_3/This is a description for all photos of this calender collage page. It will be displayed in one line between the photos and the calendar items..txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_3/image_02.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_3/image_03.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_3/image_07.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_4/image_08.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_4/image_09.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_4/image_10.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_4/image_13.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_5/Lisbon.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_5/image_05.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_5/image_06.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_5/image_07.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/images/week_5/image_13.jpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/locations_de.ini +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/locations_en.ini +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/mkdocs.yml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/pyproject.toml +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/pytest.ini +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_admin_0_countries/ne_50m_admin_0_countries.README.html +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_admin_0_countries/ne_50m_admin_0_countries.VERSION.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_admin_0_countries/ne_50m_admin_0_countries.cpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_admin_0_countries/ne_50m_admin_0_countries.dbf +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_admin_0_countries/ne_50m_admin_0_countries.prj +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shp +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shx +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_rivers_lake_centerlines_scale_rank/ne_50m_rivers_lake_centerlines_scale_rank.README.html +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_rivers_lake_centerlines_scale_rank/ne_50m_rivers_lake_centerlines_scale_rank.VERSION.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_rivers_lake_centerlines_scale_rank/ne_50m_rivers_lake_centerlines_scale_rank.cpg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_rivers_lake_centerlines_scale_rank/ne_50m_rivers_lake_centerlines_scale_rank.dbf +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_rivers_lake_centerlines_scale_rank/ne_50m_rivers_lake_centerlines_scale_rank.prj +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_rivers_lake_centerlines_scale_rank/ne_50m_rivers_lake_centerlines_scale_rank.shp +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/res/maps/ne_50m_rivers_lake_centerlines_scale_rank/ne_50m_rivers_lake_centerlines_scale_rank.shx +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/scripts/generate_config_docs.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/scripts/show_filelist.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/scripts/show_tree.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/scripts/update_readme.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/setup.cfg +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/__main__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/cli/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/cli/__main__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/common/Anniversaries.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/common/Locations.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/common/MoonPhase.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/common/Photo.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/common/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/config/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/config/config.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/core/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/gui/GuiLogWriter.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/gui/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/gui/__main__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/image/CalendarRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/image/CollageRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/image/DescriptionRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/image/MapRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/image/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/tools/Helpers.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/tools/ImageDistributor.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer/tools/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer.egg-info/dependency_links.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer.egg-info/entry_points.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer.egg-info/requires.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/Photo_Composition_Designer.egg-info/top_level.txt +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/firewall_handler.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/main.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/src/path_handler.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/template.yml.url +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/TestHelper.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/__init__.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_CalendarRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_CollageRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_CompositionDesigner.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_DescriptionRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_GeoPlotter.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_ImageDistributor.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_Locations.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_MapRenderer.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_MoonPhase.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_Photo.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_anniversaries.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/tests/test_cli.py +0 -0
- {photo_composition_designer-0.0.7 → photo_composition_designer-0.0.9}/uv.lock +0 -0
|
@@ -4,9 +4,14 @@
|
|
|
4
4
|
<option name="autoReloadType" value="SELECTIVE" />
|
|
5
5
|
</component>
|
|
6
6
|
<component name="ChangeListManager">
|
|
7
|
-
<list default="true" id="7196224b-0c6d-4df3-926f-d243fd984ba4" name="Changes" comment="
|
|
7
|
+
<list default="true" id="7196224b-0c6d-4df3-926f-d243fd984ba4" name="Changes" comment="set up nice documentation">
|
|
8
8
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
|
9
|
-
<change beforePath="$PROJECT_DIR$/
|
|
9
|
+
<change beforePath="$PROJECT_DIR$/docs/index.md" beforeDir="false" afterPath="$PROJECT_DIR$/docs/index.md" afterDir="false" />
|
|
10
|
+
<change beforePath="$PROJECT_DIR$/src/Photo_Composition_Designer/cli/cli.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/Photo_Composition_Designer/cli/cli.py" afterDir="false" />
|
|
11
|
+
<change beforePath="$PROJECT_DIR$/src/Photo_Composition_Designer/common/logging.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/Photo_Composition_Designer/common/logging.py" afterDir="false" />
|
|
12
|
+
<change beforePath="$PROJECT_DIR$/src/Photo_Composition_Designer/core/base.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/Photo_Composition_Designer/core/base.py" afterDir="false" />
|
|
13
|
+
<change beforePath="$PROJECT_DIR$/src/Photo_Composition_Designer/gui/gui.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/Photo_Composition_Designer/gui/gui.py" afterDir="false" />
|
|
14
|
+
<change beforePath="$PROJECT_DIR$/src/Photo_Composition_Designer/tools/GeoPlotter.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/Photo_Composition_Designer/tools/GeoPlotter.py" afterDir="false" />
|
|
10
15
|
</list>
|
|
11
16
|
<list id="124f435c-cc09-40e9-9ed2-72d6742eb56b" name="NO_COMMIT" comment="" />
|
|
12
17
|
<option name="SHOW_DIALOG" value="false" />
|
|
@@ -88,17 +93,17 @@
|
|
|
88
93
|
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
|
89
94
|
"RunOnceActivity.git.unshallow": "true",
|
|
90
95
|
"git-widget-placeholder": "main",
|
|
91
|
-
"last_opened_file_path": "/home/paul/dev/Photo-Composition-Designer",
|
|
92
|
-
"settings.editor.selected.configurable": "
|
|
96
|
+
"last_opened_file_path": "/home/paul/dev/Photo-Composition-Designer/docs/_static/img",
|
|
97
|
+
"settings.editor.selected.configurable": "com.android.studio.ml.bot.mainConfigurable"
|
|
93
98
|
}
|
|
94
99
|
}]]></component>
|
|
95
100
|
<component name="RecentsManager">
|
|
96
101
|
<key name="CopyFile.RECENT_KEYS">
|
|
102
|
+
<recent name="$PROJECT_DIR$/docs/_static/img" />
|
|
97
103
|
<recent name="$PROJECT_DIR$" />
|
|
98
104
|
<recent name="$PROJECT_DIR$/.github/workflows" />
|
|
99
105
|
<recent name="$PROJECT_DIR$/images" />
|
|
100
106
|
<recent name="$PROJECT_DIR$/tests" />
|
|
101
|
-
<recent name="$PROJECT_DIR$/src/Photo_Composition_Designer/config" />
|
|
102
107
|
</key>
|
|
103
108
|
<key name="MoveFile.RECENT_KEYS">
|
|
104
109
|
<recent name="$PROJECT_DIR$" />
|
|
@@ -213,9 +218,9 @@
|
|
|
213
218
|
<item itemvalue="Python.config-generate" />
|
|
214
219
|
<item itemvalue="Python.module cli" />
|
|
215
220
|
<item itemvalue="Python.module gui" />
|
|
216
|
-
<item itemvalue="Python.show_tree" />
|
|
217
221
|
<item itemvalue="Python.cli" />
|
|
218
222
|
<item itemvalue="Python.main" />
|
|
223
|
+
<item itemvalue="Python.show_tree" />
|
|
219
224
|
<item itemvalue="Python tests.pytest in test_DescriptionsFileGenerator.py" />
|
|
220
225
|
<item itemvalue="Python tests.pytest in test_cli.py" />
|
|
221
226
|
</list>
|
|
@@ -232,7 +237,7 @@
|
|
|
232
237
|
<component name="SharedIndexes">
|
|
233
238
|
<attachedChunks>
|
|
234
239
|
<set>
|
|
235
|
-
<option value="bundled-python-sdk-
|
|
240
|
+
<option value="bundled-python-sdk-7bb8055f9097-cbfc7b97e6b2-com.jetbrains.pycharm.community.sharedIndexes.bundled-PC-252.28238.29" />
|
|
236
241
|
</set>
|
|
237
242
|
</attachedChunks>
|
|
238
243
|
</component>
|
|
@@ -581,7 +586,31 @@
|
|
|
581
586
|
<option name="project" value="LOCAL" />
|
|
582
587
|
<updated>1764495033316</updated>
|
|
583
588
|
</task>
|
|
584
|
-
<
|
|
589
|
+
<task id="LOCAL-00043" summary="fix more import errors">
|
|
590
|
+
<option name="closed" value="true" />
|
|
591
|
+
<created>1764496058584</created>
|
|
592
|
+
<option name="number" value="00043" />
|
|
593
|
+
<option name="presentableId" value="LOCAL-00043" />
|
|
594
|
+
<option name="project" value="LOCAL" />
|
|
595
|
+
<updated>1764496058584</updated>
|
|
596
|
+
</task>
|
|
597
|
+
<task id="LOCAL-00044" summary="fix zip linux">
|
|
598
|
+
<option name="closed" value="true" />
|
|
599
|
+
<created>1764496556213</created>
|
|
600
|
+
<option name="number" value="00044" />
|
|
601
|
+
<option name="presentableId" value="LOCAL-00044" />
|
|
602
|
+
<option name="project" value="LOCAL" />
|
|
603
|
+
<updated>1764496556213</updated>
|
|
604
|
+
</task>
|
|
605
|
+
<task id="LOCAL-00045" summary="set up nice documentation">
|
|
606
|
+
<option name="closed" value="true" />
|
|
607
|
+
<created>1764540117905</created>
|
|
608
|
+
<option name="number" value="00045" />
|
|
609
|
+
<option name="presentableId" value="LOCAL-00045" />
|
|
610
|
+
<option name="project" value="LOCAL" />
|
|
611
|
+
<updated>1764540117905</updated>
|
|
612
|
+
</task>
|
|
613
|
+
<option name="localTasksCounter" value="46" />
|
|
585
614
|
<servers />
|
|
586
615
|
</component>
|
|
587
616
|
<component name="Vcs.Log.Tabs.Properties">
|
|
@@ -596,9 +625,6 @@
|
|
|
596
625
|
</option>
|
|
597
626
|
</component>
|
|
598
627
|
<component name="VcsManagerConfiguration">
|
|
599
|
-
<MESSAGE value="add tests for CompositionDesigner.py" />
|
|
600
|
-
<MESSAGE value="add tests for CompositionDesigner.py, fix issue with font" />
|
|
601
|
-
<MESSAGE value="* move all generators that create images to image * typings * refactorings" />
|
|
602
628
|
<MESSAGE value="consistently rename core methods" />
|
|
603
629
|
<MESSAGE value="only use Image.Image in CollageGenerator.py" />
|
|
604
630
|
<MESSAGE value="remove unused images, restructure test" />
|
|
@@ -621,7 +647,10 @@
|
|
|
621
647
|
<MESSAGE value="move all ini files top-level so that the user can find them immediately" />
|
|
622
648
|
<MESSAGE value="add ini files individually, fix test_cli.py for windows" />
|
|
623
649
|
<MESSAGE value="improve path issue with relative paths to res/ini files" />
|
|
624
|
-
<
|
|
650
|
+
<MESSAGE value="fix more import errors" />
|
|
651
|
+
<MESSAGE value="fix zip linux" />
|
|
652
|
+
<MESSAGE value="set up nice documentation" />
|
|
653
|
+
<option name="LAST_COMMIT_MESSAGE" value="set up nice documentation" />
|
|
625
654
|
</component>
|
|
626
655
|
<component name="XDebuggerManager">
|
|
627
656
|
<breakpoint-manager>
|
|
@@ -673,12 +702,12 @@
|
|
|
673
702
|
</line-breakpoint>
|
|
674
703
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
675
704
|
<url>file://$PROJECT_DIR$/src/Photo_Composition_Designer/gui/gui.py</url>
|
|
676
|
-
<line>
|
|
705
|
+
<line>442</line>
|
|
677
706
|
<option name="timeStamp" value="31" />
|
|
678
707
|
</line-breakpoint>
|
|
679
708
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
680
709
|
<url>file://$PROJECT_DIR$/src/Photo_Composition_Designer/gui/gui.py</url>
|
|
681
|
-
<line>
|
|
710
|
+
<line>447</line>
|
|
682
711
|
<option name="timeStamp" value="32" />
|
|
683
712
|
</line-breakpoint>
|
|
684
713
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
@@ -693,12 +722,12 @@
|
|
|
693
722
|
</line-breakpoint>
|
|
694
723
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
695
724
|
<url>file://$PROJECT_DIR$/src/Photo_Composition_Designer/gui/gui.py</url>
|
|
696
|
-
<line>
|
|
725
|
+
<line>278</line>
|
|
697
726
|
<option name="timeStamp" value="51" />
|
|
698
727
|
</line-breakpoint>
|
|
699
728
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
700
729
|
<url>file://$PROJECT_DIR$/src/Photo_Composition_Designer/core/base.py</url>
|
|
701
|
-
<line>
|
|
730
|
+
<line>60</line>
|
|
702
731
|
<option name="timeStamp" value="53" />
|
|
703
732
|
</line-breakpoint>
|
|
704
733
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
@@ -716,11 +745,6 @@
|
|
|
716
745
|
<line>110</line>
|
|
717
746
|
<option name="timeStamp" value="56" />
|
|
718
747
|
</line-breakpoint>
|
|
719
|
-
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
720
|
-
<url>file://$PROJECT_DIR$/src/Photo_Composition_Designer/common/Anniversaries.py</url>
|
|
721
|
-
<line>10</line>
|
|
722
|
-
<option name="timeStamp" value="57" />
|
|
723
|
-
</line-breakpoint>
|
|
724
748
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
725
749
|
<url>file://$PROJECT_DIR$/scripts/show_tree.py</url>
|
|
726
750
|
<line>138</line>
|
|
@@ -2,8 +2,19 @@ Changelog
|
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
(
|
|
6
|
-
|
|
5
|
+
0.0.8 (2025-12-01)
|
|
6
|
+
------------------
|
|
7
|
+
- Docs: Update HISTORY.md for release 0.0.8. [Paul Magister]
|
|
8
|
+
- Fix test. [Paul Magister]
|
|
9
|
+
- Progress bar, logger in base.py, lifecycle fixes. [Paul Magister]
|
|
10
|
+
- Improved logging. [Paul Magister]
|
|
11
|
+
- Update README.md from docs/index.md. [github-actions]
|
|
12
|
+
- Set up nice documentation. [Paul Magister]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
0.0.7 (2025-11-30)
|
|
16
|
+
------------------
|
|
17
|
+
- Docs: Update HISTORY.md for release 0.0.7. [Paul Magister]
|
|
7
18
|
- Remove zip function from makefile. [Paul Magister]
|
|
8
19
|
|
|
9
20
|
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Photo-Composition-Designer
|
|
3
|
+
Version: 0.0.9
|
|
4
|
+
Summary: Feature-rich Python project template for Photo-Composition-Designer.
|
|
5
|
+
Author: pamagister
|
|
6
|
+
Requires-Python: <3.12,>=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: astral>=3.2
|
|
10
|
+
Requires-Dist: config-cli-gui>=0.2.7
|
|
11
|
+
Requires-Dist: exifread>=3.5.1
|
|
12
|
+
Requires-Dist: geopandas>=1.1.1
|
|
13
|
+
Requires-Dist: holidays>=0.84
|
|
14
|
+
Requires-Dist: matplotlib>=3.10.7
|
|
15
|
+
Requires-Dist: pillow>=12.0.0
|
|
16
|
+
Requires-Dist: pytz>=2025.2
|
|
17
|
+
Requires-Dist: shapely>=2.1.1
|
|
18
|
+
Provides-Extra: dev
|
|
19
|
+
Requires-Dist: pytest>=8.4.0; extra == "dev"
|
|
20
|
+
Requires-Dist: pytest-mock>=3.14.1; extra == "dev"
|
|
21
|
+
Requires-Dist: coverage>=7.8.2; extra == "dev"
|
|
22
|
+
Requires-Dist: flake8>=7.2.0; extra == "dev"
|
|
23
|
+
Requires-Dist: black>=25.1.0; extra == "dev"
|
|
24
|
+
Requires-Dist: isort>=6.0.1; extra == "dev"
|
|
25
|
+
Requires-Dist: pytest-cov>=6.1.1; extra == "dev"
|
|
26
|
+
Requires-Dist: mypy>=1.16.0; extra == "dev"
|
|
27
|
+
Requires-Dist: gitchangelog>=3.0.4; extra == "dev"
|
|
28
|
+
Requires-Dist: pyinstaller>=5.8; extra == "dev"
|
|
29
|
+
Requires-Dist: pre-commit>=4.2.0; extra == "dev"
|
|
30
|
+
Requires-Dist: ruff>=0.11.13; extra == "dev"
|
|
31
|
+
Provides-Extra: docs
|
|
32
|
+
Requires-Dist: mkdocs>=1.6.1; extra == "docs"
|
|
33
|
+
Requires-Dist: mkdocs-awesome-nav>=2.6.1; extra == "docs"
|
|
34
|
+
Requires-Dist: pygments>=2.19.1; extra == "docs"
|
|
35
|
+
Dynamic: license-file
|
|
36
|
+
|
|
37
|
+
# Welcome to Photo-Composition-Designer
|
|
38
|
+
|
|
39
|
+
Photo-Composition-Designer is a tool designed to automate the creation of beautiful image-based calendars. The system sorts images, generates collages, adds descriptions and maps, and formats everything into a structured calendar layout.
|
|
40
|
+
|
|
41
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/actions)
|
|
42
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/releases)
|
|
43
|
+
[](https://Photo-Composition-Designer.readthedocs.io/en/stable/)
|
|
44
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/blob/main/LICENSE)
|
|
45
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/issues)
|
|
46
|
+
[](https://pypi.org/project/Photo-Composition-Designer/)
|
|
47
|
+
[](https://pepy.tech/project/Photo-Composition-Designer/)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## 🛠️ Features
|
|
52
|
+
|
|
53
|
+
* ✅ **Automated Calendar Generation** – Generates a full image-based calendar.
|
|
54
|
+
* ✅ **Configurable Settings** – Modify sizes, layouts, and text via `config.yaml`.
|
|
55
|
+
* ✅ **Anniversaries & Events** – Load anniversaries and special dates using `anniversaries.ini`.
|
|
56
|
+
* ✅ **Location-Based Maps** – Integrate maps showing image locations using gps meta-data or image names and `locations.ini`.
|
|
57
|
+
* ✅ **GUI Configuration Tool** – Easily modify configurations via a dynamic UI.
|
|
58
|
+
* ✅ **Folder Management** – Automatically structures and organizes images into necessary folders.
|
|
59
|
+
|
|
60
|
+

|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Installation via executable:
|
|
65
|
+
|
|
66
|
+
Download the latest executable:
|
|
67
|
+
|
|
68
|
+
- [⬇️ Download for Windows](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/installer-win.zip)
|
|
69
|
+
- [⬇️ Download for Linux](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-linux.zip)
|
|
70
|
+
- [⬇️ Download for macOS](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-macos.zip)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## Installation via pypi
|
|
74
|
+
|
|
75
|
+
Get an impression of how your own project could be installed and look like.
|
|
76
|
+
|
|
77
|
+
Download from [PyPI](https://pypi.org/).
|
|
78
|
+
|
|
79
|
+
💾 For more installation options see [install](getting-started/install.md).
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
pip install Photo-Composition-Designer
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Run GUI from command line
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
Photo-Composition-Designer
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
## 🔄 Workflow
|
|
95
|
+
|
|
96
|
+
### 1️⃣ **Configuring the parameters**
|
|
97
|
+
You can adjust the result by setting up your own parameters like size, margins and colors.
|
|
98
|
+
For more details, see [Configuration Parameters](usage/config.md).
|
|
99
|
+
Modify your settings inside the `config.yaml` or using the GUI:
|
|
100
|
+
- Image sizes (mm converted to pixels internally)
|
|
101
|
+
- Calendar layout
|
|
102
|
+
- Paths to `anniversaries.ini` and `locations.ini`
|
|
103
|
+
|
|
104
|
+
### 2️⃣ **Sorting Images into Folders**
|
|
105
|
+
Organize your images in the `images/` directory before running the generator.
|
|
106
|
+
You can use one of the distribution methods to distribute your plain images inside this directory
|
|
107
|
+
into sub-folders that represent your weekly collage content.
|
|
108
|
+
|
|
109
|
+
```plaintext
|
|
110
|
+
📁 images/
|
|
111
|
+
├── 📁 0-Title/
|
|
112
|
+
├── 2024-01-01_ski_trip.jpg
|
|
113
|
+
├── 📁 Week 1/
|
|
114
|
+
├── 2024-02-14_valentines_dinner in London.jpg
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 3️⃣ **Provide Descriptions** 🖥️
|
|
118
|
+
Provide descriptions for every week to describe the events.
|
|
119
|
+
You can use one single `description.txt` file that can be generated using the GUI
|
|
120
|
+
or you can put individual txt files into every single weekly sub folder.
|
|
121
|
+
|
|
122
|
+
### 4️⃣ **Setting up the birthday dates** 🎂📅
|
|
123
|
+
Provide the birthday information of your friends and family by using the `anniversaries.ini`
|
|
124
|
+
|
|
125
|
+
### **Generating the Calendar** 🖼️
|
|
126
|
+
Use **Generate Composition** to generate all collages and one PDF file containing all your compositions.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
If you find this app helpful, [Funding](funding/funding.md) is highly appreciated 🧡.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<!-- This README.md is auto-generated from docs/index.md -->
|
|
2
|
+
|
|
3
|
+
# Welcome to Photo-Composition-Designer
|
|
4
|
+
|
|
5
|
+
Photo-Composition-Designer is a tool designed to automate the creation of beautiful image-based calendars. The system sorts images, generates collages, adds descriptions and maps, and formats everything into a structured calendar layout.
|
|
6
|
+
|
|
7
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/actions)
|
|
8
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/releases)
|
|
9
|
+
[](https://Photo-Composition-Designer.readthedocs.io/en/stable/)
|
|
10
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/blob/main/LICENSE)
|
|
11
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/issues)
|
|
12
|
+
[](https://pypi.org/project/Photo-Composition-Designer/)
|
|
13
|
+
[](https://pepy.tech/project/Photo-Composition-Designer/)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## 🛠️ Features
|
|
18
|
+
✅ **Automated Calendar Generation** – Generates a full image-based calendar.
|
|
19
|
+
✅ **Configurable Settings** – Modify sizes, layouts, and text via `config.yaml`.
|
|
20
|
+
✅ **Anniversaries & Events** – Load anniversaries and special dates using `anniversaries.ini`.
|
|
21
|
+
✅ **Location-Based Maps** – Integrate maps showing image locations using gps meta-data or image names and `locations.ini`.
|
|
22
|
+
✅ **GUI Configuration Tool** – Easily modify configurations via a dynamic UI.
|
|
23
|
+
✅ **Folder Management** – Automatically structures and organizes images into necessary folders.
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Installation via executable:
|
|
30
|
+
|
|
31
|
+
Download the latest executable:
|
|
32
|
+
|
|
33
|
+
- [⬇️ Download for Windows](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/installer-win.zip)
|
|
34
|
+
- [⬇️ Download for Linux](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-linux.zip)
|
|
35
|
+
- [⬇️ Download for macOS](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-macos.zip)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## Installation via pypi
|
|
39
|
+
|
|
40
|
+
Get an impression of how your own project could be installed and look like.
|
|
41
|
+
|
|
42
|
+
Download from [PyPI](https://pypi.org/).
|
|
43
|
+
|
|
44
|
+
💾 For more installation options see [install](docs/getting-started/install.md).
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
pip install Photo-Composition-Designer
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Run GUI from command line
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
Photo-Composition-Designer
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Configuration parameters
|
|
59
|
+
|
|
60
|
+
You can adjust the result by setting up your own parameters like size, margins and colors.
|
|
61
|
+
For more details, see [Configuration Parameters](usage/config.md).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## 🔄 Workflow
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
### 1️⃣ **Configuring the Settings**
|
|
70
|
+
Modify your settings inside the `config.yaml` or using the GUI:
|
|
71
|
+
- Image sizes (mm converted to pixels internally)
|
|
72
|
+
- Calendar layout
|
|
73
|
+
- Paths to `anniversaries.ini` and `locations.ini`
|
|
74
|
+
|
|
75
|
+
### 2️⃣ **Sorting Images into Folders**
|
|
76
|
+
Organize your images in the `images/` directory before running the generator.
|
|
77
|
+
You can use one of the distribution methods to distribute your plain images inside this directory
|
|
78
|
+
into sub-folders that represent your weekly collage content.
|
|
79
|
+
|
|
80
|
+
```plaintext
|
|
81
|
+
📁 images/
|
|
82
|
+
├── 📁 0-Title/
|
|
83
|
+
├── 2024-01-01_ski_trip.jpg
|
|
84
|
+
├── 📁 Week 1/
|
|
85
|
+
├── 2024-02-14_valentines_dinner in London.jpg
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 3️⃣ **Provide Descriptions** 🖥️
|
|
89
|
+
Provide descriptions for every week to describe the events.
|
|
90
|
+
You can use one single `description.txt` file that can be generated using the GUI
|
|
91
|
+
or you can put individual txt files into every single weekly sub folder.
|
|
92
|
+
|
|
93
|
+
### 4️⃣ **Setting up the birthday dates** 🎂📅
|
|
94
|
+
Provide the birthday information of your friends and family by using the `anniversaries.ini`
|
|
95
|
+
|
|
96
|
+
### **Generating the Calendar** 🖼️
|
|
97
|
+
Use **Generate Composition** to generate all collages and one PDF file containing all your compositions.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
If you find this app helpful, [Funding](funding/funding.md) is highly appreciated 🧡.
|
|
Binary file
|
|
@@ -26,6 +26,7 @@ Photo-Composition-Designer-gui
|
|
|
26
26
|
Download the latest executable:
|
|
27
27
|
|
|
28
28
|
- [⬇️ Download for Windows](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/installer-win.zip)
|
|
29
|
+
- [⬇️ Download for Linux](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-linux.zip)
|
|
29
30
|
- [⬇️ Download for macOS](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-macos.zip)
|
|
30
31
|
|
|
31
32
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Welcome to Photo-Composition-Designer
|
|
2
|
+
|
|
3
|
+
Photo-Composition-Designer is a tool designed to automate the creation of beautiful image-based calendars. The system sorts images, generates collages, adds descriptions and maps, and formats everything into a structured calendar layout.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/actions)
|
|
6
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/releases)
|
|
7
|
+
[](https://Photo-Composition-Designer.readthedocs.io/en/stable/)
|
|
8
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/blob/main/LICENSE)
|
|
9
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/issues)
|
|
10
|
+
[](https://pypi.org/project/Photo-Composition-Designer/)
|
|
11
|
+
[](https://pepy.tech/project/Photo-Composition-Designer/)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## 🛠️ Features
|
|
16
|
+
|
|
17
|
+
* ✅ **Automated Calendar Generation** – Generates a full image-based calendar.
|
|
18
|
+
* ✅ **Configurable Settings** – Modify sizes, layouts, and text via `config.yaml`.
|
|
19
|
+
* ✅ **Anniversaries & Events** – Load anniversaries and special dates using `anniversaries.ini`.
|
|
20
|
+
* ✅ **Location-Based Maps** – Integrate maps showing image locations using gps meta-data or image names and `locations.ini`.
|
|
21
|
+
* ✅ **GUI Configuration Tool** – Easily modify configurations via a dynamic UI.
|
|
22
|
+
* ✅ **Folder Management** – Automatically structures and organizes images into necessary folders.
|
|
23
|
+
|
|
24
|
+

|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Installation via executable:
|
|
29
|
+
|
|
30
|
+
Download the latest executable:
|
|
31
|
+
|
|
32
|
+
- [⬇️ Download for Windows](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/installer-win.zip)
|
|
33
|
+
- [⬇️ Download for Linux](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-linux.zip)
|
|
34
|
+
- [⬇️ Download for macOS](https://github.com/pamagister/Photo-Composition-Designer/releases/latest/download/package-macos.zip)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## Installation via pypi
|
|
38
|
+
|
|
39
|
+
Get an impression of how your own project could be installed and look like.
|
|
40
|
+
|
|
41
|
+
Download from [PyPI](https://pypi.org/).
|
|
42
|
+
|
|
43
|
+
💾 For more installation options see [install](getting-started/install.md).
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pip install Photo-Composition-Designer
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Run GUI from command line
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
Photo-Composition-Designer
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## 🔄 Workflow
|
|
59
|
+
|
|
60
|
+
### 1️⃣ **Configuring the parameters**
|
|
61
|
+
You can adjust the result by setting up your own parameters like size, margins and colors.
|
|
62
|
+
For more details, see [Configuration Parameters](usage/config.md).
|
|
63
|
+
Modify your settings inside the `config.yaml` or using the GUI:
|
|
64
|
+
- Image sizes (mm converted to pixels internally)
|
|
65
|
+
- Calendar layout
|
|
66
|
+
- Paths to `anniversaries.ini` and `locations.ini`
|
|
67
|
+
|
|
68
|
+
### 2️⃣ **Sorting Images into Folders**
|
|
69
|
+
Organize your images in the `images/` directory before running the generator.
|
|
70
|
+
You can use one of the distribution methods to distribute your plain images inside this directory
|
|
71
|
+
into sub-folders that represent your weekly collage content.
|
|
72
|
+
|
|
73
|
+
```plaintext
|
|
74
|
+
📁 images/
|
|
75
|
+
├── 📁 0-Title/
|
|
76
|
+
├── 2024-01-01_ski_trip.jpg
|
|
77
|
+
├── 📁 Week 1/
|
|
78
|
+
├── 2024-02-14_valentines_dinner in London.jpg
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 3️⃣ **Provide Descriptions** 🖥️
|
|
82
|
+
Provide descriptions for every week to describe the events.
|
|
83
|
+
You can use one single `description.txt` file that can be generated using the GUI
|
|
84
|
+
or you can put individual txt files into every single weekly sub folder.
|
|
85
|
+
|
|
86
|
+
### 4️⃣ **Setting up the birthday dates** 🎂📅
|
|
87
|
+
Provide the birthday information of your friends and family by using the `anniversaries.ini`
|
|
88
|
+
|
|
89
|
+
### **Generating the Calendar** 🖼️
|
|
90
|
+
Use **Generate Composition** to generate all collages and one PDF file containing all your compositions.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
If you find this app helpful, [Funding](funding/funding.md) is highly appreciated 🧡.
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 0,
|
|
31
|
+
__version__ = version = '0.0.9'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 0, 9)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gdaac21952'
|
|
@@ -23,7 +23,7 @@ def validate_config(config_manager: ConfigParameterManager) -> bool:
|
|
|
23
23
|
True if configuration is valid, False otherwise
|
|
24
24
|
"""
|
|
25
25
|
# Initialize logging system
|
|
26
|
-
logger_manager = initialize_logging(config_manager)
|
|
26
|
+
logger_manager = initialize_logging(config_manager.app.log_level.value)
|
|
27
27
|
logger = logger_manager.get_logger("Photo_Composition_Designer.cli")
|
|
28
28
|
|
|
29
29
|
# Get CLI category and check required parameters
|
|
@@ -53,7 +53,7 @@ def run_main_processing(config_manager: ConfigParameterManager) -> int:
|
|
|
53
53
|
Exit code (0 for success, non-zero for error)
|
|
54
54
|
"""
|
|
55
55
|
# Initialize logging system
|
|
56
|
-
logger_manager = initialize_logging(config_manager)
|
|
56
|
+
logger_manager = initialize_logging(config_manager.app.log_level.value)
|
|
57
57
|
logger = logger_manager.get_logger("Photo_Composition_Designer.cli")
|
|
58
58
|
|
|
59
59
|
try:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This module provides a unified logging setup that supports:
|
|
4
4
|
- File logging with rotation
|
|
5
5
|
- GUI integration via custom handler
|
|
6
|
-
- Configurable log levels
|
|
6
|
+
- Configurable log levels
|
|
7
7
|
- Structured logging with consistent formatting
|
|
8
8
|
"""
|
|
9
9
|
|
|
@@ -12,8 +12,6 @@ import logging.handlers
|
|
|
12
12
|
import sys
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
|
|
15
|
-
from Photo_Composition_Designer.config.config import ConfigParameterManager
|
|
16
|
-
|
|
17
15
|
|
|
18
16
|
class GuiLogHandler(logging.Handler):
|
|
19
17
|
"""Custom logging handler that can write to GUI text widgets."""
|
|
@@ -39,21 +37,20 @@ class GuiLogHandler(logging.Handler):
|
|
|
39
37
|
class LoggerManager:
|
|
40
38
|
"""Manages all logging configuration and handlers."""
|
|
41
39
|
|
|
42
|
-
def __init__(self,
|
|
43
|
-
self.config = config
|
|
40
|
+
def __init__(self, log_level="INFO"):
|
|
44
41
|
self.logger = logging.getLogger("Photo_Composition_Designer")
|
|
45
42
|
self.gui_handler = None
|
|
46
43
|
self.file_handler = None
|
|
47
44
|
self.console_handler = None
|
|
48
|
-
self.
|
|
45
|
+
self.log_level = log_level
|
|
46
|
+
self._setup_logging(log_level)
|
|
49
47
|
|
|
50
|
-
def _setup_logging(self):
|
|
48
|
+
def _setup_logging(self, log_level):
|
|
51
49
|
"""Configure all logging handlers and formatters."""
|
|
52
50
|
# Clear any existing handlers
|
|
53
51
|
self.logger.handlers.clear()
|
|
54
52
|
|
|
55
|
-
# Set log level
|
|
56
|
-
log_level = getattr(logging, self.config.app.log_level.value.upper())
|
|
53
|
+
# Set log level
|
|
57
54
|
self.logger.setLevel(log_level)
|
|
58
55
|
|
|
59
56
|
# Create formatters
|
|
@@ -141,13 +138,12 @@ class LoggerManager:
|
|
|
141
138
|
log_level = getattr(logging, level.upper())
|
|
142
139
|
self.logger.setLevel(log_level)
|
|
143
140
|
|
|
144
|
-
|
|
145
|
-
self.config.app.log_level.value = level.upper()
|
|
141
|
+
self.log_level = level.upper()
|
|
146
142
|
|
|
147
143
|
def log_config_summary(self):
|
|
148
144
|
"""Log current configuration summary."""
|
|
149
145
|
self.logger.info("=== Configuration Summary ===")
|
|
150
|
-
self.logger.info(f"Log level: {self.
|
|
146
|
+
self.logger.info(f"Log level: {self.log_level}")
|
|
151
147
|
self.logger.info("==============================")
|
|
152
148
|
|
|
153
149
|
|
|
@@ -155,17 +151,17 @@ class LoggerManager:
|
|
|
155
151
|
_logger_manager = None
|
|
156
152
|
|
|
157
153
|
|
|
158
|
-
def initialize_logging(
|
|
154
|
+
def initialize_logging(log_level="INFO") -> LoggerManager:
|
|
159
155
|
"""Initialize the global logging system.
|
|
160
156
|
|
|
161
157
|
Args:
|
|
162
|
-
|
|
158
|
+
log_level: logging level
|
|
163
159
|
|
|
164
160
|
Returns:
|
|
165
161
|
LoggerManager instance
|
|
166
162
|
"""
|
|
167
163
|
global _logger_manager
|
|
168
|
-
_logger_manager = LoggerManager(
|
|
164
|
+
_logger_manager = LoggerManager(log_level)
|
|
169
165
|
return _logger_manager
|
|
170
166
|
|
|
171
167
|
|