Sviluppo di plug-in Lightroom: ne vale la pena?


28

Di recente ho aggiornato il mio flusso di lavoro di organizzazione e gestione delle foto da "niente" a Lightroom 4 e, sebbene in genere sia molto soddisfatto del software, una caratteristica che è gravemente carente è la possibilità di registrare qualsiasi tipo di macro o script da automatizzare attività ripetitive: nel corso della mia migrazione a Lightroom, ci sono state molte attività ripetitive che volevo fare e mi chiedo se valga la pena imparare a scrivere plugin LR per svolgere alcune di queste attività. Per darti esempi dei tipi di cose che voglio automatizzare:

  • In un folto gruppo di foto RAW + PSD + JPG in pila, seleziona il file in ogni pila con l'estensione JPG e rendilo in cima alla pila
  • Esegue una copia di massa di metadati da un file RAW (esistente) a un file JPEG (esistente)

Vedo molti altri modi in cui gli script potrebbero rendere la gestione delle immagini in Lightroom ancora più semplice di quanto non sia ora. La mia domanda ha quindi tre parti:

1) Quanto è difficile scrivere plugin Lightroom? Sono esperto in numerosi linguaggi di programmazione (C / C ++, Python, Perl), ma non ho fatto nulla con Lua. L'API di Lightroom è facile da collegare e richiede strumenti specializzati per lo sviluppo?

2) Posso scrivere script per eseguire facilmente il tipo di attività che descrivo sopra?

3) Esistono buone risorse o tutorial che posso leggere per iniziare con lo sviluppo del plug-in Lightroom?


Non riesco a valutare lo sviluppo del plug-in - non ci ho mai pensato - ma sembra che i tuoi usi siano più specifici per qualcuno che non passa da un flusso di lavoro a Lightroom. Cioè, una volta che inizi a utilizzare LR, non avrai mai bisogno di copiare meta da un RAW in .jpg o .psd, ad esempio perché questo è il flusso di lavoro.
Dan Wolfgang,

È vero, gli esempi che fornisco (teoricamente) non dovranno mai più essere ripetuti una volta terminata l'importazione iniziale. Tuttavia, forse è il caso che ci siano altri compiti che vorrei poter automatizzare in futuro? Non sono sicuro su questo punto. Ma se è abbastanza facile sviluppare plugin, l'apprendimento ora non mi farà male e potrebbe essere utile in futuro. Se lo sviluppo di plug-in è complesso, non voglio preoccuparmi e confiderò che Lightroom farà la maggior parte di ciò di cui ho bisogno una volta creata la mia libreria.
David,

Oh, sì, le opzioni di automazione e connettività sono infinite. Lo stavo solo sottolineando perché, a seconda delle dimensioni della tua biblioteca, potrebbe non valere la pena (almeno per me non lo era).
Dan Wolfgang,

mentre non conosco un modo per farlo usando Lightroom, puoi effettivamente creare un programma per modificare i dati EXIF ​​per tutte le tue foto. Controlla archive.msdn.microsoft.com/changexifwithcsharp e stackoverflow.com/questions/58649/… e stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net . Hai detto che conosci C ++, credo che puoi entrare in C #
K ''

+1, poiché questa domanda mi ha dato l'idea di guardare questo Lua sdk :-)
Francesco

Risposte:


39

Non ho fatto niente con Lua

Lua è probabilmente il linguaggio di programmazione più semplice e pulito che conosca. (E ne conosco alcuni .)

La semplicità di Lua è anche la sua più grande debolezza: essendo un linguaggio piccolo e pulito in base alla progettazione, non ha molte cose integrate che ti aspetteresti di trovare quando provieni da un linguaggio di livello industriale come Java o una batteria -incluso linguaggio come Python.

Lua è progettato per essere esteso da C, che in questo caso significa SDK di Lightroom. È fantastico se Adobe ha fatto il lavoro per fornire gli strumenti di cui hai bisogno che non sono integrati in Lua, ma ogni tanto probabilmente ti ritroverai a chiamare strumenti esterni per fare le cose.

