How imostocky/photo-library-repair works
plr repairs photo libraries through a CLI workflow: scan directories and record image metadata in SQLite, group exact and near-duplicates, plan which pixels and metadata to retain, then materialize selected files and a report in a target folder. The CLI also supports incremental growth, summaries, and plan rollback. Internally, image fingerprinting and EXIF handling supply facts used by grouping and resolution. The graph follows documented workflow links; unsampled implementations and the optional AI planning link are not asserted beyond the README.
Main entry points: cli.go Command dispatcher · store.go SQLite library · ingest.go Directory scan · apply.go Apply plans
Components 18
CLI workflow
- Command dispatcher
internal/cli/cli.go - Directory scan
internal/ingest/ingest.go - Library report
internal/cli/cli.go
Image analysis
- Image fingerprint
internal/fingerprint/fingerprint.go - Perceptual hash
internal/phash/phash.go - EXIF reading
internal/exif/exif.go - Minimal EXIF parser
internal/meta/meta.go
Library and plans
- Duplicate grouping
internal/group/group.go - Identity strategies
internal/group/identity_exif.go - Incremental partition
internal/group/partition.go - Group planning
internal/cli/cli.go - AI planning
internal/kronk/kronk.go - SQLite library
internal/store/store.go - Plan history
internal/store/commit.go
Materialization
- Apply plans
internal/apply/apply.go - EXIF writing
internal/exifwrite/exifwrite.go - Target files and report
Other components
- CLI user
Connections 22
- CLI user → Command dispatcher: runs commands
- Command dispatcher → Directory scan: runs scan
- Directory scan → Image fingerprint: fingerprints images
internal/ingest/ingest.go - Image fingerprint → Perceptual hash: computes hash
- Directory scan → EXIF reading: reads metadata
- EXIF reading → Minimal EXIF parser: falls back to
internal/exif/exif.go - Directory scan → SQLite library: records images
- Command dispatcher → Duplicate grouping: runs grouping
internal/cli/cli.go - Duplicate grouping → Identity strategies: refines candidates
- Command dispatcher → Incremental partition: partitions incoming
internal/cli/cli.go - Duplicate grouping → SQLite library: stores assignments
- Command dispatcher → Group planning: runs planning
internal/cli/cli.go - Group planning → SQLite library: stores plans
- Group planning → AI planning: may use AI
- Command dispatcher → Apply plans: runs apply
- Apply plans → SQLite library: reads plans
- Apply plans → EXIF writing: writes metadata
internal/apply/apply.go - EXIF writing → Target files and report: writes files
- Apply plans → Target files and report: writes report
- Command dispatcher → Library report: runs report
internal/cli/cli.go - Library report → SQLite library: summarizes library
- Command dispatcher → Plan history: supports rollback
internal/cli/cli.go