diff --git a/docs/roadmap-image-dedup.md b/docs/roadmap-image-dedup.md new file mode 100644 index 0000000..cc2a32c --- /dev/null +++ b/docs/roadmap-image-dedup.md @@ -0,0 +1,37 @@ +# Roadmap: Bild-Deduplizierung & Medien-Hygiene + +## Ziele +- Speicherverbrauch reduzieren +- Medienbestand konsistent halten +- Pipeline stabilisieren (keine Mehrfach-Uploads und -Speicherungen) + +## Vorgehen (sicher und reversibel) +1. **Index aufbauen (Read-Only):** + - Alle Bilder (`.jpg/.jpeg/.png/.webp/.gif`) in definierten Verzeichnissen scannen + - Für jede Datei: `sha256` (Byte-Hash) + `pHash` (perzeptuell) berechnen + - Ergebnis als SQLite-Index + CSV-Report speichern + +2. **Kanonisierung & Referenzen prüfen:** + - Pro Duplikatgruppe genau **eine** kanonische Datei wählen (größte/neueste) + - Alle internen Referenzen (DB/JSON) testweise auf Kanon aktualisieren (Dry-Run) + +3. **Speicher sparen ohne Risiko:** + - Nicht-kanonische Dateien durch **Hardlinks** auf den Kanon ersetzen (gleiches FS) + - Alternativ: nur löschen, wenn Referenzen **sicher** auf Kanon zeigen + +4. **Prävention für die Zukunft:** + - Beim Speichern: **Content-Addressed Storage** (`.`) + - In DB ein `content_hash`-Feld mit **Unique-Constraint** + - Vor jedem Speichern/Upload: Hash lookup → vorhandene Datei wiederverwenden + +## Akzeptanzkriterien +- Report listet alle Duplikatgruppen mit Pfaden und Größenersparnis +- Dry-Run zeigt geplante Änderungen ohne Schreibzugriff +- Nach „Anwenden“ verweisen alle Referenzen auf die kanonische Datei +- Re-Run findet **keine** Duplikate mehr (idempotent) +- Rollback möglich via Backup der Reports/Indexdatei + +## Metriken +- Anzahl Bilder vorher/nachher +- Ersparter Speicher (MB/GB) +- Anzahl gruppierter Duplikate