Ein Fototool entsteht – wie alles begann und was erreicht ist

Das Jahr 2020 wird wohl jedem noch lang in Erinnerung bleiben und das nicht wegen der Dinge, die wir unternommen haben, sondern den Dingen, die wir nicht tun konnten.

Auch für mich bedeutet 2020 Verzicht auf viele Fotogelegenheiten. Insofern nutzte ich die vergangenen Monate aber zumindest, um etwas Ordnung in meine Fotosammlung zu bringen.

Parallel dazu habe ich begonnen mich mit neuen Tools rund um die Fotografie zu beschäftigen. Ziel war es, meinen Workflow so zu ändern, dass ich künftig nur noch meine besten Bilder auch nach Lightroom importiere und zuvor die Bilder außerhalb von Lightroom aussortiere, verschlagworte und mit GPS-Daten versehe. Eines der Tools, die ich gefunden habe, ist ExifTool, ein Kommandozeilentool mit dem man

  • Metadaten lesen und bearbeiten,
  • Bilder kopieren/verschieben/umbenennen und
  • GPS-Daten an Bilder anfügen

kann. Das Tool ist auch die Basis vieler Lightroom Plugins und sonstiger Fotoprogramme. Da es eine Kommandozeilenapplikation ist mit unzähligen Parametern ist sie sehr mächtig, aber auch nicht für jeden leicht zugänglich. Es gibt zwar einige Tools, die versuchen, dem Tool eine Benutzeroberfläche zu geben, aber die sind entweder nicht mehr in der Weiterentwicklung oder nur sehr rudimentär.

Also versuchte ich mich selbst daran. Im ersten Schritte hatte ich hierzu ein einfaches Excel-Sheet genommen.

Meine allererste Version in Excel. Die GUI war ein einfaches Excel-Sheet

Das war Anfang April 2020. Nach kurzer Zeit habe ich den ersten Ansatz jedoch schon wieder verworfen und das Excel-Sheet mit einem Formular zur Eingabe versehen. Ich versuchte mich nebenher auch kurzzeitig an einer Umsetzung mit Visual Studio in Visual Basic, aber in dem Moment war die Hürde etwas zu hoch, so dass ich zunächst weiter bei Excel blieb. Das sah dann so aus:

Die zweite Excel-Version verfügte bereits über eine Formularoberfläche und besaß neben den ExifTool-Funktionen auch bereits eine Funktion, um Schlagwörter von Bildern bei Google abzufragen

Die zweite Excel-Version von Ende April 2020 sollte gleichzeitig die letzte sein, denn ich sah einige Artikel über Powershell und war angetan, wie einfach und schnell sich in dieser Sprache schnelle Lösungen umsetzen ließen, welche in anderen Sprachen viel Arbeit machten.

Also begann ich komplett von vorn und baute das Excel-Tool in Powershell nach. Die neue Lösung sollte den Vorteil haben, dass sie auf jedem Windows-PC läuft, auch wenn der Nutzer kein Excel besitzt.

Für die Oberfläche hatte ich mich Windows Presentation Forms ausgesucht, da man hier Visual Studio zur Gestaltung nehmen konnte.
Die neue Lösung bedeutete aber auch neue Probleme, denn ich musste zunächst einmal Powershell lernen. Insofern war ich parallel am Portieren der Excel-Lösung, baute aber auch ständig wieder um, da ich neue Verfahren gelernt hatte, welche noch effizienter waren.

Schon bald stand eine erste Version, welche der Excel-Version recht ebenbürtig war (Leider habe ich keinen Screenshot mehr von jener Version). Doch ich hatte Blut geleckt und begann immer weiter zu experimentieren, was noch geht.

Der erste Schritt hin zu einer richtigen Applikation war, dass ich gelernt hatte, wie ich eine Datenbank zusammen mit Powershell nutze. Damit konnte ich die langsam unübersichtlich werdenden Textdateien für die Konfiguration ablösen und die Anwendung gleichzeitig effizienter gestalten, da mir nun alle Tools einer Datenbank zur Verfügung standen. Als Datenbank kam seitdem SQLite zum Einsatz, welche auch z.B. bei Lightroom im Hintergrund ihren Dienst verrichtet. Das Tool besaß zu diesem Zeitpunkt folgende Module:

  • Metadaten lesen
  • Metadaten hinzufügen/verändern
  • Fotos umbennen/verschieben kopieren
  • GPS-Daten hinzufügen
  • Stichwörter automatisch ermitteln

Mit einer Datenbank im Hintergrund rückte die Möglichkeit näher, neben einem Tool zum Bearbeiten von Metadaten auch ein Tool zum Aussortieren von Fotos zu bauen und damit die Funktionen von FastRawViewer (den ich euch hier vorgestellt hatte) und Adobe Bridge in einem Tool mit zusätzlichen Funktionen zu vereinen. Ich musste nur noch eine Möglichkeit finden, Bilder effizient anzuzeigen.

