Screenshot: Adobe Lightroom und SQLite

Einige werden es schon wissen, aber hinter dem Katalog von Adobe Lightroom steht eine SQLite Datenbank. Diese Katalogdatei *.lrcat enthält sämtliche Metadaten und Entwicklungsrezepte der importierten, organisierten und bearbeiteten Fotos.

So will ich hier kurz darlegen, wie man diese Lightroom Katalog Datenbank direkt über SQLite ansprechen und verändern kann. Das ganze veranschaulicht an einem kleinen Beispiel der Stichworttabelle.

Hinweis: Das direkte Herumdoktern an der Katalogdatenbank empfehle ich nur denjenigen, welche wissen was sie tun. Es sollte muss auch ein Backup der Datei vorhanden sein. Der Lightroom Prozess sollte derweil auch nicht gerade im Taskmanager aktiv sein.

Wie erfolgt der Zugriff

Die Katalogdatei *.lrcat lässt sich mit jeder SQLite unterstützenden Software öffnen, wobei ich mich hier auf die pure Kommandozeile beschränken werde. Bei Mac OS X ist SQLite standardmäßig dabei, so dass man sie wie folgt öffnen kann:

$ sqlite3 Lightroom\ 3\ Catalog.lrcat
SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
...
sqlite> .exit

Die Anzeige sqlite> weist auf die Bereitschaft der geöffneten Lightroom 3 Catalog.lrcat Datenbank hin und erwartet die Abfragen (Queries), um die Inhalte anzuzeigen oder anzupassen. Die Eingabe von .exit beendet die Bearbeitung und .help zeigt eine kurze Hilfe an.

Sollte bei Abfragen die Ausschrift Error: database is locked erscheinen, ist dies ein sicheres Zeichen, das Lightroom noch aktiv ist und diesen Katalog in Verwendung hat.

Mehr will ich jetzt hier nicht auf SQLite und die Datenbanksprache eingehen. Dazu gibt es genügend bessere und fundiertere Dokumentationen.

Die Tabelle der Stichwörter

In der Lightroomdatenbank gibt es eine Tabelle AgLibraryKeyword, welche alle vergebenen Stichwörter (Schlüsselwörter/Keywords/Tags) mit ihren Eigenschaften enthält. So zum Beispiel ob das Stichwort mit exportiert werden soll, ob es einem oder mehreren Stichwörter untergeordnet ist oder ob es Synonyme gibt.

sqlite> .schema AgLibraryKeyword
CREATE TABLE AgLibraryKeyword (
id_local INTEGER PRIMARY KEY,
id_global UNIQUE NOT NULL,
dateCreated NOT NULL DEFAULT '',
genealogy NOT NULL DEFAULT '',
imageCountCache DEFAULT -1,
includeOnExport INTEGER NOT NULL DEFAULT 1,
includeParents INTEGER NOT NULL DEFAULT 1,
includeSynonyms INTEGER NOT NULL DEFAULT 1,
lastApplied,
lc_name,
name,
parent INTEGER
);
CREATE INDEX index_AgLibraryKeyword_genealogy ON AgLibraryKeyword( genealogy );
CREATE INDEX index_AgLibraryKeyword_parentAndLcName ON AgLibraryKeyword( parent, lc_name );
sqlite>

Der Befehl .schema [tablename] listet die Metadaten einer oder aller Tabellen in der geöffneten Datenbank auf. In dem Falle die Tabelle AgLibraryKeyword, welche wie schon erwähnt die Stichwörter enthält.

Ein SELECT zeigt den gesamten oder ausgewählte Inhalte einer Tabelle an. Im folgenden Falle ide ID, den Namen und die Eigenschaft, ob es Exportiert werden darf:

sqlite> select id_local, includeOnExport, name from AgLibraryKeyword;
...
1535515|1|Bokeh
1564643|1|Semperoper
1564874|1|Fasching
1567285|1|Metallskulptur UNDINE
1576819|0|temp
1587914|1|Hafen
1654853|1|Panorama
...

Ein select * from AgLibraryKeyword würde alle verfügbaren Spalten anzeigen.

Das Exportverhalten der Stichwörter anpassen

Ich selbst verwende recht viele Stichwörter in Lightroom, meist für die enthaltenen Personen. Exportiere ich Fotos möchte ich (eigentlich) nie die Namen der enthaltenen Personen mit in die EXIF Daten der Fotos schreiben lassen. Es könnten so doch recht schnell mal ein paar Namen ungewollt in der Weböffentlichkeit auftauchen.

Alte Lightroom Hasen wissen, dass man beim Export nur zwei Möglichkeiten der Beeinflussung hat. Alles was an Metadaten (EXIF, IPTC, …) hat mitnehmen oder per Eingebettete Metadaten minimieren komplett verwerfen. Abhilfe schaffen hier Plugins, wie beispielsweise das sehr detailliert anpassbare Metadata Wrangler Plugin.

Ich für meinen Teil habe aber bemerkt, dass ich bisher nie den Export der Stichwörter benötigt hatte, aber die Option zum Exportieren bei fast allen Stichwörtern aktiviert war. Zur Erinnerung, beim anlegen oder anpassen der Eigenschaften eines Stichwortes kann man die entsprechende Eigenschaft Ebenfalls exportieren setzen.

Die Lösung ist für meinen Fall recht klar. Einfach alle Stichwörter von den Eigenschaften her nicht exportieren zu lassen. Was bei einer Handvoll noch geht, macht bei einer größeren Anzahl keinen Spass mehr – muss doch die Eigenschaft jedes einzelnen Stichwortes angepasst werden.

Und genau hier kommt die SQLite Datenbank ins Spiel. Lässt sie doch über ein paar Abfragen komplexe Änderungen an vielen Daten zu. So löst folgender UPDATE Befehl das Problem für mich und setzt die entsprechende Exportangabe für alle Stichwörter auf 0:

sqlite> update AgLibraryKeyword set includeOnExport = 0;

Das Ergebnis ist eine 0 für alle Werte der Spalte includeOnExport in der Tabelle AgLibraryKeyword:

sqlite> select id_local,includeOnExport,name from AgLibraryKeyword;
...
1535515|0|Bokeh
1564643|0|Semperoper
1564874|0|Fasching
1567285|0|Metallskulptur UNDINE
1576819|0|temp
1587914|0|Hafen
1654853|0|Panorama
...

In Adobe Lightroom haben jetzt alle Stichwörter die entsprechende Eigenschaft und werden beim Export nicht beachtet.

Fazit

Das Problem mit den Stichwörtern ist jetzt eher spezifischer Natur, zeigt aber schön was mit etwas Kenntnis der SQL-Sprachen möglich ist bzw. dass es überhaupt möglich ist direkten Einfluss auf die Datenbank zu nehmen.

Hier noch einmal der gehobene Zeigefinger, denn man kann so auch die Katalogdatenbank ganz einfach zerstören. Wie sagte Sledge Hammer so schön: „Vertrauen Sie mir – ich weiß, was ich tue!„. Und dann gab es da noch Murphys Gesetz, aber ich will ja nichts heraufbeschwören. ;)