4.7 KiB
FotkyBuzalkovi — kontext pro import do nové konverzace
Přečti tento soubor na začátku konverzace. Obsahuje vše potřebné pro navázání bez opakování.
Co je projekt
Systém pro zálohu, organizaci a tagování ~200 000 rodinných fotek. Lokální provoz, bez webových uživatelů. Rodina vlastní Nikon D80, naposledy foceno Vánoce 2025.
Infrastruktura
| Server | IP | Hostname | Role |
|---|---|---|---|
| tower | 192.168.1.76 | tower |
hlavní NAS (Unraid), spouští skripty |
| tower1 | 192.168.1.50 | Tower1 |
archivní NAS (Unraid), fyzická záloha fotek |
SSH: root přístupy — tower: root/7309208104, tower1: root/Vlado7309208104++
SSH klíče: sdílené mezi tower a tower1.
PostgreSQL: 192.168.1.76:5432, user vladimir.buzalka, heslo Vlado7309208104++, DB fotky_buzalkovi
Záloha fotek: vždy fyzicky na Tower1 → /mnt/user/ZalohaVsechObrazku
- Z tower přes NFS:
/mnt/remotes/TOWER1.LAN_ZalohaVsechObrazku - Z Windows PC přes UNC:
\\Tower1\ZalohaVsechObrazku
Klíčová architektonická rozhodnutí
- Databáze: pouze PostgreSQL + filesystem (MongoDB a Redis vyřazeny)
- Identita fotky: 3 úrovně hashů —
sha256_file(byte),sha256_pixels(pixely),phash(vizuální podobnost). BLAKE3 pro deduplikaci zálohy. - EXIF parser: ExifRead je primární (Pillow má GPS bug)
- Embedding (CLIP/pgvector) — odloženo na později
DB tabulky v fotky_buzalkovi
Starší (z předchozí fáze)
photos— sha256_file UNIQUE, phash, EXIF JSONB, indexytags,photo_tags— tagování
Zálohovací pipeline (vytvořeno 2026-05-24)
zaloha_obrazku
id SERIAL PK, blake3_hash VARCHAR(64) UNIQUE, cesta_zalohy TEXT,
nazev_souboru VARCHAR(512), velikost BIGINT, datum_kopirovani TIMESTAMP
zdrojove_soubory
id SERIAL PK, hostname VARCHAR(255), cesta_zdroje TEXT,
nazev_souboru VARCHAR(512), velikost BIGINT, datum_nalezeni TIMESTAMP,
blake3_hash VARCHAR(64), zaloha_id INTEGER → FK zaloha_obrazku(id)
UNIQUE(hostname, cesta_zdroje)
Zálohovací skripty
Linux — servery (Unraid)
Soubor: 00 PictureCollector/collect_pictures.py
Nasazen jako Unraid User Script "CollectPictures" na obou serverech:
/boot/config/plugins/user.scripts/scripts/CollectPictures/
Logika:
- Skenuje
/mnt/user/rekurzivně - Přeskočí adresáře v
EXCLUDED_DIR_NAMES(case-insensitive):ZalohaVsechObrazku,ZalohaVšechObrázků - Pro každý JPG/JPEG spočítá BLAKE3 hash
- Nový hash → zkopíruje do zálohy + zapíše do obou tabulek
- Duplikát → jen zapíše do
zdrojove_soubory, nekopíruje - Bezpečné pro opakované spuštění — přeskočí soubory již v DB
ZALOHA_DIR podle hostname (automaticky):
"Tower1" → /mnt/user/ZalohaVsechObrazku # lokální
"tower" → /mnt/remotes/TOWER1.LAN_ZalohaVsechObrazku # NFS
Cesta zálohy: ZalohaVsechObrazku/{hostname}/Foto/2023/img.jpg
Závislosti: blake3, psycopg2-binary — nainstalováno na obou serverech 2026-05-24.
Windows — libovolný PC v síti
Soubor: 00 PictureCollector/collect_pictures_windows.py
Rozdíly:
- Skenuje všechny
DRIVE_FIXEDdisky (ne síťové, ne CD) — detekce přesctypes - Záloha přes UNC:
\\Tower1\ZalohaVsechObrazku - Cesta zálohy:
ZalohaVsechObrazku\{hostname}\{disk}\cesta(např.…\JMENO-PC\D\Foto\img.jpg) - Navíc přeskakuje:
C:\Windows,$Recycle.Bin,System Volume Information,Recovery - Instalace:
pip install blake3 psycopg2-binary
Pomocné skripty (Windows, lokálně v 00 PictureCollector)
| Soubor | Účel |
|---|---|
ssh_deploy.py |
Nasadí skript na tower |
ssh_deploy_tower1.py |
Nasadí skript na Tower1 |
stats.py |
Statistiky zálohy z DB (počty, velikosti, per hostname) |
create_tables.py |
Vytvoří tabulky v DB |
verify_tables.py |
Ověří strukturu tabulek |
clear_tables.py |
TRUNCATE obou tabulek (pozor!) |
Stav k 2026-05-25
- collect_pictures.py běží na tower (probíhá, 100TB NAS) — k 2026-05-25 ráno: 54 GB / 36 598 unikátních souborů
- Tower1 spuštěn, přidal 104 souborů
- Windows skript připraven, zatím nespuštěn na žádném PC
Otevřené otázky
- Co s "sirotky" bez EXIF — importovat s mtime / odmítnout / označit?
- Při shodě
sha256_pixels— přeskočit / sloučit metadata / uložit oba jako související? - Storage layout — nechat in-place /
archiv/YYYY/MM// content-addressable? - Navázat prací s daty až doběhnou servery — EXIF analýza, podobné fotky, organizace, prohlížeč