# FotkyBuzalkovi

Systém pro organizaci a tagování ~200 000 rodinných fotek. Lokální nasazení, bez cloudu.

## Kde jsme

- **85 833 fotek** zpracovaných v DB (EXIF, hashe, metadata)
- **39 961 unikátních souborů** fyzicky zálohovaných na Tower1
- Sběr fotek běží ze dvou serverů (tower, Tower1) i z Windows PC
- Průzkumný Streamlit dashboard hotový (`run_webreport.py`)

## Stack

- **PostgreSQL** (192.168.1.76:5432) — jediná databáze, JSONB nahrazuje MongoDB
- **Filesystem** — fotky zůstávají na disku, v DB jen cesty a metadata
- **Python** — veškeré skripty (ExifRead pro EXIF, imagehash pro pHash, blake3 pro zálohy)

## Struktura projektu

```
FotkyBuzalkovi/
├── 00 PictureCollector/     # Sběr fotek ze všech počítačů na Tower1
│   ├── collect_pictures.py          # Hlavní skript (Linux, běží na tower + Tower1)
│   ├── collect_pictures_windows.py  # Windows verze (pro libovolný PC v síti)
│   ├── create_tables.py             # Vytvoření tabulek zaloha_obrazku + zdrojove_soubory
│   ├── verify_tables.py             # Ověření struktury tabulek
│   ├── clear_tables.py              # TRUNCATE obou tabulek (pozor!)
│   ├── stats.py                     # Statistiky sběru
│   ├── ssh_deploy.py                # Nasazení skriptu na tower
│   ├── ssh_deploy_tower1.py         # Nasazení skriptu na Tower1
│   ├── ssh_install_deps.py          # Instalace závislostí na tower
│   ├── ssh_install_tower1.py        # Instalace závislostí na Tower1
│   ├── ssh_check_mount.py           # Kontrola NFS mountu
│   ├── ssh_check_tower1.py          # Kontrola Tower1
│   └── ssh_find_userscripts.py      # Hledání Unraid user scriptů
│
├── 20 PrůzkumFotek/         # Průzkum a vizualizace dat
│   ├── report.py                    # Streamlit dashboard (spouštět přes run_webreport.py)
│   └── analyze_all.py               # Konzolová analýza (jednorázová)
│
├── 30 SběrDat/              # Zpracování fotek — EXIF parsing, import do DB
│   ├── explore_photos.py            # Explorační skript (hashe, EXIF, IPTC, XMP)
│   ├── 10_collect_metadata.py       # Sběr metadat z fotek
│   ├── import_to_db.py              # Import do tabulky photos
│   ├── create_schema.py             # Vytvoření tabulek photos/tags/photo_tags
│   └── photo_exploration.json       # Výstup exploreru (7 demo fotek)
│
├── demo_fotky/              # 7 testovacích fotek (iPhone, screenshot, sirotek)
├── output/                  # Výstupy skriptů
│   └── 10_metadata.jsonl            # Nasbíraná metadata
├── trash/                   # Zastaralé skripty (test_mongo.py, test_db_connection.py)
│
├── run_webreport.py         # Spustí Streamlit dashboard (1 klik v PyCharm)
├── .env                     # Konfigurace (hesla)
├── .gitignore
│
├── NAVRH.md                 # → viz docs/NAVRH.md (architektonická rozhodnutí, hashe, metadata)
└── SCHEMA.md                # → viz docs/SCHEMA.md (kompletní DB schéma)
```

## Detailní dokumentace

| Soubor | Obsah |
|--------|-------|
| [SCHEMA.md](SCHEMA.md) | Kompletní DB schéma — všechny tabulky, sloupce, indexy, constrainty |
| [NAVRH.md](NAVRH.md) | Architektonická rozhodnutí, 4 úrovně hashů, EXIF/IPTC/XMP, workflow importu |

## Infrastruktura

| Server | IP | Role |
|--------|----|------|
| **tower** | 192.168.1.76 | Hlavní NAS, PostgreSQL, spouští skripty |
| **Tower1** | 192.168.1.50 | Archivní NAS, fyzická záloha fotek (`/mnt/user/ZalohaVsechObrazku`) |

SSH klíče sdílené mezi servery. Z tower přístup na Tower1 přes NFS mount.

## Rychlý start

```powershell
# Spustit dashboard
python run_webreport.py

# Nasadit collect_pictures na server
python "00 PictureCollector/ssh_deploy.py"
python "00 PictureCollector/ssh_deploy_tower1.py"

# Spustit sběr fotek z Windows PC
python "00 PictureCollector/collect_pictures_windows.py"
```

## Otevřené otázky

1. Fotky bez EXIF (7 % fotek) — importovat s mtime / odmítnout / označit?
2. Shoda `sha256_pixels` — přeskočit / sloučit metadata / uložit oba?
3. Storage layout — in-place / `archiv/YYYY/MM/` / content-addressable?
4. Propojení tabulek skupiny 1 (photos) a skupiny 2 (zaloha_obrazku) — zatím žádný FK
5. Fotky 2013–2021 — velký propad, chybí zdroje (mobily, iCloud?)
6. 4 210 fotek z 2022 bez kamery — pravděpodobně hromadný export z iCloudu (25.9.2023)
