photo-gallery-delivery

v2026.09.24

End-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.

GitHub
Install command
npx skhub add terrylica/photo-gallery-delivery
Markdown
SKILL.md

photo-gallery-delivery

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.

The full playbook for delivering a photo set to a real recipient when "just share the album" isn't working — because the files are HEIC, the share app forces a login, or the recipient's software can't ingest what you sent. It stitches three focused skills into one flow and adds the gist-gateway + password delivery model.

When to use

  • A recipient says they can't open / can't download / can't convert your photos (classic: iPhone HEIC vs. Windows appraisal/CRM software).
  • You want to hand over a clean, unlisted JPEG gallery (viewable in any browser, no app, no login) plus a bulk ZIP — to a dealer, insurance adjuster, client, or contractor.
  • You're already sharing a gist / landing page with people and want it to lead to JPEGs instead of a format they can't use.

The pipeline

cloud album ──▶ download originals ──▶ HEIC→JPEG + gallery + ZIP ──▶ unlisted host ──▶ gist gateway
 (share link)   amazon-photos-          heic-to-jpeg-bundle          cloudflare-        (link + password)
                album-download                                       workers-publish

Each stage is its own skill; this skill is the glue + the decisions between stages.

1. Pull the originals — productivity-tools/amazon-photos-album-download

Get a verified local copy of every original from the public Amazon Photos share link. Store them outside any git repo (originals carry GPS/plate/VIN EXIF).

ALBUM_URL="https://www.amazon.ca/photos/share/<id>" ALBUM_OUT="$HOME/.cache/album/originals" \
  bun "$(find ~/.claude ~/eon -path '*/amazon-photos-album-download/scripts/download-album.ts' | head -1)"

2. Convert + bundle — media-tools/heic-to-jpeg-bundle

Make a gallery (2048px view tier + thumbnails) and a password-protected ZIP sized to fit the host's per-file cap.

bash "$(find ~/.claude ~/eon -path '*/heic-to-jpeg-bundle/scripts/make-bundle.sh' | head -1)" \
  --src "$HOME/.cache/album/originals" \
  --title "2023 Corolla Cross — trade-in photos" \
  --zip --password "<PICK-A-PASSWORD>" --zip-cap-mib 25

3. Host it unlisted — devops-tools/cloudflare-workers-publish

Deploy the _bundle/site/ directory (gallery + per-photo JPEGs + the ≤25 MiB ZIP). You get an unlisted https://<name>.<slug>.workers.dev/ URL. Mind the 25 MiB/file cap (CFW-16): the gallery and a downscaled ZIP fit; a full-resolution ZIP does not — host that on R2 / a GitHub Release / your own server and link it from the gallery. See large files & ZIP delivery.

4. Share through the gist gateway

If you already share a gist (or any landing page) with recipients, make it the gateway:

  • Add a "📸 Photos (JPEG)" section: the gallery URL, the ZIP URL, and the ZIP password.
  • Keep the password only on the gist, never on the Workers page (password-on-the-gateway, see the cloudflare skill). The gist becomes the one place that has both link and password.
  • If a short link (tinyurl) already points at the gist, every previously-sent link upgrades for free.
gh gist edit <gist-id> -f <file.md> /tmp/updated-gist.md

Decisions to surface (use AskUserQuestion)

  • Resolution / tiers: web-res gallery only, or also a full-resolution ZIP for the recipient's own analysis? Full-res can't sit on Workers (size) — confirm a large-file host.
  • Hosting: unlisted Workers (recommended) vs. public GitHub Release (world-readable — avoid for PII) vs. own server.
  • Gating: password-protected ZIP with the password on the gist, vs. open download.
  • Privacy: these photos often show plate / VIN / home — keep originals out of git, prefer unlisted hosting, and don't index publicly.

Worked example (June 2026)

A used-car buyer's Amazon Photos album of 125 HEIC trade-in photos was unusable to dealers whose appraisal software couldn't open HEIC (the documented #1 blocker in their outreach). Flow: pulled all 125 originals (byte-verified) → converted to a 2048px JPEG gallery + a 24 MiB ZipCrypto ZIP (--zip-cap-mib 25 downscaled it to fit) → deployed gallery + ZIP to vehicle-appraisal.example-account.workers.dev (the 109 MiB full-res ZIP hit the 25 MiB cap, so it was kept off Workers) → updated the dealer-facing gist with the gallery link, ZIP link, and the password. Because a tinyurl already pointed at the gist, ~22 already-sent dealer links upgraded to JPEGs with nothing re-sent.

Post-Execution Reflection

After a delivery, before closing:

  1. Did the recipient succeed? If they still struggled, note the exact tool/format and fix the relevant stage skill (not this one, unless the orchestration itself was wrong).
  2. Did a stage's external dependency drift? (Amazon API, Workers cap, gist tooling.) Log it in that stage skill's own notes/evolution-log.
  3. Only update this SKILL.md for real, reproduced changes to the end-to-end flow.
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

plugins/media-tools/skills/photo-gallery-delivery

Default branch

main

Latest commit

b657cca

Tree SHA

906e003