docs: download-all in changelog, help page, README and llms.txt

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BNhLunz586g6DeYMa7Qsd1
This commit is contained in:
tillandClaude Opus 5 committed 2026-09-01 04:05:47 +00:00
1 parent 7d53962543
commit ef2e945080
5 files changed
+21 -1

No files matched your search

+6
View File
@@ -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 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 image: swapping in another item id on a valid link returns 404. Private-session
results can never be shared. 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 - **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 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 text prepared. The WhatsApp Business API needs a Meta account, approved templates and
+3 -1
View File
@@ -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 `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* 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 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/<slug>/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 - **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 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 Text öffnet. (Server-seitiger WhatsApp-Versand bräuchte die Business-API: Meta-Konto, genehmigte
+3
View File
@@ -185,6 +185,9 @@ import Base from '../layouts/Base.astro';
von dort lässt sich das Bild in voller Auflösung herunterladen.</li> von dort lässt sich das Bild in voller Auflösung herunterladen.</li>
<li><b>Weitergeben</b> per <b>WhatsApp</b> (öffnet WhatsApp mit fertigem Text), über dein eigenes <li><b>Weitergeben</b> per <b>WhatsApp</b> (öffnet WhatsApp mit fertigem Text), über dein eigenes
Mailprogramm, oder direkt aus Klarbild heraus per E-Mail an mehrere Empfänger.</li> Mailprogramm, oder direkt aus Klarbild heraus per E-Mail an mehrere Empfänger.</li>
<li><b>Alle auf einmal</b>: Enthält ein Link mehrere Bilder, steht oben auf der Seite
<b>„Alle N Bilder herunterladen"</b> — ein ZIP in voller Auflösung. Sehr große Sammlungen
werden bei 500 MB abgeschnitten; im Paket liegt dann ein Hinweis dazu.</li>
<li><b>Sicher bleiben</b>: Jeder Link läuft von selbst ab (Standard 30 Tage), lässt sich jederzeit <li><b>Sicher bleiben</b>: Jeder Link läuft von selbst ab (Standard 30 Tage), lässt sich jederzeit
<b>abschalten</b> und auf Wunsch mit einem <b>Zugangswort</b> schützen. Das Wort schickst du dann <b>abschalten</b> und auf Wunsch mit einem <b>Zugangswort</b> schützen. Das Wort schickst du dann
getrennt vom Link — sonst nützt es nichts.</li> getrennt vom Link — sonst nützt es nichts.</li>
+3
View File
@@ -21,6 +21,9 @@ import Base from '../layouts/Base.astro';
änderbar), lässt sich jederzeit <b>abschalten</b> und wieder freigeben, auf Wunsch mit einem änderbar), lässt sich jederzeit <b>abschalten</b> und wieder freigeben, auf Wunsch mit einem
<b>Zugangswort</b> schützen, und Herunterladen kann man ganz sperren. Suchmaschinen bekommen die <b>Zugangswort</b> schützen, und Herunterladen kann man ganz sperren. Suchmaschinen bekommen die
Seiten nie zu sehen. Bilder aus privaten Sitzungen lassen sich gar nicht teilen.</li> Seiten nie zu sehen. Bilder aus privaten Sitzungen lassen sich gar nicht teilen.</li>
<li><b>Alle Bilder auf einmal:</b> Bei mehreren Bildern steht über der Seite ein Knopf
<b>„Alle N Bilder herunterladen"</b> — ein ZIP in voller Auflösung. Bei zwanzig Bildern
musste der Empfänger vorher zwanzigmal tippen.</li>
<li><b>Übersicht unter <a href="/teilen">Geteilte Links</a>:</b> Aufrufe, Downloads und die Zahl der <li><b>Übersicht unter <a href="/teilen">Geteilte Links</a>:</b> Aufrufe, Downloads und die Zahl der
Besuchenden je Link. Festgehalten wird <b>wann</b> und mit welcher Art Gerät geöffnet wurde — Besuchenden je Link. Festgehalten wird <b>wann</b> und mit welcher Art Gerät geöffnet wurde —
nicht <b>wer</b>. Nach 90 Tagen wird das gelöscht.</li> nicht <b>wer</b>. Nach 90 Tagen wird das gelöscht.</li>
+6
View File
@@ -132,6 +132,12 @@ Ein Bild oder eine Sammlung unter \`/s/<slug>\` zugänglich machen — der Empf
widerrufen). Das Zugangswort geht per **POST**, danach quittiert ein kurzlebiges Cookie je Link. widerrufen). Das Zugangswort geht per **POST**, danach quittiert ein kurzlebiges Cookie je Link.
- \`GET /api/s/<slug>/file?item=<uuid>\` — Ansichtsfassung (auf 2000 px verkleinert). - \`GET /api/s/<slug>/file?item=<uuid>\` — Ansichtsfassung (auf 2000 px verkleinert).
\`&download=1\` liefert das Original; bei gesperrtem Download 403. \`&thumb=1\` für die Übersicht. \`&download=1\` liefert das Original; bei gesperrtem Download 403. \`&thumb=1\` für die Übersicht.
- \`GET /api/s/<slug>/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?, - \`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); days?, allowDownload?, password? }\`. \`days\` muss eine Zahl von 0–3650 sein (0 = unbegrenzt);
alles andere wird **abgelehnt**, nicht als „unbegrenzt" gedeutet. alles andere wird **abgelehnt**, nicht als „unbegrenzt" gedeutet.