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

3 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages