Разработка плагина Lightroom - стоит ли это того? - Фотопедия
28 голосов
/ 17 апреля 2012

Недавно я обновил рабочий процесс организации и управления фотографиями с «вообще ничего» до Lightroom 4, и, хотя я в целом очень доволен программным обеспечением, одной из функций, которой ему крайне не хватает, является возможность записи любых макросов или скрипты для автоматизации повторяющихся задач - в ходе моей миграции в lightroom было много повторяющихся задач, которые я хотел выполнить, и мне интересно, стоит ли изучать, как писать плагины LR для выполнения некоторых из эти задачи. Чтобы дать вам примеры того, что я хочу автоматизировать:

  • В большой группе фотографий в стопке RAW + PSD + JPG выберите файл в каждой стопке с расширением JPG и сделайте его вершиной стопки
  • Выполнение массового копирования метаданных из (существующего) файла RAW в (существующий) файл JPEG

Я вижу множество других способов, с помощью которых скрипты могут сделать управление изображениями в Lightroom еще проще, чем сейчас. Мой вопрос состоит из трех частей:

1) Насколько сложно писать плагины Lightroom? Я хорошо разбираюсь в ряде языков программирования (C / C ++, Python, Perl), но я ничего не делал с Lua. Легко ли подключить Lightroom API и требуются ли какие-либо специализированные инструменты для разработки?

2) Могу ли я написать сценарии для выполнения задач, которые я легко описал выше?

3) Есть ли какие-нибудь полезные ресурсы или учебные пособия, которые я могу прочитать, чтобы начать разработку плагинов для Lightroom?

Ответы [ 3 ]

39 голосов
/ 05 июня 2012

Я ничего не делал с Луа

Lua , пожалуй, самый простой и чистый язык программирования, который я знаю. (И Я знаю несколько .)

Простота Lua также является ее самой большой слабостью: будучи маленьким, чистым языком по своему дизайну, в нем не так много встроенного материала, который вы ожидаете найти при использовании языка промышленного уровня, такого как Java, или язык с батарейками, такой как Python.

Lua предназначен для расширения на C, что в данном случае означает SDK Lightroom. Прекрасно, если Adobe выполнила работу по предоставлению необходимых инструментов, которые не встроены в Lua, но время от времени вы, вероятно, будете обращаться к внешним инструментам для достижения цели.

Легко ли подключить Lightroom API к

Единственная хитрость в том, что вам нужно определенным образом структурировать исходный код и предоставить специальный файл Info.lua, чтобы сообщить Lightroom о вашем плагине. Все это объяснено в документации SDK . SDK включает в себя несколько функционирующих плагинов, в том числе довольно сложный плагин «hello world», который можно очистить для получения полезного стартового кода.

нужны ли какие-либо специализированные инструменты для разработки?

Вы можете обойтись только с помощью текстового редактора.

В Lightroom нет встроенного средства отладки, но в SDK есть средство ведения журнала отладки . Вы можете перехватить эти сообщения в WinDbg в Windows или Console в OS X.

Более поздней разработкой является открытый исходный код ZeroBrane Studio Lua IDE. Вы можете использовать это вместо другого текстового редактора, но действительно здорово, что можно подключить к работающему плагину , который позволяет отлаживать его во время работы. Я пробовал это, и это помогает сократить время цикла отладки исправления / перезагрузки / перезапуска.

Могу ли я написать сценарии для выполнения задач, которые я легко описал выше?

Я не думаю, что любая из этих задач на 100% выполнима, используя только Lightroom SDK, но она может сделать большую часть работы за вас.

выберите файл в каждом стеке с расширением JPG и сделайте его вершиной стека

Вот какой-то смутно похожий на Lua код, который поможет вам почти до конца:

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

К сожалению, я не вижу способа в SDK выполнить действие этой самой внутренней строки комментария, по крайней мере, с LR 5. Лучшее, что я могу придумать, это позвонить по номеру catalog:setSelectedPhotos(peer), а затем предоставить пользователю возможность фактически щелкнуть значок с номером, чтобы изменить порядок в стеке.

Выполнение массового копирования метаданных из (существующего) файла RAW в (существующий) файл JPEG

Вы можете сделать это с помощью существующего SDK, но есть ограничения.

Например, хотя вы можете прочитать значение поля EXIF ​​dateTimeOriginal, в самом SDK нет возможности установить значение . Я предполагаю, что это потому, что разработчики Lightroom решили, что это никогда не должно изменяться программно, что это ценная информация с камеры. (Почему так должно быть, когда есть пункт меню «Метаданные> Изменить время захвата ...», которого я не знаю, но он у вас есть.)

Но всякий раз, когда SDK пытается заманить вас в ловушку с одним из этих ограничений, часто появляется аварийный люк. Вы можете установить ExifTool и вызвать его, например, из Lua. Это не идеальное решение, потому что тогда у вас есть несоответствие между метаданными каталога и метаданными фотографии, но Lightroom заметит и поставит значок на фотографии, который при нажатии позволит разрешить конфликт путем перезагрузки метаданных из фотографии.

(При использовании такого плагина вы захотите установить параметр «Автоматически записывать изменения в XMP» в диалоговом окне «Параметры каталога». В противном случае вам будет проще создать двусторонний конфликт, при котором оба каталога * Метаданные фотографий 1077 * и изменены. Lightroom не знает, как объединить два набора метаданных, он выбирает один и перезаписывает другую копию метаданных.)

4 голосов
/ 26 апреля 2012

Я не знаю Lightroom (пока - есть, но еще не установил его), но в зависимости от сложности того, что вы пытаетесь сделать, вы можете захотеть взглянуть на общесистемную макрос / автоматизацию клавиатуры инструмент, как AutoHotKey. Он позволяет вам записывать или программировать любую последовательность нажатий клавиш, которую вы можете выяснить, а затем, когда вы нажимаете горячую клавишу, он воспроизводит их обратно в вашу программу (например, LightRoom), так что - для программы - как ты набрал это. Это позволяет вам автоматизировать все виды вещей без необходимости изменять ваши прикладные программы.

2 голосов
/ 13 декабря 2016

Я просто хотел посмотреть, как выполнять пакетную обработку на основе имен файлов в Lightroom, и почему-то это выглядело так, как будто проще всего сделать это через API. На основе @ поста Уоррена мне удалось создать этот внутренний цикл для кнопки на форме, где я также мог бы поместить текстовое поле для ведения журнала (logs_field) и некоторые входные значения (например, текстовое поле для включения имена файлов filenames_field и некоторые дополнительные параметры для пакетной обработки в 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
 }

Этот фрагмент будет проходить через некоторые шаблоны имен файлов и применять метку ко всем фотографиям (вы можете заменить getAllPhotos на getMultipleSelectedOrAllPhotos в случае, если вам нужно только запустить его на некоторых ваших фотографиях), которые соответствуют эти шаблоны. Я должен был сделать это, так как я уже пометил фотографии за пределами Lightroom, но мне нужен был простой способ переместить эти теги в LR, также основываясь на именах файлов.

Я также разместил весь проект на github , но приведенный выше фрагмент кода вполне подойдет для использования в качестве основы для задач пакетной обработки на основе имен файлов.

Добро пожаловать на сайт Фотопедия, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...