Local desktop tool for organizing, syncing, indexing, and reviewing photos.
Project description
Photo Manager Pro
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.
Current Features
- Sort files from a source folder into year-based folders.
- Detect dates from EXIF with fallback to
mtimeorctime. - Copy files with verification by fast fingerprint or full SHA256.
- Optionally delete source files after successful synchronization.
- Background sync mode powered by
watchdog. - CSV synchronization log.
- Blur scanning with OpenCV.
- Local SQLite metadata index for files, sync events, blur scores, and future AI data.
- Automatic background sync after the app starts.
- Option to open the app on Windows startup.
Running
py -m pip install -r requirements.txt
py photo_manager_gui.py
photo_manager_gui.py is a lightweight launcher. The main application lives in photo_manager_qt.py.
After the first PyPI release, the app can also be installed as:
python -m pip install photosync-tool
photo-manager-pro
Library Index
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.
The index currently stores:
- Media file paths, size, timestamps, year, dimensions, status, and optional quick hashes.
- Sync events from batch sync, background sync, and the headless service.
- Blur scores imported from
blur_tool.py. - Placeholder storage for future AI captions, tags, and embeddings.
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.
Startup And Background Work
The GUI has two separate startup options:
Autostart background on launchstarts folder watching after the app launches.Open on Windows startupadds an entry toHKCU\Software\Microsoft\Windows\CurrentVersion\Run, so the app starts when the current user logs in.
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.
Schedule
The GUI includes a Sync hours field. It accepts one or more hour ranges:
0-24means all day.8-18means synchronization only during working hours.22-7means an overnight window that crosses midnight.8-12,14-18means multiple windows in one day.
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:
- Weekdays.
- Hour ranges when synchronization is allowed.
- Separate windows for sync and AI/blur analysis.
- A "pause until hour X" mode.
- Restricting heavy work to nighttime.
Technically, the current hour field should eventually evolve into JSON with a list of time windows and task types.
Local Or API AI
AI could add practical features such as:
- Photo tagging: people, documents, food, landscapes, screenshots, animals, cars.
- Captions for search.
- Semantic duplicate and near-duplicate detection.
- Photo quality scoring: sharpness, exposure, closed eyes, motion blur.
- Private or sensitive content detection before automatic moves.
- OCR for screenshots and documents.
- Automatic albums, such as vacations, university, work, or documents.
I would not start with full Torch as a hard application dependency. A better path:
- Start with an API backend or ONNX Runtime as an optional backend.
- Use the SQLite index as the cache for tags, captions, embeddings, and review decisions.
- For local models, use
onnxruntimewith CLIP/SigLIP embeddings for similarity and search. - Add
torchlater as an optionalrequirements-ai.txtpackage only when training or GPU-heavy models become necessary.
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.
Suggested Roadmap
- Real service/headless mode.
- Work schedule and pause controls.
- Background task queue with retry.
- SQLite-backed search and gallery views.
- Duplicate view with thumbnails.
- Thumbnails and a fast gallery in the GUI.
- Search by date, folder, tags, and AI captions.
- Dedicated safe-delete panel with recycle bin and decision history.
- Synchronization report export.
- Optional AI panel: backend, model, batch size, GPU/CPU, embeddings cache.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file photosync_tool-0.1.0.tar.gz.
File metadata
- Download URL: photosync_tool-0.1.0.tar.gz
- Upload date:
- Size: 51.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e6c125deaaa77f622e0a12ccf7ca97e4398a434f60154a466233794b1207a1d
|
|
| MD5 |
4f4ac4dcf9be287535c12356511dfaab
|
|
| BLAKE2b-256 |
a3c802b79a1b496243d399b3047f54fc739b6d4b40b356c1a4e7d824785695d9
|
Provenance
The following attestation bundles were made for photosync_tool-0.1.0.tar.gz:
Publisher:
publish.yml on Filipluke/PhotoSyncTool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
photosync_tool-0.1.0.tar.gz -
Subject digest:
3e6c125deaaa77f622e0a12ccf7ca97e4398a434f60154a466233794b1207a1d - Sigstore transparency entry: 1411166643
- Sigstore integration time:
-
Permalink:
Filipluke/PhotoSyncTool@d340003dae760422da6d19e84e7e244acedec0fb -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Filipluke
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d340003dae760422da6d19e84e7e244acedec0fb -
Trigger Event:
release
-
Statement type:
File details
Details for the file photosync_tool-0.1.0-py3-none-any.whl.
File metadata
- Download URL: photosync_tool-0.1.0-py3-none-any.whl
- Upload date:
- Size: 54.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b57e6d245b4f577eeea219ed009c8af087dacab18243dafac031a65caea18e5
|
|
| MD5 |
d68762148c8dd61928802c289fa5cf6a
|
|
| BLAKE2b-256 |
081276d6a0504eaa015adb0e684c0116676b4fe573a5617220a2acc07c9018e8
|
Provenance
The following attestation bundles were made for photosync_tool-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Filipluke/PhotoSyncTool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
photosync_tool-0.1.0-py3-none-any.whl -
Subject digest:
6b57e6d245b4f577eeea219ed009c8af087dacab18243dafac031a65caea18e5 - Sigstore transparency entry: 1411166769
- Sigstore integration time:
-
Permalink:
Filipluke/PhotoSyncTool@d340003dae760422da6d19e84e7e244acedec0fb -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Filipluke
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d340003dae760422da6d19e84e7e244acedec0fb -
Trigger Event:
release
-
Statement type: