Files
fotkyBuzalkovi/CONTEXT.md
T
administrator db84c3e501 notebookVb
2026-05-25 06:39:49 +02:00

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, indexy
  • tags, 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:

  1. Skenuje /mnt/user/ rekurzivně
  2. Přeskočí adresáře v EXCLUDED_DIR_NAMES (case-insensitive): ZalohaVsechObrazku, ZalohaVšechObrázků
  3. Pro každý JPG/JPEG spočítá BLAKE3 hash
  4. Nový hash → zkopíruje do zálohy + zapíše do obou tabulek
  5. Duplikát → jen zapíše do zdrojove_soubory, nekopíruje
  6. 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_FIXED disky (ne síťové, ne CD) — detekce přes ctypes
  • 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

  1. Co s "sirotky" bez EXIF — importovat s mtime / odmítnout / označit?
  2. Při shodě sha256_pixels — přeskočit / sloučit metadata / uložit oba jako související?
  3. Storage layout — nechat in-place / archiv/YYYY/MM/ / content-addressable?
  4. Navázat prací s daty až doběhnou servery — EXIF analýza, podobné fotky, organizace, prohlížeč