1a08b4a8cd0d03db1acc08d5f7424194fe599fa0
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 | Kompletní DB schéma — všechny tabulky, sloupce, indexy, constrainty |
| 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
# 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
- Fotky bez EXIF (7 % fotek) — importovat s mtime / odmítnout / označit?
- Shoda
sha256_pixels— přeskočit / sloučit metadata / uložit oba? - Storage layout — in-place /
archiv/YYYY/MM// content-addressable? - Propojení tabulek skupiny 1 (photos) a skupiny 2 (zaloha_obrazku) — zatím žádný FK
- Fotky 2013–2021 — velký propad, chybí zdroje (mobily, iCloud?)
- 4 210 fotek z 2022 bez kamery — pravděpodobně hromadný export z iCloudu (25.9.2023)
Description
Languages
Python
100%