Detaillierte Dokumentation aller PixelGroomer-Scripts.
Alle Scripts erfordern ein eingerichtetes Python virtual environment. Falls nicht vorhanden:
./setup.shDie Scripts prüfen automatisch das venv und zeigen einen Fehler mit Anleitung, falls es fehlt.
Importiert Fotos von SD-Karten oder Verzeichnissen mit automatischer Organisation.
pg-import <source> [optionen]| Argument | Beschreibung |
|---|---|
<source> |
Quellverzeichnis (z.B. /Volumes/EOS_DIGITAL) |
| Option | Kurz | Beschreibung |
|---|---|---|
--event <name> |
-e |
Event-Name für Metadaten und Dateinamen |
--location <loc> |
-l |
Ort für EXIF-Metadaten |
--author <name> |
-a |
Author überschreiben |
--output <dir> |
-o |
Ziel-Archiv (überschreibt PHOTO_LIBRARY und .import.yaml) |
--dry-run |
-n |
Vorschau ohne Änderungen |
--no-delete |
Quelle nicht löschen (auch nicht fragen) | |
--no-verify-copy |
SHA-256-Verifikation nach Kopie überspringen (schneller; weniger sicher) | |
--no-metadata |
EXIF-Schreiben beim Import überspringen (später mit pg-exif taggen) |
|
--split-by-type |
RAW in raw/, JPG in jpg/ mit gepaarten Namen (Standard) |
|
--no-split-by-type |
Flache Struktur: alle Dateien im Datumsordner | |
--trip |
-t |
Trip-Modus: keine Abfrage für Event/Ort; Dateinamen nur aus Datum+Sequenz, wenn kein Event gesetzt |
--verbose |
-v |
Detaillierte Ausgabe |
--help |
-h |
Hilfe anzeigen |
Einstellungen werden in dieser Reihenfolge geladen (spätere überschreiben frühere):
.import.yamlauf SD-Karte (niedrigste Priorität).envKonfigurationsdatei- CLI-Argumente (höchste Priorität)
- Interaktive Abfrage (nur wenn Wert fehlt)
# Standard-Import mit Event
pg-import /Volumes/EOS_DIGITAL --event "Hochzeit"
# Mit Location und Author
pg-import /Volumes/SD -e "Urlaub" -l "Mallorca" -a "Max"
# In spezifisches Archiv (überschreibt .env und .import.yaml)
pg-import /Volumes/SD --output /Volumes/Archive/2026 --event "Test"
# Trip-Import (keine Abfragen; dateinamen nur aus Datum, wenn kein Event)
pg-import /Volumes/CARD --trip
# Flache Struktur (Standard-Split aus)
pg-import /Volumes/CARD --no-split-by-type --event "Endurotraining"
# Vorschau
pg-import /Volumes/SD --dry-run --verbose
# Schneller Import (siehe auch [Workflow](workflow.de.md) — Schneller Import)
GENERATE_CHECKSUMS=false pg-import /Volumes/SD --output /Volumes/Archive \
--event "Alps Tour" --location "" --no-verify-copy --no-metadata --no-delete- venv prüfen (Fehler wenn nicht vorhanden)
- Konfiguration laden (CLI → ENV → .env → .import.yaml)
- Dateien scannen (RAW + JPG)
- Nach EXIF-Datum gruppieren
- Zielordner erstellen (Standard:
YYYY-MM-DD/, konfigurierbar) - Dateien kopieren und umbenennen
- EXIF-Tags setzen
- Checksums generieren
- Optional: Quelle löschen nach Bestätigung
Benennt Fotos nach konfigurierbarem Pattern um.
pg-rename <path> [optionen]| Option | Kurz | Beschreibung |
|---|---|---|
--pattern <pat> |
-p |
Naming-Pattern überschreiben |
--event <name> |
-e |
Event-Name für {event} Platzhalter |
--recursive |
-r |
Unterverzeichnisse einbeziehen |
--dry-run |
-n |
Vorschau ohne Änderungen |
--verbose |
-v |
Detaillierte Ausgabe |
| Platzhalter | Beschreibung | Beispiel |
|---|---|---|
{date} |
Datum aus EXIF | 20260124 |
{time} |
Zeit aus EXIF | 143022 |
{event} |
Event-Name | Hochzeit |
{seq} |
Sequenznummer | 1 |
{seq:03d} |
Mit Padding | 001 |
{camera} |
Kameramodell | EOS5D |
# Mit Event
pg-rename ./photos --event "Urlaub"
# Custom Pattern
pg-rename ./photos --pattern "{date}_{time}_{seq:03d}" --dry-run
# Rekursiv
pg-rename ./archive --event "2026" --recursiveVerwaltet EXIF/IPTC/XMP Metadaten.
pg-exif <files...> [optionen]| Option | Kurz | Beschreibung |
|---|---|---|
--author <name> |
-a |
Artist/Creator setzen |
--copyright <text> |
-c |
Copyright setzen |
--event <name> |
-e |
Event-Name setzen |
--location <loc> |
-l |
Location setzen |
--gps <lat,lon> |
GPS-Koordinaten setzen | |
--title <text> |
-t |
Titel setzen |
--description <text> |
-d |
Beschreibung setzen |
--keywords <k1,k2> |
-k |
Keywords setzen |
--show |
-s |
Metadaten anzeigen |
--remove |
Metadaten entfernen |
| Option | EXIF/IPTC/XMP Felder |
|---|---|
--author |
Artist, XMP:Creator, IPTC:By-line |
--copyright |
Copyright, XMP:Rights, IPTC:CopyrightNotice |
--event |
XMP:Event, IPTC:Caption-Abstract |
--location |
XMP:Location, IPTC:City |
--gps |
GPSLatitude, GPSLongitude + Refs |
# Metadaten anzeigen
pg-exif photo.jpg --show
# Author und Copyright setzen
pg-exif ./photos --author "Max" --copyright "© 2026 Max"
# GPS hinzufügen
pg-exif photo.jpg --gps "52.52,13.405"
# Alle Metadaten entfernen
pg-exif photo.jpg --removeVerwaltet Foto-Alben mit Symlinks.
pg-album <command> [argumente]| Command | Beschreibung |
|---|---|
create <name> |
Neues Album erstellen |
delete <name> |
Album löschen |
add <album> <files...> |
Fotos hinzufügen |
remove <album> <files...> |
Fotos entfernen |
list |
Alle Alben auflisten |
show <name> |
Album-Inhalt anzeigen |
info <name> |
Album-Metadaten anzeigen |
export <name> --to <dir> |
Album exportieren (echte Kopien) |
# Album erstellen
pg-album create "Alps_Tour_Highlights"
# Fotos hinzufügen
pg-album add "Alps_Tour_Highlights" ~/Photos/2026-01-24/*.jpg
# Album anzeigen
pg-album show "Alps_Tour_Highlights"
# Album exportieren
pg-album export "Alps_Tour_Highlights" --to ~/Desktop/ForRiders/
# Album löschen
pg-album delete "Alps_Tour_Highlights"- Alben verwenden Symlinks (kein zusätzlicher Speicher)
- Originale bleiben im Archiv
- Ein Foto kann in mehreren Alben sein
exporterstellt echte Kopien
Entwickelt RAW-Dateien zu JPG.
pg-develop <files...> [optionen]| Option | Kurz | Beschreibung |
|---|---|---|
--output <dir> |
-o |
Ausgabeverzeichnis |
--preset <name> |
-p |
Darktable-Preset |
--quality <1-100> |
-q |
JPEG-Qualität |
--processor <name> |
darktable, imagemagick oder rawtherapee |
|
--resize <WxH> |
Größe ändern (z.B. 1920x, x1080); nur bei ImageMagick |
|
--overwrite |
Existierende überschreiben | |
--dry-run |
-n |
Vorschau |
# Standard-Entwicklung
pg-develop photo.cr3
# Mit Output und Qualität
pg-develop ./raws/*.cr3 --output ./jpgs --quality 95
# Mit Resize für Web
pg-develop ./raws/*.cr3 --output ./web --resize 1920x --quality 85
# Mit Darktable-Preset
pg-develop photo.cr3 --preset "vivid"
# ImageMagick erzwingen
pg-develop photo.cr3 --processor imagemagick
# RawTherapee mit PP3-Preset
pg-develop photo.cr3 --processor rawtherapee --preset ~/presets/kodak.pp3Wenn eine .xmp-Datei neben dem RAW existiert, nutzt darktable-cli diese automatisch:
photo.cr3 # RAW
photo.cr3.xmp # Darktable-Bearbeitungen → wird verwendet
Prüft Datei-Integrität mit Checksums.
pg-verify <path> <mode> [optionen]| Mode | Kurz | Beschreibung |
|---|---|---|
--generate |
-g |
Checksums für alle Dateien erstellen |
--check |
-c |
Dateien gegen Checksums prüfen |
--update |
-u |
Neue Dateien hinzufügen, bestehende behalten |
| Option | Beschreibung |
|---|---|
--no-recursive |
Nur angegebenes Verzeichnis |
--verbose |
Detaillierte Ausgabe |
# Checksums generieren
pg-verify ~/Pictures/PhotoLibrary --generate
# Integrität prüfen
pg-verify ~/Pictures/PhotoLibrary --check
# Neue Dateien hinzufügen
pg-verify ~/Pictures/PhotoLibrary --update
# Backup verifizieren
pg-verify /Volumes/Backup/Photos --checkChecksums werden in .checksums pro Verzeichnis gespeichert:
# .checksums
a1b2c3d4... 20260124_Hochzeit_001.cr3
e5f6g7h8... 20260124_Hochzeit_002.cr3
Vergleicht RAW-Prozessoren (darktable, ImageMagick und RawTherapee bei Installation).
pg-test-processors <raw-file>pg-test-processors photo.cr3Erstellt bis zu drei Dateien zum Vergleich (je nach Installation):
photo_darktable.jpgphoto_imagemagick.jpgphoto_rawtherapee.jpg
Zeigt Verarbeitungszeit und Dateigröße für jeden.
Richtet die Entwicklungsumgebung ein.
./setup.sh- Prüft Python 3 und venv-Modul
- Erstellt
.venv/virtual environment - Installiert Python-Abhängigkeiten aus
requirements.txt - Prüft externe Tools (exiftool, darktable, imagemagick, rawtherapee)
- Erstellt
.envaus.env.example(falls nicht vorhanden) - Macht Scripts ausführbar
- Nach dem Klonen des Repositories
- Nach Änderungen an
requirements.txt - Wenn
.venv/gelöscht wurde
Das Projekt enthält eine umfassende Test-Suite mit pytest.
make test # Alle Tests ausführen
make test-fast # Langsame Tests überspringen
make test-coverage # Coverage-Report erstellen
# Oder direkt mit pytest
source .venv/bin/activate
pytest tests/ -v # Alle Tests
pytest tests/unit/ -v # Nur Unit-Tests
pytest tests/integration/test_pg_import.py # Bestimmte Dateitests/
├── conftest.py # Gemeinsame Fixtures
├── fixtures/ # Test-Helfer
├── unit/ # Tests für lib/ Module
├── integration/ # Tests für einzelne Scripts
├── e2e/ # End-to-End Workflow-Tests
└── matrix/ # Kombinatorische Options-Tests
Neue Features benötigen Tests. Siehe tests/conftest.py für verfügbare Fixtures:
test_env- Isolierte Umgebung mit temp. Verzeichnissenrun_script-bin/pg-*Scripts ausführensample_jpeg- Test-Bilder erstellentemp_sd_card- Mock SD-Karten-Struktur
Zurück zum Workflow | Konfiguration