Skip to content

feat(photos): bulk import and album management CLI#44

Merged
arthware-dev merged 7 commits into
mainfrom
feat/photos-album-cli
Jul 2, 2026
Merged

feat(photos): bulk import and album management CLI#44
arthware-dev merged 7 commits into
mainfrom
feat/photos-album-cli

Conversation

@arthware-dev

Copy link
Copy Markdown
Contributor

Summary

  • Import CLI (stack photos import): scan a mounted source, build a manifest, upload in resumable batches with two-layer dedup (local SHA-256 ledger + Immich server-side). Supports --force to skip hash check for faster imports.
  • Album CLI (stack photos album): bulk archive/unarchive, copy, clear, and move assets between albums. Pattern filtering via glob or alias (--pattern whatsapp). Album-scoped archive via --from. Chunked batching with persistent HTTP connections.
  • Admin docs: import and album CLI reference in the admin guide, WhatsApp cleanup workflow, XNU TCP timestamp overflow troubleshooting runbook.

Bulk operations on Immich albums from the command line. Supports
archive/unarchive with pattern filtering (glob or alias like 'whatsapp'),
copy/clear/move between albums with chunked batching, and album-scoped
archive via --from. Uses persistent HTTP connections to avoid TCP
connection floods.
Add admin guide sections for bulk import (--source, --proceed, --force,
--album) and album management (archive, copy, clear, move). Includes
WhatsApp cleanup workflow and XNU TCP timestamp overflow runbook.
Scan a mounted source (NAS, external drive, local folder), build a
manifest, and upload to Immich in controllable batches. Two-layer
deduplication via local SHA-256 ledger and Immich server-side check.
Per-source cursor allows pausing, resuming, and interleaving imports.
Remove extraneous f-string prefixes, rename ambiguous variable 'l' to
'line', and drop undefined 'already_known' reference.
Extract year from EXIF DateTimeOriginal via batch exiftool, fall back to
filename patterns (20180415_..., IMG-20180415-WA...). Files without a
detectable year go into "Unknown Year". Creates one Immich album per
year automatically during upload.
Exiftool outputs header lines (======== /path) between files. The old
code zipped raw output with file paths, misaligning dates and producing
a 50/50 split between detected and unknown years. Filter headers and
summary lines before matching.

Adds unit tests with real JPEG files containing embedded EXIF dates to
catch regressions in exiftool output format.
@arthware-dev
arthware-dev merged commit 418be62 into main Jul 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant