photosync-tool 0.1.0__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.
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - 2026-04-30
4
+
5
+ - Initial PyPI packaging foundation.
6
+ - PySide6 desktop GUI for local photo sync and blur review workflows.
7
+ - Headless/background sync support.
8
+ - SQLite library index for file metadata, sync events, blur scores, and future AI metadata.
@@ -0,0 +1,13 @@
1
+ include README.md
2
+ include CHANGELOG.md
3
+ include RELEASE.md
4
+
5
+ exclude photo_manager_config.json
6
+ exclude photo_manager_index.sqlite3*
7
+ exclude photo_manager_sync_log.csv
8
+ exclude photo_manager_service.log
9
+ exclude blur_candidates*.csv
10
+ exclude *.decisions.csv
11
+
12
+ global-exclude __pycache__/*
13
+ global-exclude *.py[cod]
@@ -0,0 +1,141 @@
1
+ Metadata-Version: 2.4
2
+ Name: photosync-tool
3
+ Version: 0.1.0
4
+ Summary: Local desktop tool for organizing, syncing, indexing, and reviewing photos.
5
+ Author: Filipluke
6
+ Project-URL: Homepage, https://github.com/Filipluke/PhotoSyncTool
7
+ Project-URL: Repository, https://github.com/Filipluke/PhotoSyncTool
8
+ Project-URL: Issues, https://github.com/Filipluke/PhotoSyncTool/issues
9
+ Keywords: photos,sync,desktop,pyside6,blur-detection,sqlite
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Win32 (MS Windows)
12
+ Classifier: Environment :: X11 Applications :: Qt
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: Operating System :: Microsoft :: Windows
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Multimedia :: Graphics
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ Requires-Dist: PySide6
25
+ Requires-Dist: Pillow
26
+ Requires-Dist: opencv-python
27
+ Requires-Dist: numpy
28
+ Requires-Dist: Send2Trash
29
+ Requires-Dist: watchdog
30
+ Requires-Dist: pywin32; platform_system == "Windows"
31
+ Provides-Extra: dev
32
+ Requires-Dist: build; extra == "dev"
33
+ Requires-Dist: twine; extra == "dev"
34
+
35
+ # Photo Manager Pro
36
+
37
+ A local tool for organizing photos and videos. The app provides a PySide6 GUI, one-shot synchronization, background folder watching, and tools for detecting heavily blurred photos.
38
+
39
+ ## Current Features
40
+
41
+ - Sort files from a source folder into year-based folders.
42
+ - Detect dates from EXIF with fallback to `mtime` or `ctime`.
43
+ - Copy files with verification by fast fingerprint or full SHA256.
44
+ - Optionally delete source files after successful synchronization.
45
+ - Background sync mode powered by `watchdog`.
46
+ - CSV synchronization log.
47
+ - Blur scanning with OpenCV.
48
+ - Local SQLite metadata index for files, sync events, blur scores, and future AI data.
49
+ - Automatic background sync after the app starts.
50
+ - Option to open the app on Windows startup.
51
+
52
+ ## Running
53
+
54
+ ```powershell
55
+ py -m pip install -r requirements.txt
56
+ py photo_manager_gui.py
57
+ ```
58
+
59
+ `photo_manager_gui.py` is a lightweight launcher. The main application lives in `photo_manager_qt.py`.
60
+
61
+ After the first PyPI release, the app can also be installed as:
62
+
63
+ ```powershell
64
+ python -m pip install photosync-tool
65
+ photo-manager-pro
66
+ ```
67
+
68
+ ## Library Index
69
+
70
+ The app maintains a local SQLite index named `photo_manager_index.sqlite3` in the selected photo root folder. It is intentionally local and disposable: it can be rebuilt from the library, sync logs, and blur CSVs.
71
+
72
+ The index currently stores:
73
+
74
+ - Media file paths, size, timestamps, year, dimensions, status, and optional quick hashes.
75
+ - Sync events from batch sync, background sync, and the headless service.
76
+ - Blur scores imported from `blur_tool.py`.
77
+ - Placeholder storage for future AI captions, tags, and embeddings.
78
+
79
+ In the GUI, use `Library Index -> Rebuild Index` to scan the current root folder, or `Import Blur CSV` to load existing blur scan results. Batch sync, background sync, the Windows service, blur scan, and blur auto-delete now update the index automatically.
80
+
81
+ ## Startup And Background Work
82
+
83
+ The GUI has two separate startup options:
84
+
85
+ - `Autostart background on launch` starts folder watching after the app launches.
86
+ - `Open on Windows startup` adds an entry to `HKCU\Software\Microsoft\Windows\CurrentVersion\Run`, so the app starts when the current user logs in.
87
+
88
+ This is not a full Windows service yet. The target design should split out a separate `photo_manager_service.py` process that reads the same `photo_manager_config.json`, runs without a window, and can be installed with `pywin32` or `NSSM`.
89
+
90
+ ## Schedule
91
+
92
+ The GUI includes a `Sync hours` field. It accepts one or more hour ranges:
93
+
94
+ - `0-24` means all day.
95
+ - `8-18` means synchronization only during working hours.
96
+ - `22-7` means an overnight window that crosses midnight.
97
+ - `8-12,14-18` means multiple windows in one day.
98
+
99
+ In background sync mode, files detected outside the allowed window are queued and processed when the window opens again. The next step is a full calendar or weekly schedule view, for example:
100
+
101
+ - Weekdays.
102
+ - Hour ranges when synchronization is allowed.
103
+ - Separate windows for sync and AI/blur analysis.
104
+ - A "pause until hour X" mode.
105
+ - Restricting heavy work to nighttime.
106
+
107
+ Technically, the current hour field should eventually evolve into JSON with a list of time windows and task types.
108
+
109
+ ## Local Or API AI
110
+
111
+ AI could add practical features such as:
112
+
113
+ - Photo tagging: people, documents, food, landscapes, screenshots, animals, cars.
114
+ - Captions for search.
115
+ - Semantic duplicate and near-duplicate detection.
116
+ - Photo quality scoring: sharpness, exposure, closed eyes, motion blur.
117
+ - Private or sensitive content detection before automatic moves.
118
+ - OCR for screenshots and documents.
119
+ - Automatic albums, such as vacations, university, work, or documents.
120
+
121
+ I would not start with full Torch as a hard application dependency. A better path:
122
+
123
+ 1. Start with an API backend or ONNX Runtime as an optional backend.
124
+ 2. Use the SQLite index as the cache for tags, captions, embeddings, and review decisions.
125
+ 3. For local models, use `onnxruntime` with CLIP/SigLIP embeddings for similarity and search.
126
+ 4. Add `torch` later as an optional `requirements-ai.txt` package only when training or GPU-heavy models become necessary.
127
+
128
+ Torch is powerful, but heavy. For a desktop app that should remain stable and easy to run, ONNX Runtime or an external API will usually be less painful.
129
+
130
+ ## Suggested Roadmap
131
+
132
+ - Real service/headless mode.
133
+ - Work schedule and pause controls.
134
+ - Background task queue with retry.
135
+ - SQLite-backed search and gallery views.
136
+ - Duplicate view with thumbnails.
137
+ - Thumbnails and a fast gallery in the GUI.
138
+ - Search by date, folder, tags, and AI captions.
139
+ - Dedicated safe-delete panel with recycle bin and decision history.
140
+ - Synchronization report export.
141
+ - Optional AI panel: backend, model, batch size, GPU/CPU, embeddings cache.
@@ -0,0 +1,107 @@
1
+ # Photo Manager Pro
2
+
3
+ A local tool for organizing photos and videos. The app provides a PySide6 GUI, one-shot synchronization, background folder watching, and tools for detecting heavily blurred photos.
4
+
5
+ ## Current Features
6
+
7
+ - Sort files from a source folder into year-based folders.
8
+ - Detect dates from EXIF with fallback to `mtime` or `ctime`.
9
+ - Copy files with verification by fast fingerprint or full SHA256.
10
+ - Optionally delete source files after successful synchronization.
11
+ - Background sync mode powered by `watchdog`.
12
+ - CSV synchronization log.
13
+ - Blur scanning with OpenCV.
14
+ - Local SQLite metadata index for files, sync events, blur scores, and future AI data.
15
+ - Automatic background sync after the app starts.
16
+ - Option to open the app on Windows startup.
17
+
18
+ ## Running
19
+
20
+ ```powershell
21
+ py -m pip install -r requirements.txt
22
+ py photo_manager_gui.py
23
+ ```
24
+
25
+ `photo_manager_gui.py` is a lightweight launcher. The main application lives in `photo_manager_qt.py`.
26
+
27
+ After the first PyPI release, the app can also be installed as:
28
+
29
+ ```powershell
30
+ python -m pip install photosync-tool
31
+ photo-manager-pro
32
+ ```
33
+
34
+ ## Library Index
35
+
36
+ The app maintains a local SQLite index named `photo_manager_index.sqlite3` in the selected photo root folder. It is intentionally local and disposable: it can be rebuilt from the library, sync logs, and blur CSVs.
37
+
38
+ The index currently stores:
39
+
40
+ - Media file paths, size, timestamps, year, dimensions, status, and optional quick hashes.
41
+ - Sync events from batch sync, background sync, and the headless service.
42
+ - Blur scores imported from `blur_tool.py`.
43
+ - Placeholder storage for future AI captions, tags, and embeddings.
44
+
45
+ In the GUI, use `Library Index -> Rebuild Index` to scan the current root folder, or `Import Blur CSV` to load existing blur scan results. Batch sync, background sync, the Windows service, blur scan, and blur auto-delete now update the index automatically.
46
+
47
+ ## Startup And Background Work
48
+
49
+ The GUI has two separate startup options:
50
+
51
+ - `Autostart background on launch` starts folder watching after the app launches.
52
+ - `Open on Windows startup` adds an entry to `HKCU\Software\Microsoft\Windows\CurrentVersion\Run`, so the app starts when the current user logs in.
53
+
54
+ This is not a full Windows service yet. The target design should split out a separate `photo_manager_service.py` process that reads the same `photo_manager_config.json`, runs without a window, and can be installed with `pywin32` or `NSSM`.
55
+
56
+ ## Schedule
57
+
58
+ The GUI includes a `Sync hours` field. It accepts one or more hour ranges:
59
+
60
+ - `0-24` means all day.
61
+ - `8-18` means synchronization only during working hours.
62
+ - `22-7` means an overnight window that crosses midnight.
63
+ - `8-12,14-18` means multiple windows in one day.
64
+
65
+ In background sync mode, files detected outside the allowed window are queued and processed when the window opens again. The next step is a full calendar or weekly schedule view, for example:
66
+
67
+ - Weekdays.
68
+ - Hour ranges when synchronization is allowed.
69
+ - Separate windows for sync and AI/blur analysis.
70
+ - A "pause until hour X" mode.
71
+ - Restricting heavy work to nighttime.
72
+
73
+ Technically, the current hour field should eventually evolve into JSON with a list of time windows and task types.
74
+
75
+ ## Local Or API AI
76
+
77
+ AI could add practical features such as:
78
+
79
+ - Photo tagging: people, documents, food, landscapes, screenshots, animals, cars.
80
+ - Captions for search.
81
+ - Semantic duplicate and near-duplicate detection.
82
+ - Photo quality scoring: sharpness, exposure, closed eyes, motion blur.
83
+ - Private or sensitive content detection before automatic moves.
84
+ - OCR for screenshots and documents.
85
+ - Automatic albums, such as vacations, university, work, or documents.
86
+
87
+ I would not start with full Torch as a hard application dependency. A better path:
88
+
89
+ 1. Start with an API backend or ONNX Runtime as an optional backend.
90
+ 2. Use the SQLite index as the cache for tags, captions, embeddings, and review decisions.
91
+ 3. For local models, use `onnxruntime` with CLIP/SigLIP embeddings for similarity and search.
92
+ 4. Add `torch` later as an optional `requirements-ai.txt` package only when training or GPU-heavy models become necessary.
93
+
94
+ Torch is powerful, but heavy. For a desktop app that should remain stable and easy to run, ONNX Runtime or an external API will usually be less painful.
95
+
96
+ ## Suggested Roadmap
97
+
98
+ - Real service/headless mode.
99
+ - Work schedule and pause controls.
100
+ - Background task queue with retry.
101
+ - SQLite-backed search and gallery views.
102
+ - Duplicate view with thumbnails.
103
+ - Thumbnails and a fast gallery in the GUI.
104
+ - Search by date, folder, tags, and AI captions.
105
+ - Dedicated safe-delete panel with recycle bin and decision history.
106
+ - Synchronization report export.
107
+ - Optional AI panel: backend, model, batch size, GPU/CPU, embeddings cache.
@@ -0,0 +1,48 @@
1
+ # Release Guide
2
+
3
+ This project is prepared for PyPI publishing through GitHub Actions and PyPI Trusted Publishing.
4
+
5
+ ## PyPI Pending Publisher
6
+
7
+ On PyPI, go to `Account settings -> Publishing -> Add a new pending publisher -> GitHub` and use:
8
+
9
+ - PyPI Project Name: `photosync-tool`
10
+ - Owner: `Filipluke`
11
+ - Repository name: `PhotoSyncTool`
12
+ - Workflow name: `publish.yml`
13
+ - Environment name: `pypi`
14
+
15
+ The project name is the value from `pyproject.toml` and must match exactly. Pending publishers do not reserve names, so the first successful upload creates the project.
16
+
17
+ ## GitHub Environment
18
+
19
+ In GitHub, create an environment named `pypi`:
20
+
21
+ 1. Open `Settings -> Environments`.
22
+ 2. Create `pypi`.
23
+ 3. Optionally add required reviewers before deployment.
24
+
25
+ ## Local Verification
26
+
27
+ ```powershell
28
+ python -m pip install -e ".[dev]"
29
+ python -m build
30
+ python -m twine check dist/*
31
+ ```
32
+
33
+ ## Publish
34
+
35
+ 1. Update `version` in `pyproject.toml`.
36
+ 2. Update `CHANGELOG.md`.
37
+ 3. Commit and push to `main`.
38
+ 4. Create a GitHub Release for a matching tag, for example `v0.1.0`.
39
+ 5. The `.github/workflows/publish.yml` workflow builds and uploads the package to PyPI.
40
+
41
+ ## Install After Release
42
+
43
+ ```powershell
44
+ python -m pip install photosync-tool
45
+ photo-manager-pro
46
+ ```
47
+
48
+ Before a public release, choose and add a project license if this package should be open source.