Desenvolvimento de plug-ins do Lightroom - vale a pena?

28

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?

David
fonte
Não consigo me aprofundar no desenvolvimento de plug-ins - realmente não procurei -, mas parece que seus usos são mais específicos para alguém que não precisa de fluxo de trabalho no Lightroom. Ou seja, depois de começar a usar o LR, você nunca precisará copiar a meta de um RAW para .jpg ou .psd, por exemplo, porque é disso que se trata o fluxo de trabalho.
11119 Dan Wolfgang
Isso é verdade, os exemplos que eu citei (teoricamente) nunca precisarão fazer novamente quando terminar minha importação inicial. No entanto, talvez seja o caso de outras tarefas que eu gostaria de automatizar no futuro? Eu não tenho certeza sobre isso. Mas se for fácil o suficiente para desenvolver plugins, então o aprendizado agora não me prejudicará e poderá ser benéfico no futuro. Se o desenvolvimento do plug-in for complexo, não quero me incomodar e confio que o Lightroom fará a maior parte do que eu preciso depois que minha biblioteca for criada.
David
Ah, sim, as opções de automação e conectividade são infinitas. Eu estava apenas apontando, porque, dependendo do tamanho da sua biblioteca, pode não valer a pena (pelo menos para mim não foi).
11114 Dan Wolfgang
Embora eu não conheça uma maneira de fazer isso usando o Lightroom, você pode criar um programa para alterar os dados EXIF ​​de todas as suas fotos. Verifique archive.msdn.microsoft.com/changexifwithcsharp e stackoverflow.com/questions/58649/… e stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net . Você mencionou que conhece C ++, acredito que você pode se envolver em C #
K ''
+1, uma vez que esta questão me deu a idéia de olhar para este SDK Lua :-)
Francesco

Respostas:

39

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.luaarquivo 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 WinDbgWindows ou Consoleno 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 dateTimeOriginalcampo 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.)

Warren Young
fonte
As limitações do SDK são realmente substanciais, as únicas ações oficialmente suportadas, de acordo com este guia, são adicionar destinos de exportação ou publicação, aplicar pós-processamento adicional na exportação ou adicionar campos de metadados personalizados. Qualquer ação que exija atualização de qualquer configuração / valor é, como a resposta descreve, provavelmente suportada até você tentar definir o valor atualizado.
Steven Cunningham
1
@StevenCunningham: Esse guia é um documento tutorial; não pretende listar de forma abrangente todas as coisas que você pode fazer com o SDK. Além do guia do programador, o SDK também inclui uma referência HTML. Existem algumas coisas que a Adobe documentou nessa referência que elas não abordaram no guia do programador de PDF que você aponta. Veja a LrPhoto:setRawMetadata()seção, por exemplo.
Warren Young
1
Boa resposta - +1.
D. Lambert
4

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.

Joe
fonte
Certamente, um plug-in oferecerá uma solução de automação mais refinada, esse é um tipo de proporção extrema e depende do sistema operacional. Presumo que os plugins sejam (mais ou menos) portáveis ​​entre o Windows e o OSX.
26512 Francesco
1
@Francesco - Tenho certeza que você está certo, mas você provavelmente precisará de muito mais habilidades de programação e conhecimento da API LightRoom (ou o que eles chamam de interface para gravadores de macro) para seguir esse caminho. Embora um número razoável de pessoas faça inicialização múltipla ou use vms, a maioria das pessoas provavelmente adere a um sistema operacional e existem processadores de macro semelhantes para Linux, Windows e OSX. A parte difícil é acertar a sequência de ações. Para coisas mais simples , a recodificação de um processador de macro para outro não é muito difícil.
31412 Joe
Entendo o seu ponto de vista, mas, na minha opinião, está um pouco fora do escopo, dada a pergunta original (o OP é bem versado em uma série de idiomas, mas não em Lua). De qualquer forma, não achei que sua resposta merecesse voto negativo, uma vez que fornece uma possível solução para o problema em questão (é um tipo de abordagem imediata, eu diria).
27512 Francesco
Esta é certamente uma opção válida, e algo que pensei um pouco. Eu acho que preferiria uma abordagem específica do Lightroom, que parece ter melhor longevidade - prevejo que a API do Lightroom mudará menos de versão para versão do que uma solução de macro dependente do SO.
David
2

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 arquivos filenames_fielde alguns parâmetros adicionais para o lote processamento em rating_field):

f:push_button {
      title = "Update",
      action = function()
        import "LrTasks".startAsyncTask( function()
          logs_field.value = "Starting search\n"

          local catalog = import "LrApplication".activeCatalog()
          catalog:withWriteAccessDo("Batch set rating", function( context )
            for i,photo in ipairs(catalog:getAllPhotos()) do
              for fname in string.gmatch(filenames_field.value, "%w+") do
                if string.find(photo:getFormattedMetadata('fileName'), fname) then
                  logs_field.value = logs_field.value .. "Found filename: " .. fname .. "\n"
                  photo:setRawMetadata('label', rating_field.value)
                  photo:setRawMetadata('colorNameForLabel', rating_field.value)
                end
              end
            end
          end)
          logs_field.value = logs_field.value .. "Done...\n"
        end)
      end
 }

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 getAllPhotoscom getMultipleSelectedOrAllPhotosno 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.

SztupY
fonte