iCloud Photos Downloader
One thing that surprised me when digging into Apple Photos is how much state isn’t represented by just files-on-disk. Albums, Live Photos (paired assets), bursts, slo-mo, edits, and even “simple” things like adjusted capture dates are all tracked separately, and most export/backup tools end up flattening or partially reconstructing that on restore.
The approach I took was to treat Photos as the source of truth and verify restored items against it, rather than assuming filesystem metadata is enough. As far as I know, this is the only tool that restores albums and correctly round-trips all Photos item types while preserving location data, creation dates, and modification dates when restoring back into Photos.
Project page is here if it’s useful: https://photosbackup.app/
Happy to explain details if anyone’s curious — there are a lot of sharp edges in Photos once you go beyond “export originals”.
This is because I usually have far more than 10K photos and apple starts renaming the files after 9999 as 00001(1) for the rest. This is pretty undesirable.
Is there a way for me to export unmodified raw/jpeg/live/videos off the iphone to an external drive without a macbook with a large enough ssd, and wanting to use icloud as an intermediate bottleneck?
plug iphone into usb. lsusb should show it.
I backup my photos with:
sudo ifuse -o allow_other /mnt
rsync -a /mnt/DCIM <photos-dir>
sudo umount /mnt
Actually, I backup all of /mnt not just DCIM, but that answer
is for you. I also backup the entire phone with: sudo idevicebackup2 backup <backup-dir>
but in this form it either does the photos as data files, or
doesn't back them up. I think it is a complete backup.Mine is approaching 1.5TB, I’ve got no hope of keeping that all on an iPhone, and also no guarantee that any given photo is fully available locally.
I don't know about space-optimized storage on-phone. I know one setting for transfer to mac or pc - I have it set to "keep originals" instead of "automatic". There might be other settings I'm not aware of.
EDIT: actually, there are other directories (under /mnt but outside DCIM in my example) that seem to have other photo stuff, maybe edits? ymmv
I’m not sure Apple allows any third party app to access the unmodified originals. Imagine you crop a photo to remove some embarrassing part. A third-party app can just recover that? What a privacy risk.
Of course this won’t matter if you don’t do any photo editing on iOS.
My current process for offloading photos off the iPhone
I'm not sure about Linux, but my workflow on Windows and MacOS is to frequently back up my iPhone locally (which you should do anyway because few incorrect PINs can security lock your phone[1]) and use utility like backup extractor (e.g.[2] but there are many others) to extract all photos from the backup. This effectively removes the need to use iCloud.
[1] https://support.apple.com/en-us/105090?device-type=iphone
I’m actually curious: how did you discover that it doesn’t work when Advanced Data Protection is enabled? Was it through an error message, incomplete backups, or something else you noticed?
Disabling ADP is a pretty serious* thing to do -- and pretty disappointing since I was interested in the product. Since it's OSS though this might be something that can be worked around in the future.
As far as I know, this is the only tool that restores albums and correctly round-trips all Photos item types while preserving location data, creation dates, and modification dates when restoring back into Photos.
My free open source tool osxphotos[1] does this. In addition to an "osxphotos export" command to create archival exports with all metadata, it also has an "osxphotos import" command that can restore all metadata including albums (with exception of named persons/face regions, though persons can be converted into keywords on import). It can also read XMP sidecar files to restore metadata from those. It's a CLI and definitely a power user tool.
It also includes an "osxphotos sync" command that can sync metadata between two libraries. Some people use this to sync metadata like favorites from iPhone library to the Mac library. (can't go the other way unfortunately)
The FAQ states you back up the originals as plain images files in YYYY/MM/DD format, which is great for integration with other tools. What about metadata? Is it in a format that lends to integration with other tools, say if you stop developing/supporting your app for some reason?
You’re right about that error message. What’s happening is that when the SMB share gets unmounted, the app can no longer access its SQLite database (pba.sqlite), and the resulting error isn’t very user-friendly. I agree it would be much clearer to explicitly detect a missing or unmounted network share and provide guidance.
I’ve added this to my list of things to improve. Thanks again for taking the time to report it — feedback like this is super helpful.
I’ll just add in here a sneaky humble request for graceful automatic pausing and restarting as network shares (or other volumes?) (dis-)appear - although I imagine that one’s a bit trickier to implement.
All the best! Very satisfied user. Great replacement for the script + cron job I was using before.
The sshd running on the phone also supports key based auth , so it's pretty simple to automate.
I've been thinking about looking into a fix for this since it's bugged me a bit.
Photos Backup Anywhere does handle this case: it reads the adjusted date from the Photos library and stores that modified timestamp in its own SQLite database, linked to the backed-up file, so the edited date isn’t lost even though the file itself isn’t rewritten.
The app creates file-system-level backups of each individual photo and video from your Photos library. Every asset is exported as a real file on disk (HEIC, JPEG, MOV, etc.), not a database blob or package, so you can browse, copy, verify, and back them up with standard tools.
In addition, the app keeps a small SQLite database alongside the files to track metadata (including edits, albums, and relationships like Live Photos), which allows accurate restores and verification while still giving you transparent, plain-files access to your media.
If the app is shared via Family Sharing, each family member can install and use it on their own Mac with their own iCloud Photos library. The app works with whichever Photos library is signed into macOS on that machine, so you can absolutely use it to back up your partner’s images as well.
In other words, the filesystem copy isn’t treated as the source of truth. The restore verifies items against what was backed up and only then rebuilds higher-level structure like albums. That’s the piece I didn’t see addressed elsewhere, and what originally motivated me to build it.
The files are there on the Mac, they are there to download on the cloud (various mentions of method mentioned here).
Are you wanting a way that doesn’t involve the photos app?
You can do that from iCloud over a browser.
iCloud via browser has a limit of 1k photos per download.
You don’t need an iPhone for Photos.app to work.
There are plenty of problems with Photos.app but the issue you describe isn’t by design.
Thank you for proving me wrong.
As long as you are signed into the Mac with the same iCloud account used on the iPhone, this will download them all. No, you do not need to get them all downloaded to the iPhone ever for any reason for this to work. Period. You need to stop repeating that, because it is wrong. How many people have to say the same thing?
Yes, you will have to go into a hidden folder to access the Originals once they're downloaded if you want to copy them somewhere else, but it's like two clicks.
However, in reality, when you use the same Apple account on both devices with the Photos app on macOS (yes, with the 'Download Originals' checkbox enabled), it only downloads photos that you upload from your phone.
And if you look at the iCloud tab in the Photos app, it says 'Automatically _upload_ and store all your photos and videos in iCloud', so it works from Mac to iCloud, and doesn't help to download full iCloud library.
It absolutely works the way I said it does, because I have seen it work that way. Just because you accidentally turned off iCloud Photos in your Apple Account settings on that Mac (or some other similar issue) does not mean it does not work this way when properly signed in.
If you want something to try, go to System Settings -> Apple Account -> Photos and see if "Sync this mac" is turned off. It needs to be on. There could be other ways that this feature is disabled, but that is one of them.
Not seeing something work is not evidence that it does not work. You have not seen it work, but that is not proof it does not work.
Seeing it work is evidence that it works. I have seen it work.
Other people have seen it work that way, and their replies are all over this thread. Apple documents that it works this way.
Yes, it will upload photos to iCloud if enabled, but it also downloads them.
I hope I've made it clear now.
Subject is to download photos from iCloud.
https://support.apple.com/en-gb/guide/photos/phtf5e48489c/ma...
Users of Google and Apple’s photo cloud services can now transfer images between them. It was already possible to export photos and videos from iCloud to Google Photos, but now it can also be done the other way around: from Google Photos to iCloud.
https://www.techzine.eu/news/applications/122196/google-and-... (2023 Data Transfer Initiative (DTI))
Photo management is a bit of a nightmare as it’s an awful lot of small(ish) files.
I'm OK with clicking a button to download all photos to Mac, but there is no such button. Or maybe there was one previously, but it has now disappeared.
or allowing you to download iCloud Photos in the native Photos application on Mac
Here’s the official documentation page for exporting directly using Photos for Mac without syncing everything locally: https://support.apple.com/guide/photos/download-photos-to-yo...
You can also choose to sync all photos locally with Photos for Mac by setting “Download Originals to this Mac” as described on this page which is what I do to keep a local copy: https://support.apple.com/guide/photos/photos-settings-pht51...
If your Mac doesn’t have enough space, export them to a USB hard drive or if you’re using the download originals option, first move your library location to the USB drive as also described on the link above.
It appears that on Monterey I need to pull the page down twice to show the sync status, and when I found it, the message said that photos weren't syncing due to "Performance."
That's exactly what I expected to work, but for some reason this approach failed for me on a new Mac with an empty Photos library. I enabled "Download Originals," but 10+ years of iCloud photos never appeared. There's no manual "fetch all from iCloud" button, no progress indicator, no way to diagnose what's wrong - the sync just silently fails. Luckily, iCloud Photos Downloader bypasses Photos entirely and pulls directly from iCloud.
Also, if you leave optimise storage disabled and continue to use Photos, every photo will be cloned in any local or cloud backups of your machine. This strategy creates additional photo redundancy separate from iCloud while still benefiting from library syncing.
Also, Photos on Mac doesn't have an option to download photos directly, so the only valid option Apple offers is to download them through the web interface (max 1,000 at a time).
There is no official way to download iCloud library that is over phone capacity. Period.
Once everything’s downloaded on the Mac, you can either export through the Apple Photos menu or just copy the “originals” directly from the Photos bundle.
Photos on Mac doesn't have an option to download photos directly
Yes it does. It's called Download Originals to this Mac.
https://support.apple.com/guide/photos/use-icloud-photos-pht...
You keep asserting to the contrary, but I've been syncing my entire photos library to my Mac for years, since it was iPhoto even.
Obviously if you have a larger photos library than storage space on a particular device, you cannot synchronize the entire library to that specific device. e.g. my photos library vastly exceeds my iPhone 13 mini storage, so on my iPhone, I don't sync everything. But my Mac has 2 TB of storage, and Photos is setup to sync all my photos, and does so, reliably, and has been, again, for years now.
Additionally, unlike with this open source tool, I can keep advanced data protection enabled.
Any new photos and videos you add to Photos appear on all your devices that have iCloud Photos turned on.
You have your photos because they are new. If they had been taken before, they would not have synchronised automatically with Photos on MacOS.
Yes, new ones will be uploaded. That doesn’t mean old ones won’t also be downloaded.
Want to prove me wrong? Create a new macOS user and open Photos with your iCloud. It will be empty until you start copying photos from your phone. It will take much less time than arguing here.
In settings, "download originals to this mac", select all photos, file -> "export unmodified originals" will trigger the Photos app to download every file from iCloud into your local library (as well as exporting them to wherever you want)
I guess "there is no download button" but dude...I don't need iCloud Photos Downloader.
Unfortunately, I'm unable to locate any button, status bar, or option to refresh or pull everything from iCloud in macOS Photos. There aren't even any details showing what percentage of iCloud is currently synchronized with macOS Photos. With nothing to debug, I can only conclude that for some reason the sync isn't working in my case.
It's great if this works for you and you don't need iCloud Photos Downloader, but for some reason I don't have that luxury.
That's literally what that option is for.
If it's not working for you, you might be dealing with a bug, or perhaps you haven't given it enough time to sync. If you go to Photos > Library and scroll down, it should show you the sync status.
Long story short, iCloud wasn't syncing photos "due to performance" and this message was hidden.
Thanks once again!
Happy to hear it helped. :)
Photos on MacOS indeed synchronise photos with iCloud.
After our conversation I had tried to understand why I indeed don't see any status and I found out, that to get one in Monterey iOS I must need to scroll down of the collection and after, at the bottom pul whole page for the second time. Status message appears and it was saying that syncing was disabled due to Mac performance (I didn't asked for this).
Apologies, for misleading, code543 and thank you for consistence.
However, I must admit that I'm happy that found iCloud Photos Downloader as a result, also I liked that it's downloading all photos in date/folder structure.
Not sure if the open/close is required, but I didn’t want to find out.
What I remember is that I opened the library in finder and in mc, got scared by the readable-only-by-machine directory structure and used a 3rd party tool to export them to date labeled directories.
But hey at least we've got Liquid (gl)ass now.
Thanks to Apple's exceptional software quality the app has plenty of bugs…
I use Photos for macOS daily and I've never run into a bug with my 50K+ photos library. (To be fair, Photos doesn't do that much, and I use it more as a master catalog with Aperture's spiritual successor Nitro.)
…and good luck exporting a lot of files out of said library…
Not sure why you would need luck to copy the "Originals" folder from the library package.
I've never run into a bug with my 50K+ photos library.
Have you tried dragging & dropping a photo from the Photos app to your desktop to export it as a file?
I just tried it and while the Photos app UI didn't freeze (I guess either my memory is bad and the spinner behavior was on imports, or they fixed it since 2 years ago), but it takes ~3 seconds for a single photo to appear as a file on my desktop (with no UI or any indicator that something is happening), and dragging & dropping 45 photos took over a minute (again with no progress indicator).
Granted, it turns out I didn't have "download originals" on (not sure if it was always like that or got reset during an update) so hopefully for Apple it's that - but I still think at the very least a progress indicator on what seems like a network IO operation is in order (and I wonder what happens if I interrupted my network connection during its operation - does it just silently never complete and my files never appear, actually show an UI, or just crash?).
Edit: well nevermind, despite all the files apparently exporting just fine, ~5 minutes later after initiating the operation I just got a hideous popup that some files failed to export: https://imgur.com/a/SFXZB5N
It's progress, at least it's the first indication in the UI that something was actually happening. You will notice that the error text is truncated, the only way to read it all is to resize the window (no hover text) and for some reason the horizontal scroll in this UI element does not follow your touchpad - you have to scroll, lift your fingers, and ~1 second later the UI suddenly applies your scroll operation.
Also, it turns out that resizing the window finally readjusted the table control and now the table actually matches the size of its container and isn't scrollable anymore. Which might be a good thing as it at least alleviates the bug mentioned previously, but then why did the control initialize oversized to begin with?
Again this is the kind of jank I'd expect from Linux, and nowadays maybe Windows. But not Mac.
copy the "Originals" folder from the library package
My bad, I wasn't aware of said folder; I treated the "package" as an internal implementation detail equivalent to a proprietary format and wasn't going through it. I don't think it's a fair expectation to have (potentially non-technical) people to right click "Show package contents" while the usual double-click on the file just opens the library in the Photos app.
Cmd+A > File > Export Unmodified Originals
It seems like an obvious improvement for Time Machine to support full backups while using optimized storage on the primary system.
I migrated to Linux + Pika Backup. For photos I use Ente Photos with their managed cloud storage plus a continuous export to my NAS.
Ente is surprisingly well integrated with iOS, you really don’t need to use Apple’s solution. It automatically backs up photos I take in the background.
10 minutes is great, and my changes wouldn’t seem as extensive as yours. I need to dig deeper.
I also use a modified version of this script[0] to identify everything that changed in the most recent Time Machine backup. This is hugely helpful and lets me find unimportant things that are the source of lots of unimportant changes which I can then exclude with `tmux addexclusion -p <PATH>`. For example I exclude 'node_modules' folders for anything that gets regularly updated. This removes ~10k files that would otherwise be wastefully backed up. Speeding it up is much more about reducing file count than total size.
[0] https://github.com/nlfiedler/timedog (though its woefully out of date, and I had to make some hacky patches to it to get it working)
Time Machine's job is to back up my data, it's not strictly to make a 1:1 copy of local storage. It should back up my cloud data too.
I’ve found unreasonable value in being able to search through hundreds of thousands of photos from my phone, so I went all-in on Photos.app. Though one enabling factor is that my photography workflow has drastic simplified in recent years to doing very little post (except for astrophotography, which I try and keep wip out of Photos.app anyway).
IIRC Photos.app will not even open if the default library you are pointing at is not there (i.e drive was unplugged). Are you able to just open up the library file directly and it will work as expected?
I also recall when changing Photos.app back to the HDD Library it did a ~2h 'rebuild' session before it even started downloading the new photos, but maybe thats acceptable with the 'every so often' approach.
Slow motion videos are also not proprietary, they’re just a plain video file.
I haven't looked into the implementation details, but Photos lets you adjust the section of the video that is played back in slow motion. I thought if you share a slow-mo video, it gets re-encoded to bake this in (i.e., one second at 240fps gets exported as four seconds at 60fps).
"I actually bought a Mac Studio"... "I don't understand why Apple don't " ... wait a minute
For edits, I don't care too much about just baking them in since it's unlikely I'm going back to old photos and want to undo the crop.
I’m not ready to pay $60/month, but I do like iCloud’s memories and other photo features. My compromise is simple:
- I use docker-icloudpd to download our iCloud Photos to local storage over time. It’s been the most practical way I’ve found to back up multiple accounts into one place, though it does require occasional re-auth every so often. - I keep only the last ~2 years of media in iCloud and delete older ones after they’re archived locally. - For browsing and searching the older archive, I use Immich, which has been a great self-hosted personal photo cloud experience with a modern app feel.
For storage, I’ve found fast local disk matters a lot once you’re digging up photos from 5+ years ago. Something like an OWC 4M2 with M.2 drives keeps the experience snappy; a typical HDD-based NAS can feel sluggish when you just want to quickly pull up an old memory.
Immich is great if you want to be able to delete things from your phone to save space and still have access to all your content served from Immich on your server though.
[1] https://apps.apple.com/us/app/parachute-backup/id6748614170?...
On a related question, is there a download solution that does work with ADP? I’m looking to mitigate any potential account lockout issues for family members (and, no, they will not switch out of the ecosystem).
The only scripted solution I can think of that works with ADP is osxphotos[^1], but that also uses PhotoKit, and requires the user to be signed in.
Personally I use PhotoSync [^2] to backup our photos from phones to a NAS. It works reliably, and supports exporting unmodified originals as well as edited versions, and XMP/AAE metadata alongside it.
The desktop version works reliably, if you can get macOS to keep shares mounted for long enough, and mount them on request. The scheduler is also kinda wonky.
The iOS version has so far never finished an incremental backup overnight of our ~1TB individual libraries. It handles resume/suspend well, but for some reason, while it exports unmodified originals, it doesn't include AAE files, which the desktop version does.
PhotoSync does everything right, with the exception of trying to keep state of what has been exported, which makes little sense as it doesn't support restoring photos.
I wrote a webapp to try to solve that for myself (https://github.com/yhling/go-web-image-gallery)
⟩ cat ~/bin/icloud_download
#!/bin/bash
mkdir "$(pwd)"/{photos,cookies} 2> /dev/null
if [[ -z "${ICLOUD_USERNAME}" ]]; then
echo "need env ICLOUD_USERNAME"
exit 1
fi
if [[ -z "${ICLOUD_PASSWORD}" ]]; then
echo "need env ICLOUD_PASSWORD"
exit 1
fi
podman container run -it --rm --name icloud \
-v $(pwd)/photos:/data \
-v $(pwd)/cookies:/cookies \
-e TZ=America/Boise \
icloudpd/icloudpd:latest \
icloudpd --directory /data \
--cookie-directory /cookies \
--folder-structure {:%Y/%Y-%m-%d} \
--username "${ICLOUD_USERNAME}" \
--password "${ICLOUD_PASSWORD}" \
--size originalicloudpd/icloudpd:latest
Passing your raw iCloud creds into the unverified latest tag is fine until it’s not. Better to pin to a specific tag or hash.
I'm always surprised what kind of antifeatures people in Apple land are willing to accept and still use those things...
Similar to some other folks in this thread I have ~2TB of iCloud data, a Macbook with far less than 2TB of space, an external hard drive somewhere with the external Photo Library that I need to plug in if I want to look at photos on the Macbook, and a Windows desktop with 10TB+ of rusty disks.
I was excited when they added the iCloud app + iCloud photos to Windows, but it never seems to catch up or finish what it is doing. It appears to be almost constantly download at 50MB/s, stressing both disk & internet, and yet navigating to the folder reveals that they are all 'available when online'.
It seems like there is not an option in Windows to actually grab everything in full quality (actually now that I look at it - its gotten to 944GB on disk / 1.91TB total, so it is getting there.)
I guess a real question - with these photos finally on a Windows desktop - is there a better photo browser than Microsoft photos that can show the HEIC and the Live Photo?
Automatic de-duplication of photos with the same name
I recently went through a year’s worth of photos from my wife’s phone, and found three distinct “img_0001.jpg”’s just in that single year. Apple’s naming convention is so short sighted that I’d be terrified letting a piece of software try to dedupe it “by name “
... Apple’s naming convention.
No, it is not. It came from DCF standard that predates smart phones.
https://en.wikipedia.org/wiki/Design_rule_for_Camera_File_sy...
I'm running this on my icloud photos now, and it seems to be dropping them nicely into folders by year and month:
D:\Pictures\icpd\2026\01\01
... so my wife will need to step up her game and start taking 10,000 photos a month before I run afoul of this.
Only need to go to this page to do the request https://privacy.apple.com/
Going forward, you’d want to set up some other way to sync photos you take from your phone to your other devices. I can personally recommend Synology Photos for simplicity[1], or Immich[2] for an open-source (and in my opinion, slightly better) alternative you can run on any hardware, if you’d like to set up an always-on NAS. These are “Apple Photos” or “Google Photos” equivalents that you host yourself.
Alternatively, something like Syncthing[3] is a dead-simple way to sync your photos to various other devices as and when they are online, if you’d prefer to manage your photos in an ordinary file manager.
I’d be remiss not to mention that, for any solution where you move off the cloud to a central storage location of your own, you really must make backups to keep your photos safe. The 3-2-1 rule is a standard recommendation.
Honestly, Apple should officially maintain tools like this. However, for obvious reasons, such as the iCloud subscription revenue model, Apple will not do it. In fact, Apple may even make life harder for such tools.
For context, try tapping 'optimize photos' in iPhone storage settings and then figure out how to turn off the feature without using Google. Not only is the toggle nearly impossible to find, but it's also hidden from being searchable
For context, try tapping 'optimize photos' in iPhone storage settings
Same place it’s always been. In Settings -> App -> Photos, toggle Download and Keep Originals. Same place it is for macOS as well. It’s not that magical. Search for “photos icloud” and you’ll be led to the setting for it.
Product idea: Apple should offer a paid service to restore the "old backups" of photos that are no longer accessible via iCloud UI/API, which were soft-removed for missing the subscription quota or whatever, if Apple happens to have that data tucked away in cold storage somewhere.
Case in point, I had some c. 2016 era photos in iMessages that I thought I handled right to not lose from iCloud, but they are apparently nowhere to be found in iCloud API based on recent checks. More than mildly irritating.
I should have used an iCloud photos backup tool like this much sooner.
Print what you want to keep onto archival paper with archival dyes. Everything else will atrophy.
It's macOS-only and intentionally minimal — the goal is just to download originals from iCloud Photos to disk without syncing everything into Photos.app first.
To be clear on limitations: it doesn't preserve albums or other metadata yet, and it's not meant to replace more full-featured tools. It’s mainly for the "I just want my photos off iCloud for backup" case.
Reading the comments here, it sounds like metadata preservation is a big pain point for many people — I'd be curious whether that's the first thing folks would want added, or if simple bulk export already covers most needs.
We have had file systems for decades. They work well. They sync trivially.
And it took Apple YEARS to give us a "Keep Downloaded" option for iCloud Drive documents in Finder.
And it's been years since I read any ebooks because the damn Mac/iOS Books app keeps removing my downloaded books even though I have several GBs of storage space left.
Goddamn Tim Cook and the other execs, do they even ever use their own products at all?
Guess I should've searched harder!
why not use rclone (?)
This is the correct - and obvious - response to something like this.
Unfortunately, I believe that rclone has no support for iCloud photos at this time.
https://github.com/rcarmo/PhotosExport
...when you try to export files using the (restricted) APIs we get, it automatically triggers a download.
But I can still not escape Apple’s gonorrhoeic naming and organisation.
Pro: FOSS of course; it works, with limitations (that’s mostly Apple) and glitches (that’s entirely ente)
Cons: really subpar non-native apps (desktop app is quite a dumb app as well) :( (and barely and useful additional features that lets a user do some batch/organisational changes or so)