Command-line tools for backing up and organizing photos and videos into a structured archive by date. Connect your phone, download, run one command. Duplicates handled automatically. Works great as a family photo archive.
macOS users: Do not run the tools directly until you run bash install.sh from the extracted archive. The installer clears the macOS Gatekeeper restriction automatically.
Open Image Capture on your Mac and download photos and videos into any folder. Don't worry about what you've already imported—just download everything.
photocopy reads the creation date from each file's EXIF or QuickTime metadata, copies it into the correct year and day directory, and renumbers chronologically.
Files are compared byte-for-byte. Exact duplicates are removed. New photos are merged into the correct position. Your archive stays clean without any manual work.
Tools
A single binary that operates as six different tools via symbolic links. The installer creates all the links for you.
photocopy [--include-live] <source> <archive>
Copy photos and videos from a source directory into a date-organized archive. Automatically deduplicates and renumbers after copying. Skips Live Photo MOV clips by default.
photorenumber <dayDirectory>
Sort all files in a day directory by creation date and renumber them sequentially. Run this after manually adding or removing files.
photodedup <dayDirectory>
Remove duplicate files using byte-for-byte comparison. Only exact duplicates are removed—no guessing based on name, size, or date. Renumbers after dedup.
photocheck <yearDir | dayDir>
Validate that each file's embedded creation date matches the directory it lives in. Read-only—reports mismatches without moving anything.
photocheckexif <directory>
Display the EXIF creation date metadata for every photo in a directory. Flags files that have no embedded creation date.
videocheckqt <directory>
Display QuickTime creation date and duration for every MOV file. Flags potential Live Photo clips (4.5 seconds or shorter).
How It Works
Photos and videos are organized by year and day. Each file is renamed with its creation date and a sequential number.
Details
Designed around actual workflows—importing from phones, merging family archives, and keeping everything organized over years.
Everyone in the family can connect their phone, download to a folder, and run photocopy against the same archive. All photos end up organized together by date, duplicates removed automatically.
Files are only ever deleted during deduplication, and only when they are byte-for-byte identical. All other operations—copy, rename, check—are non-destructive.
Live Photo MOV clips (short companion videos paired with HEIC files) are skipped by default. Use --include-live to import them along with everything else.
If you manually place a file in a day directory, that directory's date takes precedence over the file's metadata. The tools will never silently move your files based on EXIF data.
Get Started
Grab the binary and go. Or clone the repo and build it yourself.
macOS users: Do not run the tools directly until you run bash install.sh from the extracted archive. The installer clears the macOS Gatekeeper restriction automatically.
Supported Formats
EXIF metadata for photos, QuickTime metadata for videos.