Desarrollo de complementos de Lightroom: ¿vale la pena?

28

Recientemente, actualicé mi organización de fotos y el flujo de trabajo de administración de "nada en absoluto" a Lightroom 4, y aunque generalmente estoy muy satisfecho con el software, una característica que le falta es la capacidad de grabar cualquier tipo de macros o scripts para automatizar tareas repetitivas: durante el curso de mi migración a lightroom, ha habido muchas tareas repetitivas que he querido hacer, y me pregunto si vale la pena aprender a escribir complementos LR para realizar algunas de estas tareas. Para darle ejemplos de los tipos de cosas que quiero automatizar:

  • En un gran grupo de fotos RAW + PSD + JPG apiladas, seleccione el archivo en cada pila con la extensión JPG y colóquelo en la parte superior de la pila
  • Realizar una copia masiva de metadatos de un archivo RAW (existente) a un archivo JPEG (existente)

Puedo ver muchas otras formas en que los scripts podrían hacer que la administración de imágenes dentro de Lightroom sea aún más fácil de lo que es ahora. Mi pregunta tiene tres partes:

1) ¿Qué tan difícil es escribir complementos de Lightroom? Estoy bien versado en varios lenguajes de programación (C / C ++, Python, Perl), pero no he hecho nada con Lua. ¿La API de Lightroom es fácil de conectar y requiere herramientas especializadas para el desarrollo?

2) ¿Puedo escribir scripts para realizar fácilmente el tipo de tareas que describo anteriormente?

3) ¿Hay buenos recursos o tutoriales que pueda leer para comenzar a desarrollar el complemento de Lightroom?

David
fuente
No puedo opinar sobre el desarrollo de complementos, realmente no lo he investigado, pero parece que sus usos son más específicos para alguien que no pasa de un flujo de trabajo a Lightroom. Es decir, una vez que comience a usar LR, nunca tendrá la necesidad de copiar metadatos de un RAW a .jpg o .psd, por ejemplo, porque de eso se trata el flujo de trabajo.
Dan Wolfgang
Es cierto, los ejemplos que doy (teóricamente) nunca tendrán que volver a hacerlo una vez que haya terminado con mi importación inicial. Sin embargo, ¿quizás sea el caso de que hay otras tareas que me gustaría poder automatizar en el futuro? No estoy seguro de esto. Pero si es bastante fácil desarrollar complementos, aprender ahora no me perjudicará y podría ser beneficioso en el futuro. Si el desarrollo del complemento es complejo, no quiero molestarme y confiaré en que Lightroom hará la mayor parte de lo que necesito una vez que se haya creado mi biblioteca.
David
Ah, sí, las opciones de automatización y conectividad son infinitas. Solo lo señalaba porque, dependiendo del tamaño de su biblioteca, puede que no valga la pena el esfuerzo (al menos, para mí no lo fue).
Dan Wolfgang
Si bien no conozco una forma de hacerlo con Lightroom, en realidad puede crear un programa para cambiar los datos EXIF ​​de todas sus fotos. Consulte archive.msdn.microsoft.com/changexifwithcsharp y stackoverflow.com/questions/58649/… y stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net . Mencionaste que conoces C ++, creo que puedes meterte en C #
K ''
+1, ya que esta pregunta me dio la idea de mirar este Lua sdk :-)
Francesco

Respuestas:

39

No he hecho nada con Lua.

Lua es probablemente el lenguaje de programación más simple y limpio que conozco. (Y conozco algunos ).

La simplicidad de Lua también es su mayor debilidad: al ser un lenguaje pequeño y limpio por diseño, no tiene muchas cosas incorporadas que esperaría encontrar cuando viene de un lenguaje de grado industrial como Java, o baterías -incluido lenguaje como Python.

Lua está diseñado para ser extendido por C, que en este caso significa el SDK de Lightroom. Eso es genial si Adobe ha hecho el trabajo para proporcionar las herramientas que necesita que no están integradas en Lua, pero de vez en cuando probablemente se encontrará llamando a herramientas externas para hacer las cosas.

¿Es fácil conectar la API de Lightroom?

La única parte difícil es que necesita estructurar su código fuente de una manera particular y proporcionar un Info.luaarchivo especial para informar a Lightroom sobre su complemento. Todo se explica en los documentos del SDK . El SDK incluye varios complementos en funcionamiento para comenzar, incluido un complemento bastante elaborado "hello world" que puede buscarse para obtener un código de inicio útil.

¿Requiere alguna herramienta especializada para el desarrollo?

Puedes sobrevivir con solo un editor de texto.

No hay una instalación de depuración integrada en Lightroom, pero hay una instalación de registro de depuración en el SDK. Puede atrapar estos mensajes en WinDbgWindows o Consoleen OS X.

Un desarrollo más reciente es el código abierto ZeroBrane Studio Lua IDE. Puede usar esto en lugar de otro editor de texto, pero lo mejor es que es posible adjuntarlo a su complemento en ejecución que le permite depurarlo mientras se ejecuta. He intentado esto, y ayuda a reducir el tiempo del ciclo de depuración de reparación / recarga / reinicio.

¿Puedo escribir scripts para realizar fácilmente el tipo de tareas que describo anteriormente?

No creo que ninguna de las tareas sea 100% factible utilizando solo el SDK de Lightroom, pero puede hacer mucho trabajo por usted.

seleccione el archivo en cada pila con la extensión JPG y colóquelo en la parte superior de la pila

Aquí hay un código vagamente parecido a Lua para llegar casi hasta allí:

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

Desafortunadamente, no veo una manera en el SDK para hacer la acción de esa línea de comentarios más íntima, al menos a partir de LR 5. Lo mejor que se me ocurre es llamar catalog:setSelectedPhotos(peer)y luego dejar que el usuario haga clic en la insignia de número para reordenar la pila.

