I have an iCloud account with about 800 photos stored in iCloud Photo Library. I’m trying to move them to a Mac and delete them from iCloud in order to clear up space.

I tried to connect my Mac to iCloud Photo Library by going into the Photos app’s preferences; however it then asks me to upgrade to a paid iCloud storage tier because I have over 5GB worth of local images that Photos wants to sync to iCloud.

So I don't think using the Photos app is going to work for offloading pictures to a Mac.

I then logged in to the Photos app at iCloud.com. I was able to select and download individual images, but it won’t let me select more than one at a time, so I can’t download them all in bulk. Selecting the first image, holding down the ⇧ shift key, then selecting the last image causes only the last image to be selected.

I could click on all 800 images while holding the ⌘ cmd key, but that’s obviously very tedious.

What’s the most efficient way to download images from iCloud Photo Library to a Mac that can’t connect to iCloud Photo Library without upgrading to a paid plan?

6 Answers 6


Go to https://privacy.apple.com/account , sign-in and request download for photos.

You can request a copy of the data that Apple stores which is associated with your Apple ID. This information includes, but is not limited to:

  • Your Apple ID account details and sign-in records.

  • Data that you store with iCloud such as contacts, calendars, notes, bookmarks, reminders, email, photos, videos, and document.

from https://support.apple.com/en-in/HT208502

  • 2
    If you find that an answer is suitable for several questions please consider flagging for mod attention/voting to close as duplicate instead of posting the same answer several times.
    – nohillside
    Commented Jul 7, 2019 at 19:29
  • I will flag others to be redirected here because it has more resources.
    – anki
    Commented Jul 7, 2019 at 19:30

I highly recommend ndbroadbent's fantastic Python program the icloud_photos_downloader project. The project repository can be found at his Github account: https://github.com/ndbroadbent/icloud_photos_downloader.

There are some great instructions on installation and use in the project README. Once installed, you run the program to download all your photos to a directory called foto_folder; from the terminal

./download_photos.py ../foto_folder [email protected] --password=myp@ss --size=original --download-videos

And viola, it does its magic.

I've also posted this answer here: https://apple.stackexchange.com/a/311787/271502

  • Please don't post duplicate answers. If the questions are the same, answer one and vote to close the other as duplicate. If they're not the same then tailor your answer to the specifics of each question.
    – grg
    Commented Feb 13, 2018 at 20:18
  • The current link seems to be github.com/icloud-photos-downloader/icloud_photos_downloader Commented Jun 18, 2023 at 15:20

Now, you can just hit Control-A on the iCloud Photos page, and it will select all the images and videos. Then just click Download on the top right.

  • That doesn't appear in my Photos Commented Apr 11, 2020 at 11:34
  • 1
    PS. You can download only 1000 pictures in one batch. Commented Jun 4, 2021 at 6:12

I was able to figure out a workaround for this. It will force the underlying structure to select all of the photos on the page and allow you to click the download selected photos button. It will download them all separately as if you had selected all of the photos by hand (but without RSI).

You need to use Chrome dev tools. I am sure you can do it with other browsers, I just haven't tried. The following steps are involved, and I would appreciate if someone can tell me how to get the "this" value for the object I need in a simpler fashion (steps 4-10).

