Pixel 8 to iPhone 16 through a bucket, 11,614 items
Old phone: Pixel 8, Android 15. Google Photos backup had been off for three months so the two copies would not delete each other. New phone: iPhone 16, iOS 18.7, Azalea installed before iCloud Photos.
English run used S3 Standard, us-west-2, a sub-user scoped to one bucket, prefix pixel8-lab/. Profile display names differed; bucket and keys matched. (The Chinese write-up of the same method used COS Guangzhou. Same client, different invoice.)
Size
Stills averaged 4.08 MB — Pixel JPEG is heavier than iPhone HEIC. Video averaged 89.2 MB, some 4K60. 11,208 × 4.08 + 406 × 89.2 ≈ 81.95 GB.
664 minutes includes overnight Wi-Fi idle. The useful window was about seven hours; bursts hit 8 MB/s and the average fell with sleep. Seven failures were host/unknown-network errors and retried.
The broken file
VID_20231102_221418.mp4 came from an older Infinix copied onto the Pixel. The local player showed one second then black. Object size 2,048,512 bytes, MD5 matched the phone, so the transfer was honest and the source was already junk. The iPhone claim opened the same failure. Counted as one unrecoverable and left in the ledger so the next run would not treat it as new.
After the claim
Item count on the iPhone backed-up library matched. The system camera roll stayed empty until a few manual downloads. Favorites did not travel, which matches Android’s inability to reuse local_identifier.