Darktable legt nach – Version 1.4

Veröffentlicht am

Nach einiger Zeit zuerst mit RawTherapee, danach mit Darktable habe ich mir erst vor ein paar Monaten den Bibble-Nachfolger AfterShot Pro gekauft, um mit diesem meine RAW-Aufnahmen zu bearbeiten. Mit Erscheinen der 1.4er-Version von Darktable tendiere ich aber wieder eher in dessen Richtung – „politisch“ natürlich sowieso. Zwei starke Vorteile hatte AfterShot für mich im Vergleich zu Darktable bislang, diese schwinden aber immer mehr…

Das Darktable-Logo...

Das Darktable-Logo…

Zum einen die Geschwindigkeit. Diesen Rückstand hat Darktable bislang auch noch nicht aufgeholt. Der andere war die Möglichkeit, mit Masken arbeiten zu können. Das und Weiteres wurde mit Darktable 1.4 nun eingeführt. Ein Blick auf die Neuerungen lohnt sich also.

Die Version 1.4 ist in den Ubuntu-Quellen bislang noch nicht zu haben bzw. nur über die PPA darktable-release von Pascal de Bruijn (einer der Entwickler; bitte trotzdem Hinweise zu Fremdpaketquellen beachten).

Erweiterbarkeit durch Lua-Scripts

Lua ist eine Scriptsprache, die besonders dafür eingesetzt wird, die Erweiterbarkeit von Anwendungen zu erhöhen. So nun auch bei Darktable. Die Community soll so dazu gebracht werden, Anforderungen, die es nicht als Standard-Feature in die Anwendung schaffen, als Plugin zu scripten.

Das Ganze funktioniert technisch so, dass beim Start des Programms ein Script namens luarc ausgeführt wird, sofern es entweder im Verzeichnis ~/.config/darktable oder unterhalb von /usr/share/darktable (bei Ubuntu und sofern über den Paketmanager installiert) zu finden ist. Zu bevorzugen ist für eigene Scripts natürlich die erste Variante.

Das Script kann also beim Programmstart direkt Aktionen ausführen, oder, was eher der Fall sein wird, zu diesem Zeitpunkt nur eigene Funktionen registrieren. Man „implementiert also einen Hook“ oder „hängt eine Aktion an ein Ereignis an“.

Ich führe hier mal die drei Beispiele auf, die auch das Team von Darktable publiziert hat. Einziger Unterschied ist, dass alle drei der Übersichtlichkeit halber in separate Scripts ausgelagert sind. Außerdem kommen sich hier die Funktionsnamen nicht in die Quere.

Wichtig: alle folgenden Pfadangaben sind relativ zu einem der beiden o.g. Basisverzeichnisse zu verstehen!

Erstes Beispiel: Import/Synchronisation automatisch bei Start

Wir erzeugen eine Datei namens lua/autoload.lua – mit folgendem Inhalt:

dt = require "darktable"
dt.preferences.register("myAutoload","load_directory","string","Bildverzeichnis","Dieses Verzeichnis wird beim Programmstart automatisch neu eingelesen","")

pcall(dt.database.import(dt.preferences.read("myAutoload","load_directory","string")))

In die Datei luarc wird außerdem folgende Zeile eingefügt:

require "autoload"

Nachdem die Anwendung frisch gestartet wurde, haben wir in den Einstellungen nun ein neues Eingabefeld Bildverzeichnis. Bei jedem Programmstart wird das dort hinterlegte Verzeichnis neu eingelesen.

Zweites Beispiel: Selektionspuffer über Tastenkombination

Wir erzeugen eine Datei namens lua/shortcuts/bouncebuffer.lua – mit folgendem Inhalt:

dt = require "darktable"
local bounce_buffer = {}

local function bounce_buf()
    bounce_buffer = dt.gui.selection(bounce_buffer)
end
dt.register_event("shortcut",bounce_buf,"Selektionen switchen")

In die Datei luarc wird außerdem folgende Zeile eingefügt:

require "shortcuts.bouncebuffer"

Wenn nun die Anwendung frisch gestartet wird, können wir eine Tastenkombination hinterlegen, mit der wir eine Selektion für eine spätere Verwendung sozusagen „in die Zwischenablagen legen“ können. Mit der gleichen Tastenkombination können wir sie wiederherstellen.

Drittes Beispiel: Alle rot markierten Bilder selektieren

Wir erzeugen eine Datei namens lua/shortcuts/selectallred.lua – mit folgendem Inhalt:

dt = require "darktable"
table = require "table"

local function select_all_red()
   local selection = {}
   for _,image in ipairs(dt.database) do
      if image.red then
         table.insert(selection,image)
      end
   end
   dt.gui.selection(selection)
end

dt.register_event("shortcut",select_all_red,"Alle rot markierten Bilder selektieren")

In die Datei luarc wird außerdem folgende Zeile eingefügt:

require "shortcuts.selectallred"

Wenn nun die Anwendung frisch gestartet wird, können wir eine Tastenkombination hinterlegen, mit der wird ganz einfach alle mit dem roten Marker versehenen Bilder selektieren können. Natürlich kann das Script bei Bedarf einfach auf eine andere Farbe abgeändert werden.

Was zur Lua-Schnittstelle noch zu erwähnen bleibt…

  • Wie man sieht können Module per require geladen werden. Die Module müssen dabei im Unterverzeichnis lua liegen.
  • Konfigurationsfelder, die man selbst hinzufügt, werden auf einem eigenen Reiter mit der Beschriftung Lua-Optionen angezeigt. Bislang sind nur einfache String-, Boolean- oder Zahlenwerte möglich.
  • Tastenkombinationen (bzw. Platzhalter dafür), die man selbst hinzufügt, werden im Konfigurations-Dialog auf dem Reiter Tastenkombinationen unterhalb der Rubrik Lua angezeigt. Bevor sie verwendet werden können, muss tatsächlich erst eine Tastenkombination zugewiesen werden.
  • Es bleibt abzuwarten, ob es eine zentrale und vertrauenswürdige Sammelstelle für solche Scripts seitens Darktable geben wird.
  • Per register_storage können weitere Export-Möglichkeiten realisiert werden. Als Beispiel wird ein Mosaik-Export über die selektierten Bilder angeführt. Je nach API-Angebot der Webseiten wäre aber auch ein Upload zu 500px, Pinterest oder wotsoever™ denkbar.
  • Wer sich in die ganze Lua-API von Darktable einlesen will, findet mittlerweile einen Abschnitt in der Dokumentation.

Masken

Der Lua-Teil ist nun recht lang ausgefallen. Trotzdem möchte ich noch zwei weitere interessante Erweiterungen erwähnen. Der für mich wichtigste ist die Einführung von Masken. Darüber kann schon auf Ebene der RAW-Bilder auf bestimmte Bildbereiche gesondert eingewirkt werden. Beispielsweise wird der Himmel etwas satter gemacht, zu dunkle Bereiche aufgehellt oder gezielt nachgeschärft – ohne dabei das gesamte Bild zu beeinflussen.
Dazu kann nun bei jedem Modul, das angewendet wird, eine Einschränkung auf eine Maske eingestellt werden. Die Maske kann dann entweder parametrisch, gezeichnet oder gemischt parametrisch und gezeichnet erstellt werden. In aller Kürze: das bedeutet im einfachsten Fall, dass man die Bereiche, die von dem Modul berührt werden sollen, nachzeichnet. Eine recht umfangreiche Einführung bietet das folgende Video von Robert Hutton:

Fokusvorschau auf dem Leuchttisch

Es gibt ein weiteres, neues Feature, das ich recht gelungen finde. Per Tastendruck kann man sich bereits auf dem Leuchttisch eine schnelle Vorschau auf die Bereiche geben lassen, die bei dem selektierten Bild im Fokus liegen.

