Skip to content

streiman/lazygeotag

Repository files navigation

LazyGeotag

Automatisches Geotagging für PhotoPrism und lokale Fotosammlungen mit Dawarich Standortdaten

LazyGeotag verbindet deine Fotos mit GPS-Koordinaten aus deiner Dawarich-Standortverfolgung. Es funktioniert sowohl mit PhotoPrism-Sammlungen als auch mit lokalen Ordnern.

Features

  • 🗺️ Automatisches Geotagging mit Dawarich-Standortdaten
  • 📸 Dual-Modus: PhotoPrism-Integration oder lokale Ordner
  • 🎯 Intelligente Pfad-Erkennung: Query vs. lokaler Pfad wird automatisch erkannt
  • Optimierte PhotoPrism-Rescans: Gemeinsame Wurzelelemente, Warte-Logik
  • 🔍 Dry-Run Modus: Vorschau ohne Änderungen
  • 📊 Detaillierte Berichte: Erfolg/Fehler-Kategorisierung
  • ⏱️ Zeitfenster-Matching: Konfigurierbarer Toleranzbereich

Voraussetzungen

  • Python 3.8+
  • Dawarich Instanz mit API-Zugang
  • Optional: PhotoPrism für erweiterte Funktionen

Installation

  1. Repository klonen:
git clone https://github.com/streiman/lazygeotag.git
cd lazygeotag
  1. Virtual Environment erstellen:
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# oder
.venv\Scripts\activate     # Windows
  1. Dependencies installieren:
pip install -r requirements.txt
  1. Konfiguration erstellen:
cp .env.example .env
# .env mit deinen Daten bearbeiten

Konfiguration

Bearbeite die .env Datei:

# PhotoPrism (optional, nur für PhotoPrism-Modus)
PHOTOPRISM_URL=https://deine-photoprism-instanz.de
PHOTOPRISM_USER=admin
PHOTOPRISM_PASSWORD=dein-passwort

# Dawarich (erforderlich)
DAWARICH_URL=https://deine-dawarich-instanz.de
DAWARICH_API_KEY=dein-api-key

# Einstellungen
MAX_TIME_DIFF_MINUTES=90
TIMEZONE=Europe/Berlin
PHOTOPRISM_ORIGINALS_PATH_OVERRIDE=/pfad/zu/fotos

Verwendung

PhotoPrism-Modus

# Nach Jahr und Kamera filtern
python lazygeotag.py "year:2025 camera:nikon"

# Bestimmten Zeitraum
python lazygeotag.py "after:2025-08-01 before:2025-08-31"

# Dry-Run (keine Änderungen)
python lazygeotag.py "year:2025" --dry-run

# Ohne automatischen Rescan
python lazygeotag.py "album:urlaub" --no-rescan

Lokaler Ordner-Modus

# Lokalen Ordner bearbeiten
python lazygeotag.py "/home/user/photos"
python lazygeotag.py "./urlaubsfotos"

# Dry-Run für lokale Ordner
python lazygeotag.py "~/Downloads/fotos" --dry-run

Nur PhotoPrism Rescan

python lazygeotag.py --rescan

PhotoPrism Query-Filter

Das Tool unterstützt alle PhotoPrism-Suchfilter:

Filter Beschreibung Beispiel
geo:false/true Mit/ohne GPS-Daten geo:false
type:image/video/raw Medientyp type:image
year:2025 Jahr year:2025
month:8 Monat (1-12) month:8
after:2025-08-01 Nach Datum after:2025-08-01
camera:canon Kamera-Marke camera:canon
album:urlaub Album album:urlaub

Hinweis: type:image und geo:false werden automatisch hinzugefügt, falls nicht vorhanden.

Funktionsweise

  1. Foto-Erkennung: PhotoPrism-Query oder lokaler Ordner-Scan
  2. EXIF-Analyse: Extrahiert Aufnahmezeit aus Foto-Metadaten
  3. Standort-Matching: Findet nächsten Dawarich-Punkt im Zeitfenster
  4. GPS-Injection: Schreibt Koordinaten in EXIF-GPS-Tags
  5. PhotoPrism-Rescan: Intelligente Aktualisierung (nur PhotoPrism-Modus)

Unterstützte Formate

  • JPEG (.jpg, .jpeg) - Vollständig unterstützt
  • TIFF (.tif, .tiff) - Vollständig unterstützt
  • PNG - Nicht unterstützt (EXIF-Limitation)
  • RAW-Formate - Nicht unterstützt

Fehlerbehebung

Häufige Probleme

"Keine Standortdaten gefunden"

  • Überprüfe Dawarich API-Key und URL
  • Stelle sicher, dass Standortdaten für den Zeitraum existieren
  • Erhöhe MAX_TIME_DIFF_MINUTES falls nötig

"PhotoPrism Rescan Timeout"

  • Normal bei großen Bibliotheken
  • Rescan läuft trotzdem im Hintergrund weiter
  • Nutze --no-rescan bei wiederkehrenden Problemen

"EXIF-Daten können nicht geladen werden"

  • Unterstützt nur JPEG/TIFF
  • PNG-Dateien werden automatisch übersprungen

Debug-Ausgabe

Nutze --dry-run für detaillierte Informationen:

python lazygeotag.py "year:2025" --dry-run

Entwicklung

Requirements aktualisieren

pip freeze > requirements.txt

Tests

# Dry-Run Test
python lazygeotag.py "year:2025 month:8" --dry-run

# Kleiner Test
python lazygeotag.py "year:2025 month:8 day:1"

# Lokaler Test
python lazygeotag.py "./test-photos" --dry-run

Lizenz

MIT License - siehe LICENSE Datei.

Beiträge

Pull Requests und Issues sind willkommen!

  1. Fork das Repository
  2. Erstelle einen Feature-Branch (git checkout -b feature/amazing-feature)
  3. Commit deine Änderungen (git commit -m 'Add amazing feature')
  4. Push zum Branch (git push origin feature/amazing-feature)
  5. Öffne einen Pull Request

Danksagungen

About

Intelligent geotagging tool for PhotoPrism and local directories using Dawarich location data

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages