docs: unique filenames 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:
5 files changed
+91
-1
No files matched your search
@@ -2,6 +2,42 @@
|
||||
|
||||
All notable changes to Klarbild are documented here. Newest first.
|
||||
|
||||
## 2026-08-21 — Unique, chronologically sortable filenames
|
||||
|
||||
### Fixed
|
||||
- **Pictures overwrote each other at Picdrop.** Two badges of the same person in the
|
||||
same format on the same day both came out as `2026-07-23_lea_the-frame.png`, so the
|
||||
second upload silently replaced the first. Reported from real use — Till lost images
|
||||
this way. The name now carries the time down to the second plus a short tag derived
|
||||
from the item id:
|
||||
|
||||
2026-08-20_143207_lea-badge_the-frame_a3f9.jpg
|
||||
|
||||
Two pictures can no longer collide: the tag comes from the item id, which is unique.
|
||||
A belt-and-braces loop appends `-2`, `-3` … if a name is somehow still taken —
|
||||
deliberately a code loop rather than a UNIQUE constraint, because a rejected write
|
||||
would fail an already-paid AI job at the very last step.
|
||||
|
||||
### Added
|
||||
- **Backfill for the existing library** (Admin → Dateinamen). Preview first — it reports
|
||||
how many names are currently duplicated — then apply. It re-stamps from `created_at`
|
||||
and the item id while keeping the motif and format already chosen, so it is idempotent:
|
||||
a second run changes nothing. Stored files are untouched; they live under their id,
|
||||
not their name.
|
||||
- **Re-deliver everything** under the new name, for copies already sitting at Picdrop.
|
||||
The old files stay where they are — deleting a customer's files automatically is the
|
||||
wrong reflex; that stays a manual decision.
|
||||
|
||||
### Changed
|
||||
- Timestamps use **Europe/Berlin** (override with `KLARBILD_TZ`) rather than UTC. A
|
||||
picture taken at 00:30 should not be dated to the previous day.
|
||||
- Naming moved into `src/lib/naming.ts` — dependency-free, like `printlayout.ts`, so the
|
||||
rules are testable and identical in every path (jobs, Telegram, MCP, backfill).
|
||||
The generator strips its own stamp when a result is fed back in as a source, so
|
||||
re-processing cannot accumulate timestamps.
|
||||
- 17 new tests (56 total), including the reported bug as an explicit regression test and
|
||||
a check that lexicographic sorting equals chronological sorting across a DST boundary.
|
||||
|
||||
## 2026-08-20 — Oversize sheets, duplicate images, free labelling, new layout
|
||||
|
||||
### Added
|
||||
|
||||
@@ -52,7 +52,12 @@ Migrationen und Seeds laufen beim Serverstart automatisch. Erststart-Passwörter
|
||||
(sharp + pdf-lib). Browser-Vorschau und Server-PDF benutzen denselben Rechenkern.
|
||||
Auch per Telegram („🖨 Drucken") und MCP (`exact_size`, `print_sheet`).
|
||||
Öffentliche Vorstellungsseite ohne Login: `/vorstellung`.
|
||||
- **Admin:** Key/Picdrop/Modelle/Nutzer/Kostendeckel/Presets/Speicherverwaltung, Picdrop-Diagnose.
|
||||
- **Dateinamen (`src/lib/naming.ts`, abhängigkeitsfrei):** `JJJJ-MM-TT_HHMMSS_<motiv>_<format>_<kürzel>.<ext>`,
|
||||
z. B. `2026-08-20_143207_lea-badge_the-frame_a3f9.jpg`. Zeitstempel vorn → jede Dateiliste sortiert
|
||||
chronologisch; Kürzel aus der Item-ID → zwei Bilder können sich beim Ausliefern **nicht mehr überschreiben**.
|
||||
Zeitzone `KLARBILD_TZ` (Standard `Europe/Berlin`). Nachbenennung der Bibliothek und erneute Auslieferung
|
||||
im Admin unter „Dateinamen" (`src/lib/renames.ts`), idempotent.
|
||||
- **Admin:** Key/Picdrop/Modelle/Nutzer/Kostendeckel/Presets/Speicherverwaltung, Dateinamen, Picdrop-Diagnose.
|
||||
|
||||
## Datenmodell / Migrationen
|
||||
Nummerierte SQL in `migrations/`, beim Start automatisch (kein ORM-Push). Wichtige Spalten:
|
||||
|
||||
@@ -56,6 +56,14 @@ import Base from '../layouts/Base.astro';
|
||||
<li><b>Mehrere auf einmal</b>: Bilder markieren, dann als <b>ZIP laden</b> oder gesammelt <b>in einen Ordner</b>
|
||||
verschieben.</li>
|
||||
</ul>
|
||||
<p class="hinweis"><b>Dateinamen sind eindeutig.</b> Jedes Ergebnis heißt
|
||||
<code>JJJJ-MM-TT_HHMMSS_motiv_format_kürzel</code>, also z. B.
|
||||
<code>2026-08-20_143207_lea-badge_the-frame_a3f9.jpg</code>. Weil Datum und Uhrzeit vorn stehen,
|
||||
sortiert jede Dateiliste — Picdrop, NAS, Finder — von allein chronologisch. Das Kürzel am Ende stammt
|
||||
aus der Kennung des Bildes: <b>zwei Bilder können sich beim Ausliefern nicht mehr überschreiben</b>,
|
||||
auch wenn du am selben Tag zweimal dasselbe Motiv im selben Format erzeugst.
|
||||
(Vor dem 21.08.2026 war das anders — dort ging in so einem Fall das erste Bild verloren.
|
||||
Unter <b>Admin → Dateinamen</b> lässt sich die vorhandene Bibliothek nachträglich umbenennen.)</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
@@ -155,6 +163,12 @@ import Base from '../layouts/Base.astro';
|
||||
<p>Im Admin-Bereich lässt sich eine <b>zweite Sicherung aufs NAS</b> einrichten (SFTP/FTPS, auch über
|
||||
Tailscale) — jedes fertige Bild wird dann zusätzlich gespiegelt und in der Bibliothek mit <b>„NAS ✓"</b>
|
||||
markiert. Mit <b>„Alle vorhandenen Bilder aufs NAS sichern"</b> lassen sich auch ältere Bilder nachsichern.</p>
|
||||
<p>Unter <b>„Dateinamen"</b> lässt sich die vorhandene Bibliothek auf das eindeutige Namensschema bringen.
|
||||
<b>„Bibliothek prüfen"</b> zeigt zuerst, was sich ändern würde und wie viele Namen aktuell doppelt vergeben
|
||||
sind; <b>„Jetzt umbenennen"</b> setzt es um. Die Bilddateien selbst bleiben dabei unangetastet — sie liegen
|
||||
im Speicher unter ihrer Kennung, nicht unter ihrem Namen. Ein zweiter Lauf ändert nichts mehr.
|
||||
<b>„Erneut ausliefern"</b> lädt danach alle schon ausgelieferten Bilder unter dem neuen Namen erneut hoch;
|
||||
die alten Dateien bleiben bei Picdrop liegen und räumst du dort selbst weg.</p>
|
||||
<p>Zum Aufräumen gibt es <b>„Bibliothek & Aufträge zurücksetzen"</b>: löscht alle Bilder, Aufträge und Ordner
|
||||
(Nutzer, Einstellungen, Modelle und Rezepte bleiben) — mit Sicherheitsabfrage. Am besten vorher einmal
|
||||
aufs NAS sichern.</p>
|
||||
|
||||
@@ -9,6 +9,28 @@ import Base from '../layouts/Base.astro';
|
||||
</div>
|
||||
<p class="lead">Was in Klarbild neu ist. Neueste Änderungen oben.</p>
|
||||
|
||||
<section>
|
||||
<div class="ver"><span class="tag">21.08.2026</span><h2>Eindeutige Dateinamen — Bilder überschreiben sich nicht mehr</h2></div>
|
||||
<ul>
|
||||
<li><b>Behoben: Bilder haben sich bei Picdrop gegenseitig überschrieben.</b> Wer am selben Tag zweimal
|
||||
dasselbe Motiv im selben Format erzeugt hat — etwa zwei Badges —, bekam zweimal denselben Dateinamen
|
||||
(<code>2026-07-23_lea_the-frame.png</code>). Beim Ausliefern ersetzte das zweite Bild dann stillschweigend
|
||||
das erste. Das kann jetzt nicht mehr passieren.</li>
|
||||
<li><b>Der neue Name:</b> <code>2026-08-20_143207_lea-badge_the-frame_a3f9.jpg</code> — also Datum, Uhrzeit
|
||||
auf die Sekunde, Motiv, Format und ein kurzes Kürzel. Weil der Zeitstempel vorn steht, sortiert
|
||||
<b>jede Dateiliste von allein chronologisch</b> — bei Picdrop, im Finder, auf dem NAS. Das Kürzel stammt
|
||||
aus der Bild-Kennung und ist damit garantiert eindeutig.</li>
|
||||
<li><b>Uhrzeit in deutscher Zeit</b>, nicht in UTC. Ein Bild von 0:30 Uhr trägt jetzt das richtige Datum
|
||||
und nicht mehr das des Vortags.</li>
|
||||
<li><b>Rückwirkend für die ganze Bibliothek:</b> Unter <b>Admin → Dateinamen</b> zeigt „Bibliothek prüfen"
|
||||
erst an, was sich ändern würde (samt der Zahl der aktuell doppelt vergebenen Namen); „Jetzt umbenennen"
|
||||
setzt es um. Die Bilddateien selbst bleiben dabei unangetastet. Ein zweiter Lauf ändert nichts mehr.</li>
|
||||
<li><b>„Erneut ausliefern"</b> lädt alle schon ausgelieferten Bilder unter dem neuen Namen erneut hoch.
|
||||
Die alten Dateien bleiben am Ziel liegen — die räumst du bei Picdrop selbst weg, damit nichts
|
||||
versehentlich beim Kunden verschwindet.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="ver"><span class="tag">20.08.2026</span><h2>Übergroße Bilder, Bild duplizieren, freie Beschriftung & neuer Aufbau</h2></div>
|
||||
<ul>
|
||||
|
||||
@@ -120,6 +120,19 @@ Werkzeug \`klarbild\` (mcp/klarbild-mcp.mjs), nutzt denselben API-Token:
|
||||
- exact_size — OHNE KI: ein Bild exakt auf ein Maß bringen, Datei lokal speichern.
|
||||
- print_sheet — OHNE KI: Druckbogen (mehrere Bilder × Stückzahl, Schnittmarken) als PDF lokal speichern.
|
||||
|
||||
## Dateinamen der Ergebnisse
|
||||
Schema: \`JJJJ-MM-TT_HHMMSS_<motiv>_<format>_<kürzel>.<ext>\` — z. B. \`2026-08-20_143207_lea-badge_the-frame_a3f9.jpg\`.
|
||||
- Der Zeitstempel steht vorn, deshalb sortiert jede Dateiliste (Picdrop, NAS, Finder) von allein chronologisch.
|
||||
- Das vierstellige Kürzel stammt aus der Item-ID. Dadurch sind zwei Bilder **nie** namensgleich —
|
||||
auch nicht bei gleichem Motiv, gleichem Format und gleichem Tag. (Vor dem 21.08.2026 fehlten Uhrzeit
|
||||
und Kürzel; gleichartige Bilder desselben Tages überschrieben sich beim Ausliefern.)
|
||||
- Zeitzone: \`KLARBILD_TZ\`, Standard \`Europe/Berlin\`.
|
||||
- Motiv wird aus dem Ursprungsnamen geschält (Datum, UUIDs und der eigene Stempel fallen weg);
|
||||
generische Namen wie \`IMG\`, \`foto\`, \`telegram\` werden zu \`klarbild\`.
|
||||
- Nachbenennung der ganzen Bibliothek: Admin → „Dateinamen" bzw.
|
||||
\`POST /api/admin/storage { action: 'rename_preview' | 'rename_apply' | 'redeliver_all' }\` (nur per Login-Session,
|
||||
nicht per API-Token). Idempotent — Stempel aus \`created_at\`, Kürzel aus der Item-ID.
|
||||
|
||||
## Auslieferung
|
||||
- Picdrop = SFTP/FTPS-Ziel; Galerie = Unterordner unter dem Basispfad. Voller Pfad = Basisordner + Galerie
|
||||
(wird erst beim Ausliefern zusammengesetzt). Standard-Galerie „POSTER LEA"; „The Frame" → „TheFrame-Backgrounds".
|
||||
|
||||
Reference in new issue
Block a user