Concurrent uploads, ten at a time by default and configurable via --concurrency, using deferred requests and asynchronous HTTP. Files over 5 MB continue to use sequential resumable chunked upload.
New migration log table: progress is recorded per attachment, so migrations resume after an interruption and re-runs skip completed work with a table join instead of a Google API call.
Folder structure is mapped once up front instead of resolved per file; Shared Drive detection is performed once and reused across the whole run.
Skip reasons are now broken out in the job status as ext, no-file and no-entity.
Command line
Live progress bar with migrated / skipped / failed counters, elapsed time and ETA.
New options: --concurrency, --batch, --start-id, --end-id, --delete-local, --cleanup-local.
--cleanup-local runs as a separate pass over already-migrated attachments, so disk can be reclaimed after the transfer has been verified.
Configuration
New File extensions to sync to Google Drive option. Only matching attachments are sent to Drive; everything else stays local. Applies to both background sync and migration.
Reliability
OAuth tokens refresh proactively with five minutes to spare, re-read from the database to pick up a refresh performed by another concurrent worker, and any request that returns unauthenticated is retried once after a refresh.
Token expiry is computed from the real clock rather than the request start time, fixing expiry drift in long-running CLI migrations.
Compatibility
Minimum XenForo version lowered from 2.3.0 to 2.2.0. The migration layer detects the attachment schema at runtime and handles the 2.2/2.3 differences in the file key column and retina thumbnail support.