Atualizei recentemente meu fluxo de trabalho de organização e gerenciamento de fotos de "nada" para o Lightroom 4 e, embora geralmente esteja muito satisfeito com o software, um recurso que falta muito é a capacidade de gravar qualquer tipo de macro ou script para automatizar tarefas repetitivas - durante o curso da minha migração para o lightroom, houve muitas tarefas repetitivas que eu queria fazer, e me pergunto se vale a pena aprender a escrever plug-ins LR para executar algumas dessas tarefas. Para dar exemplos dos tipos de coisas que eu quero automatizar:
- Em um grande grupo de fotos RAW + PSD + JPG empilhadas, selecione o arquivo em cada pilha com a extensão JPG e coloque-a no topo da pilha
- Executar uma cópia em massa de metadados de um arquivo RAW (existente) para um arquivo JPEG (existente)
Posso ver muitas outras maneiras pelas quais os scripts podem tornar o gerenciamento de imagens no Lightroom ainda mais fácil do que é agora. Minha pergunta então tem três partes:
1) Quão difícil é escrever plugins do Lightroom? Sou versado em várias linguagens de programação (C / C ++, Python, Perl), mas não fiz nada com Lua. A API do Lightroom é fácil de conectar e requer ferramentas especializadas para o desenvolvimento?
2) Posso escrever scripts para executar facilmente o tipo de tarefas que descrevi acima?
3) Existem bons recursos ou tutoriais que posso ler para começar o desenvolvimento de plug-ins do Lightroom?
fonte
Respostas:
Lua é provavelmente a linguagem de programação mais simples e limpa que conheço. (E eu sei alguns .)
A simplicidade de Lua também é sua maior fraqueza: sendo uma linguagem pequena e limpa por design, não possui muitas coisas incorporadas que você esperaria encontrar quando viesse de uma linguagem de nível industrial como Java ou baterias linguagem incluída, como Python.
Lua foi projetado para ser estendido por C, que neste caso significa o SDK do Lightroom. Isso é ótimo se a Adobe tiver feito o trabalho para fornecer as ferramentas necessárias que não estão incorporadas ao Lua, mas de vez em quando você provavelmente se encontrará chamando por ferramentas externas para fazer as coisas.
A única parte complicada é que você precisa estruturar seu código-fonte de uma maneira específica e fornecer um
Info.lua
arquivo especial para informar ao Lightroom sobre seu plug-in. Está tudo explicado nos documentos do SDK . O SDK inclui vários plugins funcionais para começar, incluindo um plug-in "olá mundo" bastante elaborado que pode ser eliminado para obter um código inicial útil.Você pode conviver com apenas um editor de texto.
Não há recurso de depuração embutido no Lightroom, mas há um recurso de log de depuração no SDK. Você pode capturar essas mensagens no
WinDbg
Windows ouConsole
no OS X.Um desenvolvimento mais recente é o código-fonte aberto ZeroBrane Studio Lua IDE. Você pode usar isso em vez de outro editor de texto, mas o mais interessante é que é possível anexá-lo ao seu plugin em execução, o que permite depurá-lo à medida que ele é executado. Eu tentei isso e ajuda a reduzir o tempo do ciclo de correção / recarregar / reiniciar.
Acho que nenhuma das tarefas é 100% executável usando apenas o SDK do Lightroom, mas pode fazer muito trabalho para você.
Aqui está um código vagamente semelhante ao Lua para levá-lo a quase todo o caminho:
Infelizmente, não vejo uma maneira no SDK de executar a ação dessa linha de comentário mais interna, pelo menos no LR 5. O melhor que posso fazer é ligar
catalog:setSelectedPhotos(peer)
e deixar que o usuário clique no crachá de número para reordenar a pilha.Você pode fazer isso com o SDK existente, mas há limitações.
Por exemplo, enquanto você pode ler o valor do
dateTimeOriginal
campo EXIF , não há nenhum recurso no próprio SDK para definir o valor. Suponho que isso ocorre porque os desenvolvedores do Lightroom decidiram que isso nunca deveria ser alterado programaticamente, que são informações preciosas da câmera. (Por que esse deveria ser o caso quando há um item de menu Metadados> Editar tempo de captura ... não sei, mas você o possui.)Porém, sempre que o SDK tenta prendê-lo com uma dessas limitações, geralmente há uma escotilha de escape. Você pode instalar o ExifTool e chamá-lo de Lua, por exemplo. Essa não é uma solução perfeita, porque você tem uma inconsistência entre os metadados do catálogo e os metadados da foto, mas o Lightroom notará e colocará um distintivo na foto, que quando clicada permitirá resolver o conflito, recarregando os metadados da foto.
(Você deseja definir a opção "Gravar automaticamente alterações no XMP" na caixa de diálogo Configurações do catálogo ao usar esse plug-in. Caso contrário, você facilita a criação de um conflito de mão dupla, onde os metadados do catálogo e da foto têm O Lightroom não sabe como mesclar os dois conjuntos de metadados; faz você escolher um e substitui a outra cópia de metadados por ele.)
fonte
LrPhoto:setRawMetadata()
seção, por exemplo.Ainda não conheço o Lightroom (ainda - já o instalei, mas ainda não o instalei), mas, dependendo da complexidade do que você está tentando fazer, talvez queira examinar uma ferramenta de macro / automação de teclado para todo o sistema como o AutoHotKey . Permite gravar ou programar qualquer sequência de pressionamentos de teclas que você possa descobrir e, quando você pressiona uma tecla de atalho, as reproduz novamente em seu programa (como o LightRoom), para que - no que diz respeito ao programa - pareça como você digitou. Isso permite que você automatize todos os tipos de coisas sem ter que modificar seus programas aplicativos.
fonte
Eu só queria ver como fazer o processamento em lote com base nos nomes de arquivos no Lightroom e, por algum motivo, parecia que a maneira mais fácil de fazer isso era através da API. Com base na postagem de @ Warren, eu consegui criar esse loop interno para um botão em um formulário, onde eu também poderia colocar um campo de texto para log (
logs_field
) e alguns valores de entrada (como um campo de texto para incluir os nomes de arquivosfilenames_field
e alguns parâmetros adicionais para o lote processamento emrating_field
):Este trecho iria passar por alguns padrões de nome de arquivo, e aplicar um rótulo para todas as fotos (você pode querer substituir
getAllPhotos
comgetMultipleSelectedOrAllPhotos
no caso de você só precisa executá-lo em algumas de suas fotos) que correspondem a esses padrões. Eu tive que fazer isso, pois já havia marcado as fotos fora do Lightroom, mas precisava de uma maneira fácil de mover essas tags para o LR também com base nos nomes dos arquivos.Eu coloquei todo o projeto também no github , mas o snippet acima deve ser bom para usar como base para tarefas de processamento em lote baseadas em nome de arquivo.
fonte