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-toolsCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.