228 lines
10 KiB
Markdown
228 lines
10 KiB
Markdown
# FotkyBuzalkovi — pracovní deník
|
||
|
||
> Živý dokument. Zapisujeme sem co jsme zjistili, co jsme rozhodli a co je na řadě.
|
||
> Technická reference → `CONTEXT.md`, návrh architektury → `NAVRH.md`.
|
||
|
||
---
|
||
|
||
## Session 2026-06-04
|
||
|
||
### Stav DB na začátku
|
||
|
||
| Tabulka | Řádky |
|
||
|---------|-------|
|
||
| `zaloha_obrazku` | 1 717 182 |
|
||
| `zdrojove_soubory` | 3 573 846 |
|
||
| `photos` | 1 717 175 |
|
||
| `photo_errors` | 3 185 319 |
|
||
|
||
Všechny fotky mají `processing_status = 'pending'` — pipeline doběhla, další zpracování nezačalo.
|
||
|
||
### Co jsme zjistili
|
||
|
||
**Problém 1 — V záloze je spousta odpadu, ne jen rodinné fotky.**
|
||
Pipeline sebrala vše co má příponu `.jpg/.jpeg` — včetně:
|
||
- PhotoPrism cache thumbnailů (`appdata/photoprism/cache/`) — 229 521 ks, <10 kB
|
||
- Plex / Immich cache
|
||
- MP3 a LP obaly
|
||
- DVD obaly, eBook obálky
|
||
- ABC vystřihovánky (skenované na 1200 DPI → soubory 60–100 MB)
|
||
- Reprodukce obrazů z torrentů (Raffael, Rembrandt... v muzejní kvalitě)
|
||
- Stažené obrázky z webu (Dropbox/!!!Days/Stefajir/...)
|
||
- Windows AppData (Kindle covers, .NET watermark...)
|
||
|
||
**Problém 2 — Rok pořízení je hodně porušený.**
|
||
- Rok 2024 má 985 754 fotek (>57 % všech) — zřejmě chybný fallback na mtime místo EXIF
|
||
- Rok 1863, 2031–4501 — garbage v EXIF
|
||
- Rok 2026 má 93 492 — suspektní
|
||
|
||
**Sloupec `wanted`:**
|
||
Přidán `photos.wanted BOOLEAN NOT NULL DEFAULT FALSE` — všech 1 717 175 fotek má FALSE.
|
||
Účel: budeme označovat fotky které chceme zachovat / zpracovat.
|
||
|
||
### Nástroje
|
||
|
||
- `00 PictureCollector/preview_sample.py` — zobrazí náhled fotek podle ID
|
||
Použití: `python preview_sample.py 101 202 303 ...`
|
||
Claude vybere ID přes MCP dotazy, předá příkaz ke spuštění.
|
||
|
||
- `00 PictureCollector/migrate_add_wanted.py` — přidal sloupec `wanted` (idempotentní)
|
||
|
||
### Rozhodnutí
|
||
|
||
#### Pravidla vyloučení cest — část 1 (2026-06-04)
|
||
|
||
Tyto cesty **nechceme** — `wanted` zůstane FALSE, nezpracovávat:
|
||
|
||
| Vzor cesty (obsahuje) | Důvod | Počet |
|
||
|---|---|---|
|
||
| `Torrents/Downloads/OOPS!!! International` | porno screenshoty | ~7 105 |
|
||
| `Torrents/Downloads/Tampons Pads Period` | porno | ~9 600 |
|
||
| `#ColdData/Porno/` | porno screenlists | — |
|
||
| `Porno1/` | porno | ~2 730 |
|
||
| `#ColdData/000 TORENT OBRAZKY/National Geographic Wallpapers` | stažené wallpapery | ~7 188 |
|
||
| `#ColdData/000 TORENT OBRAZKY/[OnlyFans]` | OnlyFans | ~1 377 |
|
||
| `#ColdData/000 TORENT OBRAZKY/Great Painters` | reprodukce obrazů | — |
|
||
| `UltraCC/` a obsahuje `/jpg` | Hot Wheels katalog a jiné torrent obrázky | ~3 484 |
|
||
| `Magentic/Runtime/UserPhotos/css` | webové ikonky | ~1 034 |
|
||
| `.Icecream Ebook Reader/` | obrázky z epub knih | — |
|
||
| `photoprism/sidecar/` | XMP sidecar soubory | — |
|
||
|
||
> Otevřené: appdata/photoprism/cache, Immich thumbs, MP3/LP obaly, eBooks — vyřeší se v další části pravidel.
|
||
|
||
### Schéma — nové sloupce v `photos`
|
||
|
||
| Sloupec | Typ | Popis |
|
||
|---|---|---|
|
||
| `wanted` | `BOOLEAN NOT NULL DEFAULT FALSE` | chceme tuto fotku zachovat/zpracovat |
|
||
| `category` | `VARCHAR(100)` | kategorie: Fotopast, Rodina, Skeny, … |
|
||
|
||
### Označené kategorie
|
||
|
||
| Kamera / kritérium | wanted | category | Počet |
|
||
|---|---|---|---|
|
||
| BolyMedia SG520 | TRUE | Fotopast | 42 688 |
|
||
| Apple iPhones + iPad (viz update_wanted.py) | TRUE | Rodina | — |
|
||
| 15 kompaktů (Panasonic, Canon, GoPro, …) | TRUE | Rodina | — |
|
||
| Samsung + profesionální (Nikon D5/D4…) | TRUE | Rodina | — |
|
||
| 32 dalších fotoaparátů (update_wanted_batch2.py) | TRUE | Rodina | 13 056 |
|
||
|
||
### Vyloučené skenery (wanted=FALSE, category='Skener-nechceme')
|
||
|
||
| Skener | Počet | Poznámka |
|
||
|---|---|---|
|
||
| CanoScan 8800F (`make IS NULL`) | 1 567 | Skeny, nechceme |
|
||
|
||
> Ostatní skenery (LiDE 300/210/100, 4400F, HP Scanjet G2710, pls3015, djf300/2100/2200, MP210/190) — **dosud nerozhodnuto**.
|
||
|
||
### Na řadě
|
||
|
||
- [ ] Prozkoumat co přesně je v záloze — jaký podíl jsou skutečné rodinné fotky
|
||
- [ ] Rozhodnout jak filtrovat odpad (path blacklist? size? absence kamery?)
|
||
- [ ] Vyřešit problém s roky — proč 57 % fotek padá do 2024
|
||
- [ ] Označit první várku fotek jako `wanted = TRUE`
|
||
|
||
---
|
||
|
||
## Session 2026-06-05
|
||
|
||
### Nástroje — nový web preview na Toweru
|
||
|
||
- **`00 PictureCollector/preview_server.py`** — HTTP server běžící v Docker kontejneru
|
||
`python-runner` na Toweru. Renderuje thumbnaily lokálně (rychlé), má lightbox
|
||
(klik = plné rozlišení přes `/image?id=`).
|
||
- URL: `http://192.168.1.76:8766/preview?ids=101,202,303&thumb=320`
|
||
- Kontejner má mount `/mnt/remotes/TOWER1.LAN_ZalohaVsechObrazku` → `/mnt/ZalohaVsechObrazku:ro`
|
||
- Knihovny v image: `psycopg` (v3!), `Pillow` (zabakováno přes `docker commit`)
|
||
- **MCP konektor `fotky-buzalkovi`** — `query/tables/describe_table/stats`. SQL dotazy
|
||
pouštím přímo, bez mezikroku.
|
||
|
||
### Pracovní metodika (důležité!)
|
||
|
||
- **NEoznačovat nechtěné proaktivně** — vždy jen po explicitním pokynu uživatele.
|
||
- Před každým hromadným označením složky za odpad: **ověřit jedinečnost přes
|
||
pixel/file-hash** (`sha256_pixels`, `sha256_file`). V cache/odpadních složkách se
|
||
můžou skrývat unikátní rodinné fotky (viz „Maminka" níže).
|
||
- UPDATE pouštět vždy jako **jedna session, autocommit** — paralelní běhy způsobují
|
||
deadlock. Před každým během kontrola `pg_stat_activity` na zaseklé UPDATE.
|
||
- Marker skripty: `mark_*.py` v `00 PictureCollector/` (idempotentní přes filtr
|
||
`category IS DISTINCT FROM ...`).
|
||
|
||
### Kategorie (rozšířený číselník)
|
||
|
||
| category | wanted | význam |
|
||
|---|---|---|
|
||
| `Rodina` | TRUE | rodinné fotky |
|
||
| `Kamaradi` | TRUE | fotky kamarádů (Jan Luxemburk – Xperie) |
|
||
| `Fotopast` | TRUE | fotopast |
|
||
| `Odpad-cache` | FALSE | cache aplikací, obaly, web obrázky |
|
||
| `Odpad-torrent` | FALSE | stažené torrenty (komiksy, vystřihovánky, software) |
|
||
| `Odpad-sken` | FALSE | skenované publikace (série stránek) |
|
||
| `Odpad-obaly` | FALSE | CD inlety/obaly s EXIF |
|
||
| `Odpad-dokumenty` | FALSE | skeny dokumentů/smluv |
|
||
| `Odpad-screenshot` | FALSE | screenshoty z her/aplikací |
|
||
| `Porno` | FALSE | porno |
|
||
| `Skener-nechceme` | FALSE | skenery (viz session 2026-06-04) |
|
||
|
||
### Zpracované velké složky
|
||
|
||
| Složka | Fotek | Výsledek |
|
||
|---|---:|---|
|
||
| **Tower/appdata** | 1 006 032 | odpad (Odpad-cache); **zachráněno 2 274** fotek Maminky (iPhone 12) z `photoprism/sidecar/Maminka` → Rodina |
|
||
| **Tower/Sabnzbd** | 48 442 | celé odpad (usenet downloads, profi Nikon D5/D4 = stažené, ne rodina) |
|
||
| **Tower/Torrents + Tower1/Torrents** | 100 938 | celé odpad (Odpad-torrent) |
|
||
| **Tower1/#ColdData** | 84 374 | roztříděno 100 %, viz níže |
|
||
| **Tower1/#Synology** | 66 462 | rozpracováno (~95 %), viz níže |
|
||
|
||
### #Synology — rozpracováno (Public/...)
|
||
|
||
Velký rodinný NAS fotoarchiv. Hash-check potvrdil, že `HD02#FOTKY` je z 99,6 %
|
||
**unikátní** (jen 132 fotek má kopii jinde) — není to duplikát jiné zálohy.
|
||
|
||
**Rodina (chceme) — HOTOVO:**
|
||
- `#SERVER/Y/HD02#FOTKY` (30 789) — hlavní archiv 2008–2020
|
||
- `#SERVER/Y/HD02#FOTKY MAMKA` (1 167)
|
||
- `DropboxFotky` (14 882)
|
||
- `HD02#DVD OSOBNI` (5 834)
|
||
- `Fotky` (2 138)
|
||
- `#SERVER/Y/WEBS` galerijní alba (906) — starý web Buzalka.com/Gallery2,
|
||
alba akcí (USA 2006, lyžování Stoderzinken 2007, Orlík, Střetávka…)
|
||
|
||
**Odpad — HOTOVO:**
|
||
- `#SERVER/Y/WEBS` zbytek (2 153) — web šablony/skiny/moduly Buzalka.cz e-shop → Odpad-cache
|
||
|
||
**JEŠTĚ NEROZHODNUTO (zbývá ~9 200):**
|
||
- `AFotkyFotky` (4 550, 2 245 EXIF) — pravděpodobně fotky
|
||
- `#SERVER/JNJ` (1 835, 45 modelů) — smíšené
|
||
- `#SERVER/E` (1 629) — smíšené
|
||
- `VideoMichalkaiCloud` (277) — Michalka iCloud, pravděpodobně rodina
|
||
- `GoPro` (70) — pravděpodobně rodina
|
||
- drobnosti (`###StatSoft`, `#SOFTWARE`, `HD02#AUDIO CD A DVD`, `#Kurzy`, `X`…) ~220 → odpad
|
||
|
||
### #ColdData — detailní rozpad
|
||
|
||
**Rodina (chceme):**
|
||
- `SynologyMaly/photo` (24 198) + `SynologyMaly/Public/Dropbox` (447) — rodinný archiv 1998–2015 (Canon S40/A40/IXUS, Nikon D80, iPhony, Lumia). Unikátní (bez duplikátů).
|
||
- `VladkoSoubory` (871) — syn Vladimír Buzalka ml.
|
||
- `DedupPhotos` (285) — Samsung S7 Edge 2019, ověřeno unikátní.
|
||
- `LTBS` (40) — rodina (názvy souborů obsahují BUZALKA).
|
||
- `Tatinek U/.../Fractal` (19) — iPhone 13, táta.
|
||
- `pomoc` Samsung GT-S5230 (26) — rodina.
|
||
|
||
**Kamaradi (chceme):** `Honza fotky z Xperie` (2 047) — kamarád Jan Luxemburk.
|
||
|
||
**Odpad:**
|
||
- `Porno`, `Porno1`, `MadelineIsWicked` → Porno
|
||
- `000 TORENT OBRAZKY`, `Qnap_nepotrebne` (X-Men komiksy, učebnice, software) → Odpad-torrent
|
||
- `SynologyMaly/Public/X` (9 134, série e0xxx skenů) → Odpad-sken
|
||
- `Qnap` (MP3 obaly, downloads, 81 EXIF CD inletů) → Odpad-cache/Odpad-obaly
|
||
- `Museum of Modern Art NY`, hudební alba, Salvador Dali, eBooky, Truecrypt, `DropBox` (software help obrázky) → Odpad-cache
|
||
- `Tatinek U` Compass dokumenty + `212` smlouvy → Odpad-dokumenty; DarthAnihilator/Screenshots → Odpad-screenshot
|
||
- `pomoc` LegalPorno/Kink snapshoty (28) → Porno
|
||
|
||
**Výsledek #ColdData:** Rodina 25 889 · Kamaradi 2 047 · Porno 23 502 · Odpad-torrent 21 300 · Odpad-sken 9 134 · Odpad-cache 2 269 · ostatní odpad 228.
|
||
|
||
### Poučení
|
||
|
||
- **Cache/download složky ≠ čistý odpad.** PhotoPrism si do `sidecar/` ukládá unikátní
|
||
JPEG kopie fotek, jejichž originály v záloze nejsou → před smazáním vždy hash-check.
|
||
- Camera-rules (např. „všechny Nikon D5/D4 = Rodina") dávají **false-positives** ve
|
||
stažených složkách → path má přednost, ale ověřit obsah.
|
||
|
||
### Na řadě
|
||
|
||
- [ ] **Dokončit #Synology** — zbývá ~9 200: `AFotkyFotky`, `JNJ`, `E`,
|
||
`VideoMichalkaiCloud`, `GoPro` (náhledy → rozhodnout), drobnosti → odpad
|
||
- [ ] Velké zbývající: `TW22/D` (63 706), `Tower1/#Pomoc` (34 500), `Tower1/#Synologymaly` (29 934)
|
||
- [ ] Dokončit Canony (a pak ostatní značky foťáků)
|
||
- [ ] „BEZ KAMERY" skupina (path-based)
|
||
|
||
---
|
||
|
||
## Backlog otevřených otázek
|
||
|
||
1. Co s "sirotky" bez EXIF — `mtime` / odmítnout / označit?
|
||
2. Při shodě `sha256_pixels` — přeskočit / sloučit metadata / uložit oba?
|
||
3. Storage layout — nechat in-place / `archiv/YYYY/MM/` / content-addressable?
|
||
4. Jak poznat "rodinná fotka" od odpadu bez ruční kontroly?
|