2026-05-27 12:55:06 +02:00
w22
2026-05-27 12:50:13 +02:00
w22
2026-05-27 12:50:13 +02:00
2026-05-24 07:45:59 +02:00
w22
2026-05-27 12:55:06 +02:00
2026-05-19 20:10:11 +02:00
w22
2026-05-22 17:43:15 +02:00
2026-05-24 07:59:38 +02:00
2026-05-26 22:26:51 +02:00
2026-05-26 22:26:51 +02:00
w22
2026-05-26 22:43:58 +02:00
2026-05-24 07:59:25 +02:00
2026-05-24 07:59:25 +02:00
2026-05-26 09:16:42 +02:00
2026-05-24 07:59:38 +02:00
w22
2026-05-26 22:43:58 +02:00

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

  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 20132021 — velký propad, chybí zdroje (mobily, iCloud?)
  6. 4 210 fotek z 2022 bez kamery — pravděpodobně hromadný export z iCloudu (25.9.2023)
S
Description
No description provided
Readme 72 MiB
Languages
Python 100%