# 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?