Immich Cloud Export Migration Checklist for Sidecars and Duplicates

Eva Wong is the Technical Writer and resident tinkerer at ZimaSpace. A lifelong geek with a passion for homelabs and open-source software, she specializes in translating complex technical concepts into accessible, hands-on guides. Eva believes that self-hosting should be fun, not intimidating. Through her tutorials, she empowers the community to demystify hardware setups, from building their first NAS to mastering Docker containers.

Keep the raw cloud export untouched until Immich has preserved the sidecars, dates, relationships, and wanted versions you can actually verify.

A Google Photos or similar export can contain JSON companions, repeated album references, renamed duplicates, edits, and files that overlap with the same phone’s next backup. Build a manifest first, import a small canary with every collision class, and do not flatten folders or delete the cloud copy while any sidecar remains ambiguous. The migration finishes only after original hashes, timeline dates, albums, and the first mobile-backup overlap test agree.

Preserve the raw export and build a migration manifest

Extract every archive into a read-only staging tree and keep the downloaded archives until the migration is accepted. Record export batch, relative path, filename, byte size, hash, media type, capture fields, sidecar path, and album directory for each candidate asset. This manifest is the rollback reference when two files share a name but not content.

A sidecar-aware migration matters because a cloud export may keep capture time, description, location, and album relationships outside the media file. The workflow for export-aware importer shows why using an export-aware importer and verifying the destination before deleting the cloud copy preserves more than a blind file copy.

Stop if archives fail extraction, expected years are absent, sidecar counts are unexplained, or the staging volume lacks room for a working copy. Do not rename, flatten, deduplicate, or rewrite metadata in the only export because those changes destroy the evidence needed to match sidecars later.

Match sidecars before normalizing names or folders

Group media and JSON by the exporter naming rules, including suffixes added to duplicates, edits, and long filenames. For ten representative items, compare embedded capture time with sidecar photo time, filesystem modification time, timezone, description, location, and album membership. Record which field will become authoritative for each conflict class.

Use a working copy for any metadata merge and preserve the original sidecar beside it. A ZimaSpace workflow for prevent sidecars from changing capture dates provides the adjacent date-preservation branch; this checklist adds the manifest and duplicate gates required before a whole Immich import.

The stage passes only when every canary sidecar maps to one intended media file or is explicitly classified as unmatched. If a renamed file could match more than one sidecar, leave it unresolved and inspect exporter sequence and hashes rather than choosing by filename alone.

Separate true duplicates from related versions

Classify collisions as byte-identical copies, cloud-resized copies, edited versions, album references, Live Photo pairs, or genuinely different images with the same name. Keep edited and original versions unless the family has chosen a documented rule; a visual resemblance is not sufficient evidence for deletion.

A resolved community case about cloud history and renewed phone backup shows how cloud history and renewed phone backup can create duplicates that hash differently. Use that scoped failure pattern to test overlap between the Takeout set and each phone camera roll before automatic upload is enabled.

Import one small canary containing every duplicate class. Compare source and destination counts, hashes, dates, locations, album membership, and paired-video behavior. Roll back the canary if the importer collapses wanted versions or creates unexplained second assets; do not compensate with bulk deletion after the fact.

-15% OFF
Single board computer zimaboard2

Run the full import and prove the new source of truth

Freeze metadata rewriting and mobile backup while importing batches identified by the manifest. Save importer logs and rejected-file lists, then reconcile counts by class rather than expecting one raw number to equal another when album references and exact duplicates are intentionally collapsed.

After import, sample old and recent years, edited photos, long videos, Live Photos, shared-album items, and assets with sidecars. Download selected originals and compare hashes to the staged copy; confirm timeline dates, search, album membership, and location on both web and mobile clients.

Enable one phone backup only after the imported history passes. Repeat the overlap test, restart Immich, and verify no second copies appear. Keep the raw export and cloud library until two backup cycles and a restore test succeed; escalate unmatched sidecars or nondeterministic duplicate handling with the manifest and canary logs intact.

Support & Tips

More to Read

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.