Portable USB-to-cloud photo & video catalog. The flash drive is your preview library; the cloud holds the originals.
MIT licensed·Python 3.11+·single binary·82 passing tests
Why
You want your photos in the cloud, but you also want to carry a flash drive that previews them all — without filling 1 TB of storage on a 64 GB stick. PhotoSync uploads originals to your cloud and leaves a 100 KB thumbnail with the cloud URL in its place. Click any thumbnail in the on-drive HTML gallery → the full-resolution original opens from the cloud. Offline? You still see every preview.
Catalog mode
D:\
└── 📁 PhotoSync\
└── 📁 2024-Trip\
├── IMG_0001.jpg (4.8 MB original)
├── IMG_0002.jpg (5.1 MB original)
└── clip.mp4 (320 MB)
D:\
├── PhotoSync.exe
└── 📁 PhotoSync\
└── 📁 2024-Trip\
├── IMG_0001.jpg (100 KB thumbnail, cloud URL in EXIF)
├── IMG_0002.jpg (100 KB)
├── clip.mp4.preview.jpg (video frame stub)
└── index.html ← open this → clickable gallery
Originals live in the cloud. Click any thumbnail to fetch them.
What you get
Backup keeps originals on the drive. Catalog replaces them with thumbnail-with-URL stubs and generates an HTML gallery.
Only files inside <drive>/PhotoSync/ are touched. Other folders on
the drive are left alone.
Content-addressed, not filename-addressed. Renames don't trigger re-uploads. A local scan cache means unchanged files aren't re-hashed.
Bundled rclone handles transport. Google Drive, Dropbox, OneDrive, and any S3-compatible store (Backblaze B2, Cloudflare R2, Wasabi, MinIO, …).
Master-password-encrypted tokens never leave the drive in plaintext. Lose the drive, lose nothing.
Single ~55 MB executable. Runs straight from the USB. No installers, no admin rights, no left-behind registry keys.
Quick start
PhotoSync-windows.exe,
PhotoSync-macos, or PhotoSync-linux —
and copy it to your flash drive.
(Skip "Source code (zip)" — that's the repo.)
PhotoSync/ folder for you. Drop in
your photos and press Start.
After the sync finishes, double-click PhotoSync/index.html
to browse the catalog in your browser.
No data loss
SQLite content-hash dedup
+ EXIF marker check), so even a wiped database can't trick the app into
re-uploading or destroying a stub.