L'API di Lightroom è facile da collegare

L'unica parte difficile è che devi strutturare il tuo codice sorgente in un modo particolare e fornire un Info.luafile speciale per dire a Lightroom del tuo plugin. È tutto spiegato nei documenti SDK . L'SDK include diversi plug-in funzionanti da cui iniziare, incluso un plug-in "ciao mondo" abbastanza elaborato che può essere ricercato per un utile codice di avvio.

richiede strumenti specializzati per lo sviluppo?

Puoi cavartela solo con un editor di testo.

In Lightroom non è integrata alcuna funzione di debug, ma nell'SDK è presente una funzione di registrazione del debug . Puoi catturare questi messaggi WinDbgsu Windows o Consolesu OS X.

Uno sviluppo più recente è l' IDE open source ZeroBrane Studio Lua. Puoi usarlo al posto di un altro editor di testo, ma il bello è che è possibile collegarlo al tuo plugin in esecuzione che ti consente di eseguire il debug mentre viene eseguito. Ho provato questo, e aiuta a ridurre il tempo di ciclo di debug di correzione / ricarica / riavvio.

Posso scrivere script per eseguire facilmente il tipo di attività che descrivo sopra?

Non credo che nessuna delle due attività sia fattibile al 100% usando solo Lightroom SDK, ma può fare molto del lavoro per te.

selezionare il file in ogni stack con l'estensione JPG e renderlo in cima allo stack

Ecco un po 'di codice vagamente simile a Lua per portarti quasi fin lì:

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

Sfortunatamente, non vedo un modo nell'SDK di eseguire l'azione più interna della linea di commento, almeno a partire da LR 5. Il meglio che posso trovare è chiamare catalog:setSelectedPhotos(peer), quindi lasciare all'utente di fare clic sul badge numerico per riordinare lo stack.

Esegue una copia di massa di metadati da un file RAW (esistente) a un file JPEG (esistente)

È possibile eseguire alcune operazioni con l'SDK esistente, ma esistono delle limitazioni.

Ad esempio, mentre è possibile leggere il valore del dateTimeOriginalcampo EXIF , nell'SDK stesso non è possibile impostare il valore. Suppongo che ciò sia dovuto al fatto che gli sviluppatori di Lightroom hanno deciso che non dovrebbe mai essere modificato a livello di codice, che si tratta di informazioni preziose fornite dalla fotocamera. (Perché dovrebbe essere così quando ci sono Metadata> Modifica tempo di acquisizione ... voce di menu che non conosco, ma il gioco è fatto.)

Ma, ogni volta che l'SDK tenta di intrappolarti con una di queste limitazioni, c'è spesso un tratteggio di fuga. Ad esempio, è possibile installare ExifTool e richiamarlo da Lua. Questa non è una soluzione perfetta, perché hai un'incongruenza tra i metadati del catalogo e i metadati della foto, ma Lightroom noterà e metterà un badge sulla foto, che quando si fa clic ti consentirà di risolvere il conflitto ricaricando i metadati dalla foto.

