- A command-line tool to download all your iCloud photos.
- Works on Linux, Windows, and macOS; laptop, desktop, and NAS
- Available as an executable for direct downloading and through package managers/ecosystems (Docker, PyPI, AUR, npm)
- Developed and maintained by volunteers (we are always looking for help).
See Documentation for more details. Also, check Issues
We aim to release new versions once a week (Friday), if there is something worth delivering.
To make iCloud Photo Downloader work, ensure the iCloud account is configured with the following settings, otherwise Apple Servers will return an ACCESS_DENIED error:
- Enable Access iCloud Data on the Web: On your iPhone / iPad, enable
Settings > Apple ID > iCloud > Access iCloud Data on the Web - Disable Advanced Data Protection: On your iPhone /iPad disable
Settings > Apple ID > iCloud > Advanced Data Protection
There are three ways to run icloudpd:
- Download executable for your platform from the GitHub Release and run it
- Use package manager to install, update, and, in some cases, run (Docker, PyPI, AUR, npm)
- Build and run from the source
See Documentation for more details
- Three modes of operation:
- Copy - download new photos from iCloud (default mode)
- Sync - download new photos from iCloud and delete local files that were removed in iCloud (
--auto-deleteoption) - Move - download new photos from iCloud and delete photos in iCloud (
--keep-icloud-recent-daysoption)
- Support for Live Photos (image and video as separate files) and RAW images (including RAW+JPEG)
- Automatic de-duplication of photos with the same name
- One time download and an option to monitor for iCloud changes continuously (
--watch-with-intervaloption) - Optimizations for incremental runs (
--until-foundand--recentoptions) - Photo metadata (EXIF) updates (
--set-exif-datetimeoption) - ... and many more (use
--helpoption to get full list)
Some changes are added to the experimental mode before they graduate into the main package. Details
To keep your iCloud photo collection synchronized to your local system:
icloudpd --directory /data --username my@email.address --watch-with-interval 3600
Important
It is icloudpd, not icloud executable
Tip
Synchronization logic can be adjusted with command-line parameters. Run icloudpd --help to get full list.
To independently create and authorize a session (and complete 2SA/2FA validation if needed) on your local system:
icloudpd --username my@email.address --password my_password --auth-only
Tip
This feature can also be used to check and verify that the session is still authenticated.
icloudpd includes a plugin system that allows you to extend functionality by hooking into the download process. Plugins can respond to events like file downloads, process photos after they're downloaded, and integrate with external services.
Enable a plugin with the --plugin flag:
icloudpd --directory /photos --username me@example.com --plugin immichEach plugin adds its own CLI arguments. Use --help to see available options:
icloudpd --plugin immich --help-
Immich - Integrates with Immich photo management. Automatically registers downloaded photos, creates stacks for size variants, syncs favorites, and organizes photos into albums.
-
Demo - Demonstrates the plugin system's capabilities. Use as a reference when building your own plugins:
icloudpd --plugin demo --demo-verbose --recent 5
For developers interested in creating custom plugins, see the Plugin Development Guide which covers:
- Available hooks and when they're called
- How to accumulate and process photo data
- Best practices and common gotchas
- Testing your plugin
- Complete code examples
Want to contribute to iCloud Photos Downloader? Awesome! Check out the contributing guidelines to get involved.