Exporter des images avec Lua

Jusqu’à présent, nous avons appris à utiliser Lua pour adapter darktable à notre flux de travail particulier. Voyons maintenant comment utiliser Lua pour exporter facilement des images vers un service en ligne. Si vous êtes capable de téléverser une image vers un service via la ligne de commande, vous pouvez utiliser Lua pour intégrer cela dans l’interface utilisateur de darktable.

Dans l’exemple suivant, nous utilisons Lua pour exporter via scp. Un nouveau type de stockage apparaît dans l’interface utilisateur de darktable qui exporte les images vers une cible distante via le mécanisme de copie de ssh.

darktable = require "darktable"

darktable.preferences.register("scp_export","export_path",
  "string","target SCP path",
  "Complete path to copy to. Can include user and hostname","")

darktable.register_storage("scp_export","Export via scp",
  function( storage, image, format, filename,
     number, total, high_quality, extra_data)
    if not darktable.control.execute("scp "..filename.." "..
      darktable.preferences.read("scp_export",
         "export_path","string")) then
      darktable.print_error("scp failed for "..tostring(image))
    end
end)

darktable.preferences.register will add a new preference to darktable’s preferences menu, scp_export and export_path allow us to uniquely identify our preference. These fields are reused when we read the value of the preference. The string field tells the lua engine that the preference is a string. It could also be an integer, a filename or any of the types detailed in the API manual relating to types_lua_pref_type. We then have the label for the preference in the preference menu, the tooltip when hovering over the value and a default value.

darktable.register_storage est l’appel qui enregistre réellement le nouveau type de stockage. Le premier argument est le nom du type de stockage, le second est l’étiquette qui est affichée dans l’interface utilisateur et le dernier est une fonction à appeler sur chaque image. Cette fonction a beaucoup de paramètres, mais filename est le seul que nous utilisons dans cet exemple. Il contient le nom d’un fichier temporaire de l’image exportée par le moteur de darktable.

Ce code fonctionne mais il a quelques limitations. Ce n’est qu’un exemple simple après tout :

  • Nous utilisons les préférences pour configurer le chemin cible. Il serait plus agréable d’ajouter un élément à l’interface utilisateur d’exportation dans darktable. Nous détaillerons comment procéder dans la section suivante.

  • Nous ne vérifions pas la valeur renvoyée de scp. Cette commande peut échouer, en particulier si l’utilisateur n’a pas correctement défini la préférence.

  • Ce script ne peut pas lire d’entrée utilisateur. Le scp distant doit utiliser une copie sans mot de passe – scp ne peut pas être fourni facilement avec un mot de passe, nous allons donc le laisser ainsi.

  • Aucun message ne s’affiche une fois l’exemple terminé, seule la barre de progression en bas à gauche indique à l’utilisateur que le travail est terminé.

  • Nous utilisons coroutine.yield pour appeler un programme externe. L’appel os.execute empêcherait d’autres codes Lua de s’exécuter.

translations