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