Skip to content

Instantly share code, notes, and snippets.

@fay59
Last active March 10, 2025 13:39
Show Gist options
  • Save fay59/8f719cd81967e0eb2234897491e051ec to your computer and use it in GitHub Desktop.
Save fay59/8f719cd81967e0eb2234897491e051ec to your computer and use it in GitHub Desktop.
Download entire iCloud shared albums
#!/bin/bash
# requires jq
# arg 1: iCloud web album URL
# arg 2: folder to download into (optional)
function curl_post_json {
curl -sH "Content-Type: application/json" -X POST -d "@-" "$@"
}
BASE_API_URL="https://p23-sharedstreams.icloud.com/$(echo $1 | cut -d# -f2)/sharedstreams"
pushd $2 > /dev/null
STREAM=$(echo '{"streamCtag":null}' | curl_post_json "$BASE_API_URL/webstream")
CHECKSUMS=$(echo $STREAM | jq -r '.photos[] | [(.derivatives[] | {size: .fileSize | tonumber, value: .checksum})] | max_by(.size | tonumber).value')
echo $STREAM \
| jq -c "{photoGuids: [.photos[].photoGuid]}" \
| curl_post_json "$BASE_API_URL/webasseturls" \
| jq -r '.items[] | "https://" + .url_location + .url_path' \
| while read URL; do
for CHECKSUM in $CHECKSUMS; do
if echo $URL | grep $CHECKSUM > /dev/null; then
curl -sOJ $URL &
break
fi
done
done
popd > /dev/null
wait
@intjonathan
Copy link

Uj947nXmRqV2nRaWshKtHzTvckUUpD yours worked perfectly - thank you!

@VSimpact
Copy link

VSimpact commented Sep 10, 2024

I'm new to this but I found my way around it after some time

I used powershell to install chocolatey and then jq
I saved the latest script on my desktop with Notepadd++ on Unix format as 'icloud-album-download.sh'
I installed cygwin
I ran the following lines:

cd c:/Users/'my user'/Desktop
chmod +x ./icloud-album-download.sh
./icloud-album-download.sh 'shared icloud album link'

Seems like everything runs without errors but nothing downloads, I get this on cygwin command window:

Getting iCloud Stream
Grabbing Large File Checksums
Adding Checksums to Array
Total Downloads: 0
Unique Downloads: 0
Streaming All Assets

@GodSaveEarth
Copy link

GodSaveEarth commented Nov 15, 2024

Quickly wrote a new Powershell script to download iCloud shared album (photos + videos):
https://gist.github.com/GodSaveEarth/9b8d574d0f5ab789aebdfdb2db59b8df

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment