Skip to main content

PhotonKit -- A mildly opinionated toolkit for managing your camera photo collection

Project description

PhotonKit

PhotonKit is a mildly opinionated, blazing-fast command-line toolkit for safely backing up and organizing your camera photos and videos. Designed for macOS photo wranglers, it reads EXIF metadata to group files by date and camera, prevents clobbering, and works seamlessly with both SD cards and massive archives.

  • Automated folder structure: Organizes by year, date, camera, and file type.
  • Supports all major formats: JPEG, HEIC, RAW (CR2/CR3/ARW/NEF), MOV, MP4, AVI, and more.
  • Resumable and safe: Skips duplicates by default, or saves unique versions on demand.
  • Per-directory cache: Re-scans are lightning fast, only extracting EXIF for new files.
  • Dry-run & date filtering: Preview operations and filter files by EXIF date.
  • EXIF overrides: Handles edge cases (like iPhone movies) using customizable rules.
  • MIT License: Free for all personal and commercial use.

Perfect for anyone who wants to keep their photo archives pristine and searchable—no more messy folders or lost images.

See full documentation, installation, and usage at: https://github.com/rsitools/photonkit


🚀 Installation

PhotonKit requires ExifTool for metadata extraction.
Install it first (macOS):

brew install exiftool

Install PhotonKit via pip (after you’ve installed from PyPI or locally):

pip install photonkit

⚡️ How to Run

Basic photo backup:

photonkit \
  --source "/Volumes/SDCARD" \
  --target "/Volumes/PhotoDrive"

Dry run (see what would be copied, but don’t actually copy):

photonkit \
  --source "/Volumes/SDCARD" \
  --target "/Volumes/PhotoDrive" \
  --dry-run

Filter by EXIF date (only copy files dated on/after 2025-05-27):

photonkit \
  --source "/Volumes/SDCARD" \
  --target "/Volumes/PhotoDrive" \
  --min-date 2025-05-27

Allow duplicate file versions (IMG_1234-1.jpg etc):

photonkit \
  --source "/Volumes/SDCARD" \
  --target "/Volumes/PhotoDrive" \
  --skip-dupe false

🔎 Inspect EXIF Metadata

To print all EXIF metadata from a single file, plus camera model and original timestamp:

photonkit --exif /path/to/photo-or-video

📂 Example Target Structure

Your files will be organized like this:

PhotoDrive/
└── 2025/
    └── 2025-05-27/
        └── canon-eos-r5/
            ├── jpg/
            ├── raw/
            └── video/

🛠 Features

Fast, safe, and resumable

Handles most camera/phone formats

Per-directory EXIF cache for speed

EXIF inspection mode with --exif

CLI output with progress and error reporting

🪪 License

PhotonKit is released under the MIT License.

Made with ❤️ for photo wranglers.

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

photonkit-0.2.1.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

photonkit-0.2.1-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file photonkit-0.2.1.tar.gz.

File metadata

  • Download URL: photonkit-0.2.1.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for photonkit-0.2.1.tar.gz
Algorithm Hash digest
SHA256 1ab2b80fddcccda6e99a4217f51de9d7f89c64cf0859bcf7aed776fce16d57ee
MD5 d4c7f1e0d68fe6cbc704a0ab5d1c2855
BLAKE2b-256 d104e1f9061cc817ff3103e5bb25fdae4c3d2a7881395b623967710bb7b5e86b

See more details on using hashes here.

File details

Details for the file photonkit-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: photonkit-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 12.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for photonkit-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b37bc9ff336ea5c974a9fa77904861a3fbc9afb7565265e1468f5d67d79b5a53
MD5 1b814d6797105918e483ceaedea698a3
BLAKE2b-256 8382cb5f47168bf461c7b772c094315e7bb6abd91d0c221a027e8b77f60f3406

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page