Eu não fiz nada com Lua
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.
É fácil conectar a API do Lightroom
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.
requer ferramentas especializadas para o desenvolvimento?
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 ou Console
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.
Posso escrever scripts para executar facilmente o tipo de tarefas que descrevi acima?
Acho que nenhuma das tarefas é 100% executável usando apenas o SDK do Lightroom, mas pode fazer muito trabalho para você.
selecione o arquivo em cada pilha com a extensão JPG e coloque-o no topo da pilha
Aqui está um código vagamente semelhante ao Lua para levá-lo a quase todo o caminho:
for photo in catalog:getMultipleSelectedOrAllPhotos() do
for peer in photo:stackInFolderMembers() do
if string.find('%.jpg$', peer:getFormattedMetadata('fileName')) then
-- *mumble* move 'peer' photo to top of stack *mumble*
break
end
end
end
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.
Executar uma cópia em massa de metadados de um arquivo RAW (existente) para um arquivo JPEG (existente)
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.)