My iCloud Photo Library was working great, but I ran out of space and it stopped syncing. Now I’ve bought more space and restarted my devices, but it is still not syncing.

How can I get it to start syncing again? I vaguely remember this happening before and having to do something like deleting all photos from my iPad and doing something on my Mac.

Update: I have tried rebooting into safe mode and it still doesn’t sync.

iCloud Photos Preferences

I am running OS X Yosemite.


The surest way to resolve this is to create a fresh Photos Library by following these steps:

  1. ⌘ cmd-Q out of Photos.
  2. Go into  → System Preferences → iCloud → Photos Options… and uncheck iCloud Photo Library. iCloud Photos Options
  3. Reboot if you want to be safe, though it shouldn’t be necessary.
  4. Launch Photos with ⌥ opt-click.
  5. Click Create New… and name your new Photos Library. Create New Photos Library
  6. Go into Photos → Preferences → General and click Use as System Photo Library. Use as System Photo Library
  7. Go into Photos → Preferences → iCloud and check iCloud Photo Library.
  8. Wait for your photos to be redownloaded from iCloud.

If you’d rather try to keep your existing Photos Library, follow these steps instead:

  1. ⌘ cmd-Q out of Photos.
  2. Create a backup of your Photos Library.photoslibrary file.
  3. Launch Photos with ⌘ cmd-⌥ opt-click.
  4. Click Repair. Repair Photos Library  dialogue box
  5. Wait for macOS to repair your Photos Library. A full sync should take place once the repair has completed.

Some screenshots courtesy of OS X Daily.


I was battling this exact issue after scanning in over 50,000 family photos into OSX Photos, (I'm assuming some sort of image corruption in your case).

I already had 40,000 and Photos was working without issue for years.

After importing up 10,000 or so photos I had scanned in as TIFF files, iCloud syncing completely stopped.

Tried to recover my Photos library TWICE, to no avail. Almost every Google, (and Apple support), result on this topic was pretty useless and I'd already wasted two weeks waiting for both of those database recoveries to complete.

So spent some time digging around the Photos app log files and discovered that syncing was failing on certain photos. Not just failing, it just stopped cold and there was no real indication that there was any problem with that specific image.

Turns out my Epson FF-680W photo scanner was adding in some bogus EXIF values into the TIFF files. Specifically:

  • Rotation - Caused Photos to completely barf rotation. I would rotate a photo, go out of the album, come back and it was in a different rotation.
  • Location - Could NEVER add any location. Looked like something was there, but always doing this "checking location" loop.

So, I wiped all the imports I had done and started doing some experiments using exiftool.

In the end I came up with a tried and true set of "default" values that fixed all bogus entries. You'll need to change the environment variables to suit.

        exiftool -P -overwrite_original \
                -XMP-photoshop:DateCreated="${DATE} ${TIME}${ZONE}" \
                -XMP-xmp:CreateDate="${DATE} ${TIME}" \
                -IPTC:DateCreated="${DATE}" \
                -IPTC:TimeCreated="${TIME}${ZONE}" \
                -ExifIFD:DateTimeOriginal="${DATE} ${TIME}" \
                -ExifIFD:CreateDate="${DATE} ${TIME}" \
                -ExifIFD:OffsetTime="${ZONE}" \
                -ExifIFD:OffsetTimeOriginal="${ZONE}" \
                -ExifIFD:OffsetTimeDigitized="${ZONE}" \
                -GPS:GPSDateStamp="${DATE} ${TIME}" \
                -XMP-dc:Description="${DESCRIPTION}" -IPTC:Caption-Abstract="${DESCRIPTION}" \
                -XMP-dc:Subject="${KEYWORD}" -IPTC:Keywords="${KEYWORD}" \
                -IPTC:ObjectName="${TITLE}" -XMP-dc:Title="${TITLE}" \
                -XMP-dc:Subject="${KEYWORD}" -IPTC:Keywords="${KEYWORD}" \
                -XMP-iptcExt:PersonInImage="${FACE}" \
                -GPS:GPSSpeed=0 \
                -IFD0:HostComputer="MacMini" \
                -ExifIFD:ExifVersion=0232 \
                *.tif

Format for critical env values: DATE="2021:06:23" TIME="02:41:32" ZONE="+10:00"

The rest are all free text.


Seriously, this is just plain ridiculous that a modern day application can fail so miserably when values are not "within spec".

After wrestling with this for days, with no real help from Apple or Google results, (and on the verge of completely ditching Photos); I can understand anyone else's frustration.

So here's this post. Hope it avoids a tonne of frustration for people.


Note: For those people who want to monitor their sync progress, I use this.

log stream \
    --color always \
    --style compact \
    --predicate 'process == "cloudd" or process == "cloudphotod" or process == "photoanalysisd" or process == "photolibraryd" or process == "cloudpaird" or process == "bird" or process == "cloudpaird" or process == "Photos"' | \
        perl -ne '
BEGIN {
    $last = time();
}

if (/com.apple.photos.cpl.*?:.*?engine.sync.pushtotransport|com.apple.photos.*?:.*?Generic/) {
    $now = time();
    $diff = $now - $last;
    if ($diff > 10) {
        print"====================\n\n"
    }

    print("$diff - $_");
    $last = $now;
}'

I only add in the perl bit to give me a nice gap between log entries. You could condense it down to just:

log stream --color always --style compact --predicate '(process == "photolibraryd" or process == "Photos") && (subsystem == "com.apple.photos" or subsystem == "com.apple.photos.cpl")'