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 ajoute une nouvelle préférence au menu des préférences de darktable, scp_export et export_path nous permettent d’identifier de manière unique notre préférence. Ces paramètres sont utilisés lorsqu’on lit la valeur de la préférence. Le paramètre string indique au moteur Lua que la préférence est de type chaîne. Il peut également s’agir d’un entier, d’un nom de fichier ou de l’un des types détaillés dans le manuel de l’API relatif à types_lua_pref_type. On a alors le libellé de la préférence dans le menu des préférences, l’info-bulle au survol de la valeur et une valeur par défaut.

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