S3 Media Migration

Copies directus_files rows and their real S3 objects from one Directus environment's bucket into another's, deduplicating on the Fotoware/Primarix identity fields (fotoware_mongo_id, primarix_mmid+primarix_source) so re-runs never create duplicates. Always scan differences first — starting a migration re-uses that exact scan. Background runs are visible in Admin Queue.

Environment counts

dev
Total directus_files: 13920
Fotoware/Primarix-sourced: 13920
staging
Total directus_files: 97329
Fotoware/Primarix-sourced: 97329
main
Total directus_files: 28
Fotoware/Primarix-sourced: 28

1. Scan differences

2. Start migration

Requires a scan above for the exact same source/destination/scope first.

api-proxy: bytes flow through this server, safest, no S3 config needed — recommended default. api-import: target Directus fetches bytes itself (presigned source-S3 URL, or source's own asset URL). s3-copy: direct bucket-to-bucket copy — needs S3 config on both environments; least-proven mode.

Queue status: 0 waiting, 0 active.