Realizar una copia masiva de metadatos de un archivo RAW (existente) a un archivo JPEG (existente)

Puede hacer algo de esto con el SDK existente, pero hay limitaciones.

Por ejemplo, si bien puede leer el valor del dateTimeOriginalcampo EXIF , no hay ninguna facilidad en el SDK en sí para establecer el valor. Supongo que esto se debe a que los desarrolladores de Lightroom decidieron que esto no debería cambiarse nunca programáticamente, que es información valiosa de la cámara. (¿Por qué ese debería ser el caso cuando hay un elemento de menú Metadatos> Editar tiempo de captura ... No lo sé, pero ahí lo tienes).

Pero, cada vez que el SDK intenta atraparlo con una de estas limitaciones, a menudo hay una escotilla de escape. Puede instalar ExifTool y llamarlo desde Lua, por ejemplo. Esa no es una solución perfecta, porque entonces tienes una inconsistencia entre los metadatos del catálogo y los metadatos de la foto, pero Lightroom lo notará y colocará una insignia en la foto, que al hacer clic te permitirá resolver el conflicto al volver a cargar los metadatos de la foto.

(Deberá tener configurada la opción "Escribir automáticamente los cambios en XMP" en el cuadro de diálogo Configuración del catálogo cuando utilice dicho complemento. De lo contrario, facilitará la creación de un conflicto bidireccional, donde tanto el catálogo como los metadatos de la fotografía tienen cambiado. Lightroom no sabe cómo fusionar los dos conjuntos de metadatos; te hace elegir uno y sobrescribe la otra copia de metadatos con él).

Warren Young
fuente
Las limitaciones del SDK son realmente sustanciales, las únicas acciones que son compatibles oficialmente, según esta guía son agregar destinos de exportación o publicación, aplicar postprocesamiento adicional en la exportación o agregar campos de metadatos personalizados. Cualquier acción que requiera actualizar cualquier configuración / valor es, como lo describe la respuesta, probablemente respaldada hasta que intente configurar el valor actualizado.
Steven Cunningham
1
@StevenCunningham: Esa guía es un documento tutorial; no pretende enumerar exhaustivamente todas las cosas que puede hacer con el SDK. Además de la guía del programador, el SDK también incluye una referencia HTML. Hay bastantes cosas que Adobe ha documentado en esa referencia que no cubrieron en la guía del programador de PDF a la que señala. Vea la LrPhoto:setRawMetadata()sección, por ejemplo.
Warren Young
1
Buena respuesta - +1.
D. Lambert
4

No conozco Lightroom (todavía, lo tengo pero aún no lo he instalado), pero dependiendo de la complejidad de lo que intente hacer, es posible que desee ver una herramienta de automatización / macro de teclado en todo el sistema como AutoHotKey . Le permite grabar o programar cualquier secuencia de pulsaciones de teclas que pueda descubrir y luego, cuando presiona una tecla de acceso rápido, las reproduce en su programa (como LightRoom) para que, en lo que respecta al programa, se vea como lo escribiste Esto le permite automatizar todo tipo de cosas sin tener que modificar sus programas de aplicación.

Joe
fuente
Seguramente un complemento ofrecerá una solución de automatización más fina, esta es una especie de relación extrema y depende del sistema operativo. Supongo que los complementos son (más o menos) portátiles entre Windows y OSX.
Francesco
1
@Francesco: estoy seguro de que tienes razón, pero probablemente necesites muchas más habilidades de programación y un conocimiento de la API de LightRoom (o lo que sea que llamen la interfaz para los escritores de macros) para seguir esa ruta. Aunque un buen número de personas realiza un arranque múltiple o usa vms, la mayoría de las personas probablemente se adhieren a un sistema operativo y existen macroprocesadores similares para Linux, Windows y OSX. La parte difícil es acertar en la secuencia de acciones. Para la mayoría de las cosas simples , la recodificación de un procesador macro a otro no es muy difícil.
Joe
Veo su punto, pero en mi opinión está un poco fuera de alcance dada la pregunta original (OP está bien versado en una serie de idiomas, solo que no en Lua). En cualquier caso, no pensé que tu respuesta mereciera un voto negativo, ya que proporciona una posible solución al problema en cuestión (es una especie de enfoque innovador, diría).
Francesco
Esta es ciertamente una opción válida, y algo en lo que he pensado un poco. Creo que preferiría un enfoque específico de Lightroom, que parece tener una mejor longevidad: anticipo que la API de Lightroom cambiará menos de una versión a otra que una solución de macro dependiente del sistema operativo.
David
2

Solo quería ver cómo hacer un procesamiento por lotes basado en nombres de archivo en Lightroom, y por alguna razón parecía que la forma más fácil de hacerlo era a través de la API. Basado en la publicación de @ Warren, logré crear este bucle interno para un botón en un formulario, donde también podría poner un campo de texto para el registro ( logs_field) y algunos valores de entrada (como un campo de texto para incluir los nombres de archivo filenames_fieldy algunos parámetros adicionales para el lote procesamiento en 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 fragmento se iría a través de algunos patrones de nombre de archivo, y aplicar una etiqueta a todas las fotos (es posible que desee reemplazar getAllPhotoscon getMultipleSelectedOrAllPhotosen caso de que sólo es necesario ejecutarlo en algunas de sus imágenes) que coinciden con los patrones. Tenía que hacer esto porque ya había etiquetado las fotos fuera de Lightroom, pero necesitaba una manera fácil de mover esas etiquetas a LR también en función de los nombres de archivo.

Puse todo el proyecto también en github , pero el fragmento anterior debería estar bien para usarlo como base para tareas de procesamiento por lotes basadas en nombre de archivo.

SztupY
fuente