Architektur auf einen Blick
ArchivBlick besteht aus mehreren Schichten, die unabhängig voneinander arbeiten. Jede Schicht kann einzeln ausgetauscht werden — das macht das System zukunftssicher.
iCloud
69.000 Fotos
SharePoint
133.000 Dateien
Ugreen NAS
GoPro-Videos, Staging
Insta360
360°-Aufnahmen
Frame-Extraktion
FFmpeg, 3 Größen
Filmstrip-Generator
Grid-Bilder aus Frames
Thumbnail-Pipeline
sm / md / lg (96–800px)
Vision-KI
Qwen / LLaVA / Gemini
Embedding-KI
BGE-M3 (Text) + SigLIP2 (Bild)
GPS-Extraktion
exiftool, GPX-Tracks
PostgreSQL
224k Assets + pgvector
Qdrant
224k Text + 142k Bild-Vektoren
SQLite
Filmstrip-DBs, Index
Web-UI (8877)
FastAPI + Vue.js
Backend-API (8878)
FastAPI + PostgreSQL
Bildsuche (8501)
Streamlit + SigLIP2
iPad-App
SwiftUI (geplant)
Datenquellen — woher die Medien kommen
ArchivBlick vereint Medien aus vier völlig verschiedenen Welten. Jede Quelle hat eigene Formate, eigene APIs und eigene Herausforderungen.
iCloud-Fotomediathek
Persönliche Fotos und Videos, synchronisiert über Apple-Geräte.
SharePoint / OneDrive
Firmenarchiv mit Fotos, Dokumenten und Scans aus über 20 Jahren.
Ugreen NAS (DXP6800 Pro)
Lokaler Speicher für GoPro-Rohdaten, Staging und Frame-Extraktion.
Insta360 X3 / X4
360°-Aufnahmen mit Dual-Fisheye und Equirectangular-Projektion.
Pipelines — vom Rohvideo zur Beschreibung
Drei Pipelines arbeiten zusammen, um aus Rohmaterial durchsuchbare Inhalte zu machen.
Pipeline A: Frame-Extraktion
Video erkennen
GoPro-Kapitel zusammenführen (GH010716 + GH020716)
Frames extrahieren
FFmpeg zerlegt in Einzelbilder, 3 Größen
GPS extrahieren
exiftool liest GPX-Tracks aus Metadaten
Filmstrip erzeugen
Frames als Grid-Bild (4x4 oder 4xn)
Galerie generieren
HTML mit Lightbox + SVG-Track-Karte
Performance
Auf der Ugreen NAS: ~17x Echtzeit ohne GPS, ~7–10x Echtzeit mit GPS-Extraktion (exiftool ist der Flaschenhals). 538 Videos in ~8 Stunden.
Pipeline B: KI-Beschreibung
Filmstrip laden
Grid-Bild als Base64 (1–5 MB)
Strukturierter Prompt
JSON-Schema, Anti-Hedging, Frame-für-Frame
Vision-LLM
Qwen 32B (GPU) oder 7B (lokal)
JSON parsen
Szenen, Tags, Ort, Stimmung, Fahrzeug
JSONL / SQLite
Resume-fähig, Batch-tauglich
Pipeline C: Embedding & Indexierung
BGE-M3 Encoder
1024-dim Vektoren für alle Beschreibungen
SigLIP2 Encoder
1024-dim Vektoren für 142k Bilder
Vektor-Datenbank
pgvector + Qdrant parallel
BM25 Index
PostgreSQL tsvector für Keyword-Suche
Hybrid RRF
Vektor + BM25 fusioniert
KI-Modelle — getestet und verglichen
Vier verschiedene Vision-Modelle wurden in realen Batch-Runs getestet. Jedes hat Stärken und Schwächen — die Wahl hängt von Qualität, Geschwindigkeit und Datenschutz ab.
| Modell | Größe | Laufzeit | Verarbeitete Medien | Qualität | Besonderheit |
|---|---|---|---|---|---|
| LLaVA 7B | 7B | Ollama lokal | 131.283 Bilder | Basis | Erster Durchlauf, Bild-Tags |
| Gemma4:e4b | ~4B | Ollama lokal | 1.090 Filmstrips | Gut | 28,5h Batch, ~1,6 Min/Video |
| Gemini 2.5 Flash | Cloud | OpenRouter API | 10.374 Filmstrips | Gut | 1,4s/Frame, schnellstes Modell |
| Qwen2.5-VL 7B | 7B | Ollama lokal | Insta360-Tests | Gut | 100% GPU auf Apple Silicon, 9 tok/s |
| Qwen2.5-VL 32B | 32B AWQ | vLLM (GPU-Server) | 8.518 Filmstrips (läuft) | Exzellent | 16 Szenen/Strip, konkreteste Details |
Prompt-Engineering
Der Prompt macht den Unterschied — nicht nur das Modell. Drei Iterationen waren nötig:
Parameter-Tuning
A/B/C/D/E/F-Tests mit 5 identischen Filmstrips, systematisch verglichen:
RAG & Suche — zwei Systeme, ein Ziel
Zwei unabhängige Such-Systeme wurden aufgebaut und getestet. Beide nutzen den gleichen Text-Encoder, aber unterschiedliche Backends.
System A: pgvector (Hybrid)
Direkt in PostgreSQL integriert — kombiniert Vektor-Ähnlichkeit mit klassischer Volltextsuche.
System B: Qdrant (Multimodal)
Dedizierte Vektor-Datenbank mit Text- UND Bild-Embeddings — ermöglicht Suche per Bild.
So funktioniert die Suche
Motorradtour durch Weinberglandschaft
Motorradfahrer mit gelber Warnweste auf Landstraße. Weinreben links und rechts, Abenddämmerung, warmes Licht. Moselregion.
Fahrradfahrt durch Stadtlandschaft bei Sonnenuntergang
Radfahrer auf breitem Gehweg, Kreisverkehr, moderne Gebäude. Sonne steht tief, Abenddämmerung.
Weinberg-Panorama
Weitwinkelaufnahme über Weinberge. Hügelige Landschaft, grüne Reben, blauer Himmel mit Wolken.
Mac mini — das Rechenzentrum im Regal
Ein Mac mini mit Apple Silicon betreibt das gesamte ArchivBlick-System. Fünf Dienste laufen parallel und sind über Tailscale erreichbar.
151.636 Dateien, SQLite
224.405 Assets
224k Text + 142k Bild
Semantische Suche
pgvector Extension
Qwen 7B, LLaVA, Gemma
Hardware
Mac mini mit Apple Silicon, 32 GB RAM, 926 GB SSD.
Erreichbar über Tailscale (100.109.176.99).
Alle Services laufen nativ — kein Docker, keine VMs. Ollama nutzt 100% GPU für KI-Inferenz.
Web-UI — drei Ansichtsmodi
Die Web-Oberfläche auf Port 8877 bietet verschiedene Wege, durch das Archiv zu navigieren.
Lightroom-Modus
Große Vorschau mit Filmstrip-Navigation am unteren Rand. Ideal zum Durchblättern einzelner Aufnahmen.
Klassisch-Modus
Grid-Ansicht mit Thumbnails. Effizient für schnelles Scannen großer Bestände.
Modern-Modus
Cluster-Foto-Panel mit Mini-Grid und Zoom-Slider. Gruppiert nach Ort, Zeit oder Kamera.
Vorhandene Features
Filter: Ort, Zeitraum, Kamera-Typ, Dateiformat, Bewertung
Karte: GPS-basierte Kartenansicht für GoPro-Aufnahmen mit Track-Overlay
Sammlungen: Manuelle Zusammenstellung von Favoriten
Suche: Volltextsuche über alle KI-Beschreibungen
Filmstrip360: Spezialisierte Ansicht für Insta360-Material
Datenbestand — die Zahlen
Eine Übersicht über alles, was ArchivBlick heute verwaltet, indexiert und durchsuchbar macht.
| Was | Anzahl | Speicher | Status |
|---|---|---|---|
| Assets insgesamt (PostgreSQL) | 224.405 | — | Indexiert |
| Dateien im Web-Viewer (SQLite) | 151.636 | — | Durchsuchbar |
| Text-Embeddings (BGE-M3) | 224.405 | 2,2 GB | Aktiv |
| Bild-Embeddings (SigLIP2) | 142.256 | ~9 GB RAM | Aktiv |
| LLaVA-Beschreibungen | 131.283 | multimedia_index.db | Abgeschlossen |
| Filmstrip-Beschreibungen (lokal) | 13.653 | 2 SQLite-DBs | Abgeschlossen |
| Filmstrip-Beschreibungen 32B (Trooper) | ~300 / 8.518 | JSONL | Läuft (3,5%) |
| Thumbnails (sm/md/lg) | ~200k+ | ~16 GB | 70% gemappt |
| GoPro-Videos | 538 | ~1,5 TB | Frames extrahiert |
| GPS-Tracks (GPX) | ~350 | — | Extrahiert |
Gesamtbild
1,6 TB Originaldaten → 224k Assets indexiert → 151k im Web-Viewer → 131k mit KI-Beschreibung → 142k mit Bild-Embedding → alles durchsuchbar. Die iPad-App wird das gesamte Archiv in 4,6 GB offline verfügbar machen (97% Kompression).