Here's the steps:

  1. Make sure chrome dev tools is closed.
  2. Go to photos in iCloud, then All Photos
  3. Right click any photo on the page and select Inspect.
  4. Click Sources tab at the top of dev tools.
  5. In network hierarchy on left, open photos, www.icloud.com, applications/photos, 1807Hotfix1/en-us, main.js
  6. Click braces {} at bottom of the sources window to format the code.
  7. Search for case r.a.TOGGLE: (should be around line 25845)
  8. Set a breakpoint on the line above which is a switch statement.
  9. Click on any photo in the main window.
  10. Go back to dev tools and see the scope window (below source for me).
  11. Right click on "this" variable and choose Store as Global Variable.
  12. Look in the console. Should see something like temp1 which is set to this.
  13. Remove the breakpoint in the source window.
  14. Click the Resume Script Execution button in main window.
  15. Go to the console, and type the following and press enter:

  16. Nothing appears to have changed, but it has underneath.

  17. Now click the download selected items button at the top.
  18. You will now see a bunch of downloads happening.
  • This seems to be not working anymore. Did you try it recently? Do you select index page under the www.icloud.com node? It has only 400 lines, not 40000.
    – Suncatcher
    Commented May 3, 2018 at 8:36
  • You are right. Looks like they changed the site. I updated the instructions which will work for now until the next change. BTW, it needs peer review so may not show immediately. Commented May 7, 2018 at 5:04
  • Awesome, man! It works, though it doesn't select all files, e.g. from 1600 photos it selected only 268. Nevertheless, it's nice solution, and I should definitely power up Chrome debugging skill :)
    – Suncatcher
    Commented May 7, 2018 at 9:58
  • Glad to help. Sorry it isn't all of the photos. Maybe someone could work out why? I don't know why there isn't a select all button in the first place. Commented May 8, 2018 at 5:57
  • Almost always makes iCloud throw an error and close the page. Smart though 👍
    – user87
    Commented Sep 9, 2018 at 15:03

You can still do this using the Photos app.

Short Version

You just need to connect an empty System Photo Library to iCloud Photo Library so that nothing gets uploaded, only downloaded.

Once that’s done, export all those photos to your hard drive, disconnect from iCloud Photo Library, and restore your main Photos Library as your System Photo Library.


  1. Close the app (⌘ cmd q).
  2. While holding ⌥ opt launch Photos from your Dock.
  3. Select Create New… to create a new Photos Library.
  4. From the menu bar, click PhotosPreferencesGeneralUse as System Photo Library.
  5. Quit and reopen Photos.
  6. Connect to iCloud Photo Library by checking PhotosPreferencesiCloudiCloud Photo Library and Download Originals to this Mac.
  7. Allow your Mac to download all your photos from iCloud.
  8. If your sidebar is hidden press ⌥ opt ⌘ cmd s to show it.
  9. From All Photos view (which includes hidden photos and videos), press ⌘ cmd a to select all photos.
  10. From the menu bar, go to FileExportExport Unmodified Original For 800 Items…
  11. Wait for the export to complete.
  12. Delete all your photos from Photos (and thus, from iCloud Photo Library). Don’t worry; they will persist in Recently Deleted for 30 days.
  13. Disconnect from iCloud Photo Library by unchecking PhotosPreferencesiCloudiCloud Photo Library.
  14. Close Photos.
  15. ⌥ opt-click Photos from the Dock.
  16. Choose your original Photos Library and click Select Library.
  17. Click PhotosPreferencesGeneralUse as System Photo Library.
  18. Import all your exported photos into your main library.
  19. Trash the Photos Library created in Step 3.
  20. Now that you’ve got all your photos, head to the Recently Deleted album at iCloud.com and choose Delete All.
  21. Profit.

This solution will probably change at some point in the future if the iCloud Shared Album webapp changes in the future. But it currently works on July 1, 2020.

  1. Go to your Shared Album by cliking the link you received (similar to https://www.icloud.com/sharedalbum/#abcdefg) in Chrome.

  2. Click on the first photo to display it.

  3. Open up Chrome devtools (in the Chrome menu)

  4. Paste the following code into the console and push "Enter" key :

    var interval = setInterval(function() {
      Photos.stateManager.sendAction("downloadItem", Photos.stateManager.currentState.currentItem)
      setTimeout(function() {
      }, 500);

It'll download the current photo in the default download folder (depending on your Chrome settings a popup may ask to you where saving the photo). Then it'll display and download the next photos from the album every second. It's quicker than going through everything manually.

This solution will loop at the end of the album, so you need to stop the script when you see all your photos in your download folder. To stop the script, you just need to close the Chrome tab.

  • That Ok press can be automated too, AppleScript or Selenium.
    – anki
    Commented Dec 5, 2019 at 15:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .