From productivity-tools
Download the original photo and video files from a public Amazon Photos shared album (an amazon.com/amazon.ca /photos/share/<id> link) via Amazon Drive's own JSON API, no login required. Drives headless Chrome with Playwright, lists the album nodes, and pulls size-verified originals. Use when you need a local copy of every file in a shared Amazon Photos album, to re-process or re-host them (e.g. convert HEIC to JPEG, build a gallery). TRIGGERS - amazon photos download, download shared album, amazon photos share link, pull amazon album, amazon drive share, save amazon photos.
How this skill is triggered — by the user, by Claude, or both
Slash command
/productivity-tools:amazon-photos-album-download [Amazon Photos share URL][Amazon Photos share URL]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
Download every original file from a public Amazon Photos shared album —
the kind of link you get from "Share → Copy link", e.g.
https://www.amazon.ca/photos/share/qGAyl…. No Amazon login is needed for a
public share; the album authorizes anonymously via its shareId.
heic-to-jpeg-bundle skill).Amazon Photos is a React app over Amazon Drive's /drive/v1/ JSON API. A
public share exposes, with just the shareId as auth:
GET /drive/v1/shares/<shareId> → the root SHARED_COLLECTION node id.GET /drive/v1/nodes/<root>/children?limit=1… → the album folder node id.GET /drive/v1/nodes/<album>/children?filters=…image*+OR+video*…&limit=200…
→ the list of asset nodes (name, contentProperties.contentType, size).GET /drive/v1/nodes/<id>/contentRedirection?download=true&shareId=…
→ the original bytes.The script runs the JSON calls inside a headless Chrome page (via Playwright)
so they carry the exact cookies/headers the web app uses, then writes each file
under its real name and verifies the byte size against contentProperties.size.
A manifest.json records every node id, name, type, and size.
bun, playwright-core, and Google Chrome installed.# one-time, in the dir you'll run from (or any scratch dir):
mkdir -p ~/scratch/amazon-album && cd ~/scratch/amazon-album
bun add playwright-core
SKILL_DIR="$(dirname "$(find ~/.claude ~/eon -path '*/amazon-photos-album-download/scripts/download-album.ts' 2>/dev/null | head -1)")"
ALBUM_URL="https://www.amazon.ca/photos/share/REPLACE_WITH_SHARE_ID" \
ALBUM_OUT="$HOME/Pictures/my-album-originals" \
bun "$SKILL_DIR/download-album.ts"
Then convert + bundle for sharing:
BUNDLE="$(dirname "$(find ~/.claude ~/eon -path '*/heic-to-jpeg-bundle/scripts/make-bundle.sh' 2>/dev/null | head -1)")"
bash "$BUNDLE/make-bundle.sh" --src "$HOME/Pictures/my-album-originals" --zip --zip-cap-mib 25
| Env | Default | Meaning |
|---|---|---|
ALBUM_URL | (required) | The /photos/share/<id> URL |
ALBUM_OUT | ./album-originals | Output directory |
ALBUM_INCLUDE | image | image, image,video, or all |
ALBUM_PROFILE_DIR | ~/.cache/amazon-album/chrome | Persistent Chrome profile dir |
ALBUM_CHROME_CHANNEL | chrome | Playwright Chrome channel |
ALBUM_PAUSE_MS | 800 | Delay between downloads (be gentle) |
ALBUM_INCLUDE=image keeps just still images; widen it if you want videos.contentRedirection?download=true returns the original, not a thumbnail.
The album-listing tempLinks can be downsized (the app requests
lowResThumbnail=true); always pull originals via contentRedirection./drive/v1/ from plain curl fails —
the share auth rides on the browser context. The script uses page.evaluate
(JSON) + context.request (binaries), both inside the loaded album context.contentProperties.size (±2%);
the manifest.json verified count should equal selected./drive/v1/
requests to re-derive the endpoints.heic-to-jpeg-bundle password
ZIP is the cautious default).After running, before closing:
verified < selected? Investigate the failed nodes (rate limiting,
a node type without contentRedirection); note the fix.download-album.ts + the steps above.npx claudepluginhub terrylica/cc-skills --plugin productivity-toolsEnd-to-end playbook for getting a set of photos to someone who can't use what you sent — pull the originals from a cloud album, convert HEIC to JPEG, build a browsable gallery plus a password-protected ZIP, host it on an unlisted URL, and share it through a gist gateway that holds the password. Orchestrates the amazon-photos-album-download, heic-to-jpeg-bundle, and cloudflare-workers-publish skills. Use when a recipient (dealer, adjuster, client) reports they can't open or download your photos, or when you want a clean unlisted JPEG gallery plus bulk download. TRIGGERS - share photos with someone, recipient cant open photos, jpeg gallery delivery, send photos as downloadable link, unlisted photo gallery, deliver photo set, heic recipient problem.
Batch downloads original photos (6720x4480) from alltuu.com cloud photography albums. Extracts album IDs from URLs, uses Chrome CDP to capture signed OSS URLs, and downloads with concurrency control.
Creates, curates, and publishes Immich albums organized by geography, theme, or custom criteria. Activates on album-related requests.