J'ai récemment mis à niveau mon flux de travail d'organisation et de gestion de photos de "rien du tout" vers Lightroom 4, et bien que je sois généralement très satisfait du logiciel, une fonctionnalité qui fait cruellement défaut est la possibilité d'enregistrer n'importe quel type de macros ou de scripts pour automatiser tâches répétitives - au cours de ma migration vers lightroom, il y a eu beaucoup de tâches répétitives que je voulais faire, et je me demande s'il vaut la peine d'apprendre à écrire des plugins LR pour effectuer certaines de ces tâches. Pour vous donner des exemples des types de choses que je veux automatiser:
- Dans un grand groupe de photos RAW + PSD + JPG empilées, sélectionnez le fichier dans chaque pile avec l'extension JPG et placez-le en haut de la pile
- Effectuer une copie de masse des métadonnées d'un fichier RAW (existant) vers un fichier JPEG (existant)
Je peux voir beaucoup d'autres façons dont les scripts pourraient rendre la gestion des images dans Lightroom encore plus facile qu'elle ne l'est actuellement. Ma question comporte alors trois parties:
1) Est-il difficile d'écrire des plugins Lightroom? Je connais bien un certain nombre de langages de programmation (C / C ++, Python, Perl), mais je n'ai rien fait avec Lua. L'API Lightroom est-elle facile à connecter et nécessite-t-elle des outils spécialisés pour le développement?
2) Puis-je écrire des scripts pour effectuer facilement le type de tâches que je décris ci-dessus?
3) Existe-t-il de bonnes ressources ou des didacticiels que je peux lire pour commencer à développer le plugin Lightroom?
Réponses:
Lua est probablement le langage de programmation le plus simple et le plus propre que je connaisse. (Et j'en connais quelques-uns .)
La simplicité de Lua est également sa plus grande faiblesse: étant un petit langage propre par conception, il ne contient pas beaucoup de choses que vous vous attendriez à trouver en venant d'un langage de qualité industrielle comme Java ou d'une batterie -inclus le langage comme Python.
Lua est conçu pour être étendu par C, ce qui signifie dans ce cas le SDK de Lightroom. C'est formidable si Adobe a fait le travail pour fournir les outils dont vous avez besoin qui ne sont pas intégrés à Lua, mais de temps en temps, vous vous retrouverez probablement à appeler des outils externes pour faire avancer les choses.
La seule partie délicate à ce sujet est que vous devez structurer votre code source d'une manière particulière et fournir un
Info.lua
fichier spécial pour informer Lightroom de votre plugin. Tout est expliqué dans la documentation du SDK . Le SDK comprend plusieurs plugins fonctionnels pour commencer, y compris un plugin "hello world" assez élaboré qui peut être récupéré pour un code de démarrage utile.Vous pouvez vous en tirer avec un simple éditeur de texte.
Il n'y a pas de fonction de débogage intégrée à Lightroom, mais il existe une fonction de journalisation du débogage dans le SDK. Vous pouvez intercepter ces messages
WinDbg
sur Windows ouConsole
sur OS X.Un développement plus récent est l' IDE open source ZeroBrane Studio Lua. Vous pouvez l'utiliser à la place d'un autre éditeur de texte, mais le truc vraiment cool est qu'il est possible de le joindre à votre plugin en cours d'exécution qui vous permet de le déboguer pendant son exécution. J'ai essayé cela, et cela aide à réduire le temps de cycle de débogage de correction / rechargement / redémarrage.
Je ne pense pas que l'une ou l'autre tâche soit 100% réalisable en utilisant uniquement le SDK Lightroom, mais elle peut faire beaucoup de travail pour vous.
Voici un code vaguement semblable à Lua pour vous y conduire presque tout le temps:
Malheureusement, je ne vois aucun moyen dans le SDK de faire l'action de cette ligne de commentaire la plus profonde, à partir de LR 5 au moins. Le mieux que je puisse trouver est d'appeler
catalog:setSelectedPhotos(peer)
, puis de laisser à l'utilisateur le soin de cliquer sur le badge numérique pour réorganiser la pile.Vous pouvez le faire avec le SDK existant, mais il y a des limitations.
Par exemple, alors que vous pouvez lire la valeur du
dateTimeOriginal
champ EXIF , il n'y a aucune possibilité dans le SDK lui-même pour définir la valeur. Je suppose que c'est parce que les développeurs de Lightroom ont décidé que cela ne devrait jamais être modifié par programme, que ce sont des informations précieuses de la caméra. (Pourquoi cela devrait-il être le cas lorsqu'il existe un élément de menu Métadonnées> Modifier l'heure de capture ... Je ne sais pas, mais vous l'avez.)Mais, chaque fois que le SDK essaie de vous piéger avec l'une de ces limitations, il y a souvent une trappe d'échappement. Vous pouvez installer ExifTool et l'appeler depuis Lua, par exemple. Ce n'est pas une solution parfaite, car vous avez alors une incohérence entre les métadonnées du catalogue et les métadonnées de la photo, mais Lightroom remarquera et apposera un badge sur la photo qui, lorsque vous cliquez dessus, vous permettra de résoudre le conflit en rechargeant les métadonnées à partir de la photo.
(Vous souhaiterez que l'option "Écrire automatiquement les modifications dans XMP" soit définie dans la boîte de dialogue Paramètres du catalogue lors de l'utilisation d'un tel plug-in. Sinon, vous faciliterez la création d'un conflit bidirectionnel, où les métadonnées du catalogue et des photos ont Lightroom ne sait pas comment fusionner les deux ensembles de métadonnées; il vous fait en choisir un et il écrase l'autre copie de métadonnées avec.)
la source
LrPhoto:setRawMetadata()
section, par exemple.Je ne connais pas Lightroom (encore - je l'ai mais je ne l'ai pas encore installé), mais en fonction de la complexité de ce que vous essayez de faire, vous voudrez peut-être regarder un outil de macro / automatisation de clavier à l'échelle du système comme AutoHotKey . Il vous permet d'enregistrer ou de programmer n'importe quelle séquence de touches que vous pouvez comprendre, puis, lorsque vous appuyez sur une touche de raccourci, il les lit dans votre programme (comme LightRoom) afin que - en ce qui concerne le programme - il ressemble comme vous l'avez tapé. Cela vous permet d'automatiser toutes sortes de choses sans avoir à modifier vos programmes d'application.
la source
Je voulais juste voir comment faire un traitement par lots basé sur les noms de fichiers dans Lightroom, et pour une raison quelconque, cela semblait être la manière la plus simple de le faire via l'API. Sur la base du message de @ Warren, j'ai réussi à créer cette boucle interne pour un bouton sur un formulaire, où je pouvais également mettre un champ de texte pour la journalisation (
logs_field
), et certaines valeurs d'entrée (comme un champ de texte pour inclure les noms de fichiersfilenames_field
et certains paramètres supplémentaires pour le lot traitement enrating_field
):Cet extrait traverserait certains modèles de noms de fichiers, et appliquer une étiquette à toutes les photos (vous pouvez remplacer
getAllPhotos
avecgetMultipleSelectedOrAllPhotos
dans le cas où il vous suffit de l' exécuter sur certaines de vos photos) qui correspondent à ces modèles. J'ai dû le faire car j'avais déjà marqué les photos à l'extérieur de Lightroom, mais j'avais besoin d'un moyen facile de déplacer ces balises dans LR également en fonction des noms de fichiers.J'ai également mis tout le projet sur github , mais l'extrait ci-dessus devrait être bien utilisé comme base pour les tâches de traitement par lots basées sur le nom de fichier.
la source