From ef2e9450808090b166f007bb16b2a36dd6a1e6ce Mon Sep 17 00:00:00 2001 From: Till Heidrich Date: Tue, 1 Sep 2026 04:05:47 +0000 Subject: [PATCH] docs: download-all in changelog, help page, README and llms.txt Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01BNhLunz586g6DeYMa7Qsd1 --- CHANGELOG.md | 6 ++++++ README.md | 4 +++- src/pages/anleitung.astro | 3 +++ src/pages/changelog.astro | 3 +++ src/pages/llms.txt.ts | 6 ++++++ 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14dd10b..a674d5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,12 @@ All notable changes to Klarbild are documented here. Newest first. off entirely, and pages and files are noindex. Access is bound to the link, not the image: swapping in another item id on a valid link returns 404. Private-session results can never be shared. +- **Download everything at once**: a share with several pictures gets one button above the + grid for a ZIP at full resolution. Written to stream, not buffer -- one file at a time, + waiting for archiver's `entry` before reading the next. Measured: 440 MB of images, RSS + peaked at 196 MB against a 120 MB baseline. Capped at 200 files and 500 MB, past which + the archive closes with a note saying what happened. Respects the download lock and the + passphrase; rate limited per link and address. - **Passing it on** by e-mail (several recipients, no attachment — a link can be withdrawn later, an attachment cannot) or via `wa.me`, which opens WhatsApp with the text prepared. The WhatsApp Business API needs a Meta account, approved templates and diff --git a/README.md b/README.md index 8b3b04c..3ec384b 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,9 @@ Migrationen und Seeds laufen beim Serverstart automatisch. Erststart-Passwörter `noindex`. Zugriff hängt am **Link**, nicht am Bild (fremde `item`-Kennung ⇒ 404); private Sitzungen lassen sich nie teilen. Verwaltung unter `/teilen` mit Aufrufen und Downloads. Gezählt wird *wann* und *womit*, nicht *wer*: IP nur gehasht, gesalzen mit Server-Geheimnis **und** Link-Kennung, eine - Zeile je Besucher und Stunde, Löschung nach 90 Tagen. Kern: `src/lib/shares.ts`. + Zeile je Besucher und Stunde, Löschung nach 90 Tagen. **Alle Bilder als ZIP** über + `GET /api/s//zip` — strömend, eine Datei nach der anderen (440 MB Bilder → 196 MB + Spitzenspeicher gemessen), gedeckelt bei 200 Dateien und 500 MB. Kern: `src/lib/shares.ts`. - **Weitergeben:** per E-Mail aus Klarbild heraus (mehrere Empfänger, **kein Anhang** — ein Link lässt sich zurückziehen), über das eigene Mailprogramm oder per `wa.me`-Link, der WhatsApp mit fertigem Text öffnet. (Server-seitiger WhatsApp-Versand bräuchte die Business-API: Meta-Konto, genehmigte diff --git a/src/pages/anleitung.astro b/src/pages/anleitung.astro index 0cd682e..f2c0fe4 100644 --- a/src/pages/anleitung.astro +++ b/src/pages/anleitung.astro @@ -185,6 +185,9 @@ import Base from '../layouts/Base.astro'; von dort lässt sich das Bild in voller Auflösung herunterladen.
  • Weitergeben per WhatsApp (öffnet WhatsApp mit fertigem Text), über dein eigenes Mailprogramm, oder direkt aus Klarbild heraus per E-Mail an mehrere Empfänger.
  • +
  • Alle auf einmal: Enthält ein Link mehrere Bilder, steht oben auf der Seite + „Alle N Bilder herunterladen" — ein ZIP in voller Auflösung. Sehr große Sammlungen + werden bei 500 MB abgeschnitten; im Paket liegt dann ein Hinweis dazu.
  • Sicher bleiben: Jeder Link läuft von selbst ab (Standard 30 Tage), lässt sich jederzeit abschalten und auf Wunsch mit einem Zugangswort schützen. Das Wort schickst du dann getrennt vom Link — sonst nützt es nichts.
  • diff --git a/src/pages/changelog.astro b/src/pages/changelog.astro index 07b1f47..3fd3b5f 100644 --- a/src/pages/changelog.astro +++ b/src/pages/changelog.astro @@ -21,6 +21,9 @@ import Base from '../layouts/Base.astro'; änderbar), lässt sich jederzeit abschalten und wieder freigeben, auf Wunsch mit einem Zugangswort schützen, und Herunterladen kann man ganz sperren. Suchmaschinen bekommen die Seiten nie zu sehen. Bilder aus privaten Sitzungen lassen sich gar nicht teilen. +
  • Alle Bilder auf einmal: Bei mehreren Bildern steht über der Seite ein Knopf + „Alle N Bilder herunterladen" — ein ZIP in voller Auflösung. Bei zwanzig Bildern + musste der Empfänger vorher zwanzigmal tippen.
  • Übersicht unter Geteilte Links: Aufrufe, Downloads und die Zahl der Besuchenden je Link. Festgehalten wird wann und mit welcher Art Gerät geöffnet wurde — nicht wer. Nach 90 Tagen wird das gelöscht.
  • diff --git a/src/pages/llms.txt.ts b/src/pages/llms.txt.ts index 6030745..fdf92f5 100644 --- a/src/pages/llms.txt.ts +++ b/src/pages/llms.txt.ts @@ -132,6 +132,12 @@ Ein Bild oder eine Sammlung unter \`/s/\` zugänglich machen — der Empf widerrufen). Das Zugangswort geht per **POST**, danach quittiert ein kurzlebiges Cookie je Link. - \`GET /api/s//file?item=\` — Ansichtsfassung (auf 2000 px verkleinert). \`&download=1\` liefert das Original; bei gesperrtem Download 403. \`&thumb=1\` für die Übersicht. +- \`GET /api/s//zip\` — **alle** Bilder des Links als ZIP (voller Auflösung). + Bewusst GET, damit es ein schlichter Link ohne JavaScript ist. Achtet auf Download-Sperre + (403) und Zugangswort (401). Grenzen: 200 Dateien, 500 MB entpackt (danach schließt das + Archiv mit einer \`HINWEIS.txt\`), 5 Pakete je Link und Adresse in 10 Minuten. Wird als + **ein** Download gezählt. Es wird eine Datei nach der anderen gelesen und weitergereicht, + nicht alles auf einmal in den Speicher. - \`GET|POST /api/shares\` — eigene Links auflisten bzw. anlegen. Body: \`{ itemIds[], title?, note?, days?, allowDownload?, password? }\`. \`days\` muss eine Zahl von 0–3650 sein (0 = unbegrenzt); alles andere wird **abgelehnt**, nicht als „unbegrenzt" gedeutet.