In my quest to backup ALL THE THINGS, I turned my attention earlier this week to the shared iCloud Photo Albums my friends and family use to pass around photos and videos of our kids.
All of the items in my iCloud library (and my wife's library) are combined and backed up to Google Photos automatically. For better or worse, Google Photos is the "source of truth" that contains all of our archives and is sorted into albums. It's the backup I'd use to restore if iCloud ever goes belly-up. (And I have a redundant backup of Google Photos itself in case Google ever loses my data.) And the actual Photos.app library on my iMac is backed up to Backblaze for good measure, too. So the photos we take are covered.
But there are a ton of great memories of our kids snapped by other people. Those only reside in the shared iCloud photo streams. How do I back those up?
Ideally, Photos.app on Mac (or iOS) would have a preference to automatically import shared items taken by other people - and then those would feed into Google Photos. But that doesn't exist. I could manually save-to-my-library new items as they're shared, but that's error prone and not scalable.
Also, what about the 2,000+ previously shared photos? I thought I would be clever and just select-all on my Mac and drag them into my main library, but after doing a few quick tests I realized Photos.app isn't smart enough to not duplicate the photos I took and shared when importing. (This is likely due to Apple scaling-down and stripping out metadata of shared items.) And there's no way to sort by "other people" or build a smart album of "photos taken by other people" to filter out your own images when importing.
So, I decided to do some digging.
The first step was to locate the shared albums on disk. I searched my main
Photos Library.photoslibrary bundle, but couldn't find them inside. A quick glance through
~/Application Support/ didn't turn up any obvious hiding places either. That's when I fired up DaisyDisk to search for large (10GB+) folders.
For my own reference and for anyone else who comes across this post after googling unsuccessfully, iCloud's shared photo albums are stored here:
Each shared album is inside that folder and given a UUID-based folder name. And inside each album, every shared photo/video is itself inside its own UUID folder name. It's quite impenetrable and obviously not meant for users to poke around, but the programmer in me understands why it is this way.
At the top level is a Core Data database. I thought I might get clever and explore that to see if I could extract out the metadata of the shared items and use it to help me write a "smart" backup script (that perhaps imports other people's photos directly into Photos.app) instead of just taking the brute-force approach and backing up the entire album as a dumb blob, but I haven't had enough time yet to investigate.
So until I find the time to build that "smart" approach, I'm going about it the dumb way and nightly syncing everything to B2. It's not ideal, but it covers my needs for now.