(Ti consigliamo di avere l'opzione "Scrivi automaticamente le modifiche in XMP" impostata nella finestra di dialogo Impostazioni catalogo quando usi un tale plug-in. Altrimenti, rendi più semplice creare un conflitto a doppio senso, dove sia il catalogo che i metadati delle foto hanno è cambiato. Lightroom non sa come unire i due set di metadati; ti fa scegliere uno e sovrascrive gli altri metadati con esso.)


Le limitazioni dell'SDK sono in realtà sostanziali, le uniche azioni che sono ufficialmente supportate, come in questa guida sono l'aggiunta di destinazioni di esportazione o pubblicazione, l'applicazione di post-elaborazione aggiuntiva all'esportazione o l'aggiunta di campi di metadati personalizzati. Qualsiasi azione che richiede l'aggiornamento di qualsiasi impostazione / valore è, come descritto nella risposta, probabilmente supportata fino a quando non si tenta di impostare il valore aggiornato.
Steven Cunningham,

1
@StevenCunningham: quella guida è un documento tutorial; non intende elencare in modo esaustivo tutte le operazioni che è possibile eseguire con l'SDK. Oltre alla guida del programmatore, l'SDK include anche un riferimento HTML. Ci sono alcune cose che Adobe ha documentato in quel riferimento che non hanno trattato nella guida del programmatore PDF a cui fai riferimento. Vedi la LrPhoto:setRawMetadata()sezione, per esempio.
Warren Young,

1
Bella risposta - +1.
D. Lambert,

4

Non conosco Lightroom (ancora - ce l'hai ma non l'ho ancora installato), ma a seconda della complessità di ciò che stai cercando di fare, potresti voler guardare uno strumento di macro / automazione della tastiera a livello di sistema come AutoHotKey . Ti consente di registrare o programmare qualsiasi sequenza di tasti che puoi capire e poi, quando premi un tasto di scelta rapida, li riproduce nel tuo programma (come LightRoom) in modo che - per quanto riguarda il programma - appaia come hai digitato. Ciò ti consente di automatizzare ogni sorta di cose senza dover modificare i tuoi programmi applicativi.


Sicuramente un plugin offrirà una soluzione di automazione più fine, questa è una sorta di rapporto estremo e dipendente dal sistema operativo. Suppongo che i plugin siano (più o meno) portatili tra Windows e OSX.
Francesco,

1
@Francesco - Sono sicuro che hai ragione, ma probabilmente hai bisogno di molte più capacità di programmazione e di una conoscenza dell'API LightRoom (o di qualunque cosa chiamino l'interfaccia per i macro writer) per seguire questa strada. Sebbene un discreto numero di persone esegua il multiboot o usi vms, la maggior parte delle persone probabilmente si attacca a un solo sistema operativo e ci sono processori macro simili per Linux, Windows e OSX. La parte difficile è ottenere la sequenza di azioni corretta. Per la maggior parte delle cose semplici , la ricodifica da un processore macro a un altro non è molto difficile.
Joe,

Vedo il tuo punto, ma a mio avviso è un po 'fuori portata data la domanda originale (OP è ben versato in una serie di lingue, ma non Lua). In ogni caso, non pensavo che la tua risposta meritasse di essere sottoposta a downgrade poiché fornisce una possibile soluzione al problema attuale (è una specie di approccio out-of-the-box, direi).
Francesco,

Questa è certamente un'opzione valida e qualcosa a cui ho pensato un po '. Penso che preferirei un approccio specifico per Lightroom, che sembra avere una migliore longevità - prevedo che l'API Lightroom cambierà meno da una versione all'altra rispetto a una soluzione macro dipendente dal sistema operativo.
David,

2

Volevo solo vedere come eseguire l'elaborazione batch in base ai nomi dei file in Lightroom e per qualche motivo sembrava che il modo più semplice per farlo fosse attraverso l'API. Sulla base del post di @ Warren sono riuscito a creare questo ciclo interno per un pulsante in un modulo, dove ho anche potuto mettere un campo di testo per la registrazione ( logs_field) e alcuni valori di input (come un campo di testo per includere i nomi dei file filenames_fielde alcuni parametri aggiuntivi per il batch elaborazione in 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
 }

Questo frammento sarebbe passare attraverso alcuni modelli di nomi di file, e applicare un'etichetta a tutte le foto (si potrebbe desiderare di sostituire getAllPhotoscon getMultipleSelectedOrAllPhotosnel caso in cui avete solo bisogno di eseguire sul alcune delle vostre immagini) che corrispondono a tali modelli. Ho dovuto farlo poiché avevo già taggato le foto all'esterno di Lightroom ma avevo bisogno di un modo semplice per spostare quei tag in LR, anche in base ai nomi dei file.

Ho messo anche l' intero progetto su github , ma lo snippet di cui sopra dovrebbe andare bene come base per le attività di elaborazione batch basate su nome file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.