Forums Feature Requests Thread

[New] Files, photos, gallery, ansi: No album download (zip) — every photo competitor offers one-click "download all"

Patrick Bass · Jun 6 · 9 · 1 Locked
[High Priority] [New Feature] [Deployed to Production]
🚀 OP Jun 6, 2026 6:00pm

Area: Files, photos, gallery, ansi (audit p5) · Surface: Photo galleries (/photos/album/{id}) · Dimension: competitor-gap · Severity: major

Members can upload whole albums but can never get them back out as a set. Circle, Mighty Networks, and consumer photo products (Google Photos, SmugMug, Flickr) all provide "Download album" producing a single zip. Without it, a user who wants their 200-photo trip album off the platform must save each file one at a time via the browser's right-click, and there is no documented download affordance at all (only an inline "Full size" view). This is a data-portability and basic-utility gap that makes the gallery feel like a roach motel for content.

Evidence

PhotoGalleryController.php has no zip/bulk-download action (grep for ZipArchive/download-all/bulk-download returns nothing in any controller). The lightbox top-right only offers "Full size" (album.php:292-296, opens one item in a new tab via target=_blank) and serve() at PhotoGalleryController.php:1165 streams a single item with NO Content-Disposition (line 1228 comment: "No Content-Disposition header — we want the photo displayed inline, not downloaded"). There is no per-album or per-selection export path.

Suggested fix. Add POST /photos/album/{id}/download that streams a ZipArchive of the original files the viewer is permitted to see (reuse PhotoAlbum::viewableBy), with a rate limit and a size cap. Surface a "Download album" button on /photos/album for owners (and optionally members if the album is public). For large albums, queue a background job and email a signed link.

Filed by the automated tenant-app audit and adversarially evidence-verified. Status: verified. Open — not yet actioned.


Patrick Bass
@mobieus

🚀 Jun 7, 2026 12:51pm

Shipped and deployed to production. Commit 63b2de429a.

Album zip download: GET /photos/album/{id}/download streams all images via PHP ZipArchive (capped at 100, gated by viewableBy).

Closed as: deployed.


Patrick Bass
@mobieus

Log in or register to reply to this thread.