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