Chronify
Go command-line media tooling
Chronify
A terminal-based photo and video organizer for large media libraries. Chronify scans folders recursively and organizes files into year/month folders using a cautious, dry-run-first workflow.
Problem
Large media libraries need cautious migration
Photo and video collections often live across laptops, external drives, camera dumps, phone exports, screenshots, and chat app folders. Chronify is designed for organizing those collections without loading media contents into memory or forcing risky first-run moves.
Recursive scanning
Chronify scans nested folders and supports large collections without reading full media contents into memory.
Photo and video support
It supports common image, RAW, HEIC/HEIF, and video formats, making it suitable for mixed media libraries.
Manifest-first workflow
Every dry-run and apply run can produce a CSV manifest so the migration can be inspected and audited.
Output
Library structure
Media Library/
2024/
05/
IMG_20240509_100322.jpg
VID_20240509_120000.mov
_unknown_date/
scan-without-date.png
Date detection
Metadata first, filename second
Chronify chooses dates in a layered order so trusted media metadata wins when available, while still handling real-world filenames from cameras, phones, screenshots, and WhatsApp exports.
1. Native metadata
Uses embedded metadata for supported JPEG, TIFF/DNG-style, PNG, and WebP files.
2. Optional tools
When -metadata auto is enabled, Chronify can use ffprobe, exiftool, or macOS mdls if present.
3. Fallbacks
It then checks filename patterns, filesystem modified time, and finally routes unknown files into _unknown_date/.
Workflow
Recommended usage
The default run is a dry-run. Review the manifest first, then apply the organization with either move or copy mode.
go build -o chronify .
./chronify \
-source "/Volumes/Camera Dump" \
-dest "/Volumes/Media Library"
./chronify \
-source "/Volumes/Camera Dump" \
-dest "/Volumes/Media Library" \
-apply \
-mode move
./chronify \
-source "/Volumes/Camera Dump" \
-dest "/Volumes/Media Library" \
-apply \
-mode copy
Controls
Useful flags
Input and output
-source selects the folder to scan recursively.
-dest selects where YYYY/MM folders will be created.
-report sets the CSV manifest path, or none.
Execution mode
-apply performs changes; omitted means dry-run.
-mode chooses move or copy.
-conflict chooses rename or skip for duplicates.
Date and media filters
-media selects all, images, or videos.
-metadata selects auto, native, or never.
-min-year and -max-year bound accepted media dates.
Examples
Common operations
./chronify -source ~/Pictures/import -dest ~/Pictures/library -media images
./chronify -source ~/Pictures/import -dest ~/Pictures/library -apply -conflict skip
./chronify -source ~/Pictures/import -dest ~/Pictures/library -modtime=false