Dazu muss man die Funktion zunächst einmal aktivieren. Im Konfigurations-Dialog auf dem Reiter GUI-Optionen muss das Häkchen Fokusbereiche markieren aktiviert werden. Selektiert man dann auf dem Leuchttisch ein Bild und drückt z für die Bildvorschau, dann werden auf dem Bild die Fokusbereiche farbig umrandet dargestellt. Rot bedeutet dabei sehr scharf, blau etwas weniger scharf.

Die Version 1.4 hat es also geschafft…

… dass ich meine Fotos nun erst einmal wieder mit Darktable bearbeiten werden. Ich hoffe, dass ich auch in der Praxis mit der Maskierungs-Funktion gut zurecht kommen werde.


Dieser Artikel wurde in der/den Kategorie(n) OSBN, Planet-U, Praxis veröffentlicht und mit den Tags , , , , versehen.

7 Kommentare zu Darktable legt nach – Version 1.4

  1. Kommentar von Lars Mielke
    18. April 2014, 23:01 Uhr.

    Vielleicht kann mir einer sagen, warum bei mir (Ubuntu und Darktable 1.4.1) seit Ewigkeiten der Export nach Google+ nicht funktioniert?
    Fehlermeldungen hinsichtlich der Authentification Methode. Im Netz finde ich absolut nichts.

    • Kommentar von Gerald
      26. April 2014, 09:45 Uhr.

      Hallo Lars,
      ich benutze selbst den G+ Export nicht. Derzeit habe ich bei mir Ubuntu 14.04 installiert und das Darktable aus den Ubuntu-Paketquellen (1.4). Damit funktioniert der Export aber, habe das gerade mal getestet. Musst du dich vielleicht einfach noch einmal neu authentifizieren?
      Gruß, Gerald
      P.S.: sorry, dass das Freischalten und die Beantwortung ein paar Tage gedauert hat.

      • Kommentar von Lars Mielke
        26. April 2014, 10:31 Uhr.

        Also ich habe, als ich die Exportfunktionen alle getestet habe, unter Ubuntu 13.10 und mit der aktuellen Entwickler-Version von Pascal d.B. gearbeitet. Was nicht funktioniert hat, war der G+ Export. Es hat wohl irgendwas mit der OAuth Authentifizierung zu tun. Aber jetzt habe ich auf 14.04 geupdated und werde es nun noch einmal versuchen.

        • Kommentar von Gerald
          26. April 2014, 10:35 Uhr.

          Wie gesagt: vielleicht musst du dich frisch authentifizieren. Hast du das mal probiert? Wenn du dein Google-Konto in den Online-Konten einträgst, dann läuft da in regelmäßigen Abständen die Authentifizierung ja auch aus und man muss sich neu anmelden.

          • Kommentar von Lars Mielke
            26. April 2014, 11:10 Uhr.

            Ja ich komme ja nicht mal bis zur Authentifizierung. Ich werde gleich auf eine Fehlerseite bei Google geleitet. Vielleicht poste ich das mal als Screenshot.

  2. Kommentar von Christoph
    20. Dezember 2014, 20:58 Uhr.

    Wie ist eigentlich der “Ideal“ Workflow, wenn ich z.B. 50 Bilder bearbeitet habe und dann die Bilder für verschiedene Auflösungen (Bilderrahmen 800×600, Bilschirm/TV 1920×1080,…) ausgeben möchte?

    • Kommentar von Gerald
      26. Februar 2015, 16:14 Uhr.

      Hallo Christoph. Sorry, habe deinen Kommentar jetzt erst gefunden.
      Hmm, weiß nicht so recht, an was du denkst. Die 50 Bilder markieren, Zielauflösung eingeben und exportieren? Was spricht dagegen? Und: hat jemand eine bessere Idee?
      Gruß, Gerald

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>