Es dauerte ein wenig und auch dieses Problem war gelöst. Der Weg war frei für einen Bildbetrachter.

Nach einigen Experimenten war es mit tatsächlich gelungen, einen Bildbetrachter zu integrieren.

Der Einbau eines Bildbetrachters war jedoch viel mehr als nur eine Ergänzung, denn mit ihm gab es auch neue Möglichkeiten, die Funktionen von Exiftool mit dem Bildbetrachter zu kombinieren und so baute ich erneut alles um und verwarf fast alle ursprünglichen Teile des Tools. Im Ergebnis hat das Tool nun nur noch 2 Module, in denen alle anderen Funktionen integriert sind:

  • Import (hier kann man auch Fotos umbenennen und verschieben/kopieren)
  • Browser (inkl. GPS, Stichwortverwaltung und Metadateneditor)

Ende Mai war es soweit, dass ich die ersten Fotos mit dem Tool importiert hatte von meiner Kamera. Ein erster Meilenstein. Diese Tests waren auch wesentlich, um meinen Ansatz zu testen und zu schauen, ob das Tool gut zu bedienen ist.

Erwartungsgemäß funktionierte natürlich nicht alles direkt, oder es war in Teilen etwas hakelig in der Bedienung. Also passte ich die Oberfläche fast täglich an und peu a peu wurde das Tool runder. Ich begann über den Browser auch die Bilder auszusortieren und hier ergaben sich immer neue Ansatzpunkte, um noch mehr Verbesserungen zu erreichen.

Ende Juni hatte ich Bilder von einem Trip in die Region Aachen mitgebracht und auch diese wurden mit dem Tool importiert. Mittlerweile hatte ich auch folgende Funktionen ergänzt:

  • öffnen der Bilder in externen Editoren (z.B. Photoshop)
  • Vergleichsansicht von Fotos
  • Zoom von Fotos
  • Deutliche schnellere Anzeige dank Previews
  • Stichwort-Sets
  • Import der Stichwortliste aus Lightroom
  • Farbmarkierungen
  • Tastenkürzel
  • Verschieben der Bilder in Ordner per Tastenkombination

Immer wieder habe ich auch an der Performance gearbeitet, so dass mittlerweile das Tool für meine Ansprüche schnell genug ist, auch wenn ich weiter nach Optimierungen suche.

Der Importdialog nach der letzten Überarbeitung. Neben dem Import können hier auch Bilder umbenannt/kopiert/verschoben werden

Interessant war für mich zu lernen, welche Komplexität doch hinter mancher recht einfachen Funktion steckt. So ist das Verschieben/Umbenennen von Fotos tatsächlich recht kompliziert, wenn man die bestehenden Daten in der Datenbank auch weiterverwenden möchte. Auch eine „Rückgängig“-Funktion war schwieriger zu realisieren in manchen Punkten, als es auf Anhieb erschien. Es war und ist ein tägliches hinzulernen gewesen in den vergangenen Monaten.

Einer der letzten Schritte war zuletzt auch die Einstellungen für den Nutzer editierbar zu halten. Dies war ein wichtiger Schritt, um die Anwendung künftig auch hier auf der Webseite anderen Nutzern zur Verfügung zu stellen, denn die letzten Wochen habe ich in der Arbeit mit der Lösung tatsächlich sehr gute Erfahrungen gemacht und für mich ist dies eine (fast) ideale Ergänzung zu Lightroom geworden.

Der Einstellungsdialog. Ein wichtiger Schritt, um die Anwendung künftig auch anderen Nutzern zur Verfügung zu stellen

In nur 3 Monaten ist dieses Tool nun soweit gekommen, dass es fast einen Beta-Status erreicht hat. Diese 3 Monate waren von extrem langen Abenden/Nächten geprägt in denen ich mich teilweise an kleinsten Problemen stundenlang aufgehalten, aber auch in wenigen Minuten große Erfolge gehabt hatte. Es gab Rückschläge und immer wieder Dinge, welche ich komplett neu gebaut hatte, aber letztlich folgten alle Aktionen der gleichen Richtung – nach vorn.

Gestern habe ich erstmals die Anwendung auf einem zweiten Computer zum Laufen gebracht und das ohne Probleme – ein ganz wichtiger Schritt.

Bis das Tool hier auf der Webseite zur Verfügung steht, wird sicherlich noch etwas Zeit vergehen, in der ich die Anwendung weiter teste und Ecken und Kanten beseitige. Ich plane die Anwendung auf Spendenbasis frei verfügbar zu machen (Donationware).

Bis dahin werde ich euch immer wieder über den Fortschritt auf dem Laufenden halten.