Розробка плагінів Lightroom - чи варто цього?


28

Нещодавно я модернізував робочий процес з організації фотографій та управління з "нічого взагалі" до Lightroom 4, і хоча я, як правило, дуже задоволений програмним забезпеченням, одна особливість, якої дуже не вистачає, - це можливість записувати будь-які макроси чи скрипти для автоматизації. повторювані завдання - під час моєї міграції в світлу кімнату було багато завдань, що повторювалися, що я хотів виконати, і мені цікаво, чи варто навчитися писати плагіни LR, щоб виконати деякі з цих завдань. Щоб навести приклади тих речей, які я хочу автоматизувати:

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

Я бачу багато інших способів, за допомогою яких сценарії можуть зробити управління зображеннями в Lightroom навіть простішим, ніж зараз. Тоді моє запитання має три частини:

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

2) Чи можна писати сценарії для виконання тих завдань, які я описав вище, легко?

3) Чи є якісь хороші ресурси чи підручники, які я можу прочитати, щоб почати розробку плагінів Lightroom?


Я не можу зважуватися на розробку плагінів - насправді не вивчав - але це здається, що ваше використання саме для тих, хто переходить з робочого процесу в Lightroom. Тобто, коли ви почнете використовувати LR, вам ніколи не доведеться копіювати мета з RAW в .jpg або .psd, наприклад, тому що це все.
Дан Вольфганг

Це правда, приклади, які я даю (теоретично), більше ніколи не потрібно робити, коли я закінчую з початковим імпортом. Однак, можливо, так трапляються й інші завдання, які я б хотів у майбутньому автоматизувати? Я не впевнений у цьому рахунку. Але якщо розробити плагіни досить просто, то навчання зараз мені не зашкодить, і може принести користь у майбутньому. Якщо розробка плагінів є складною, я не хочу заважати, і буду вірити, що Lightroom зробить більшу частину того, що мені потрібно, коли моя бібліотека буде побудована.
Девід

О так, варіанти автоматизації та підключення безмежні. Я просто вказував на це, тому що, залежно від розміру вашої бібліотеки, це, можливо, не варто докладати зусиль (принаймні, для мене це не було).
Дан Вольфганг

поки я не знаю, як це зробити за допомогою Lightroom, ви можете створити програму для зміни EXIF-даних для всіх своїх фотографій. Перевірте archive.msdn.microsoft.com/changexifwithcsharp та stackoverflow.com/questions/58649/… та stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net . Ви згадали, що знаєте C ++, я вважаю, що ви можете потрапити в C #
K ''

+1, оскільки це питання дало мені ідею подивитися на цей Lua sdk :-)
Франческо

Відповіді:


39

Я нічого не робив з Луєю

Луа - це, мабуть, найпростіша, найчистіша мова програмування, яку я знаю. (І я знаю декількох .)

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

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

Чи легко приєднати API Lightroom API

Єдина складна частина цього полягає в тому, що вам потрібно структурувати свій вихідний код певним чином і надати спеціальний Info.luaфайл, який розповість Lightroom про ваш плагін. Все це пояснено в документах SDK . SDK включає в себе кілька функціональних плагінів, з яких можна почати, включаючи досить складний плагін "привіт світ", який можна використовувати для корисного стартового коду.

чи потрібні спеціальні інструменти для розробки?

Ви можете обійтись лише текстовим редактором.

У Lightroom немає вбудованого засобу налагодження, але в SDK є об'єкт для налагодження . Ви можете ловити ці повідомлення в WinDbgWindows або ConsoleOS X.

Новітня розробка - це відкритий код ZeroBrane Studio Lua IDE. Ви можете використовувати це замість іншого текстового редактора, але дійсно крутий біт полягає в тому, що можна приєднати його до свого запущеного плагіна, який дозволяє налагоджувати його під час роботи. Я спробував це, і це допомагає скоротити час циклу виправлення / перезавантаження / перезавантаження.

Чи можу я легко писати сценарії для виконання тих завдань, які я описав вище?

Я не думаю, що жодна задача не може на 100% виконати, використовуючи лише Lightroom SDK, але це може зробити багато для вас.

виберіть файл у кожній стеці з розширенням JPG та зробіть його у верхній частині стека

Ось якийсь неясний код, схожий на Луа, щоб отримати вас майже на всьому шляху:

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, але є обмеження.

Наприклад, хоча ви можете прочитати значення dateTimeOriginalполя EXIF , у самому SDK немає можливості встановити значення. Я припускаю, що це тому, що розробники Lightroom вирішили, що це ніколи не слід міняти програмно, що це дорогоцінна інформація з камери. (Чому це має бути так, коли є метадані> Редагувати час захоплення ... пункт меню, я не знаю, але там у вас є.)

Але, коли SDK намагається захопити вас одним із цих обмежень, часто виникає люк для втечі. Наприклад, ви можете встановити ExifTool і зателефонувати на нього з Lua. Це не ідеальне рішення, оскільки тоді у вас є невідповідність між метаданими каталогу та метаданими фото, але Lightroom помітить і помітить на фотографію значок, який при натисканні на нього дозволить вам вирішити конфлікт, завантаживши метадані з фотографії.

(Вам потрібно встановити параметр "Автоматично записувати зміни в XMP" у діалоговому вікні "Налаштування каталогів" при використанні такого плагіна. В іншому випадку ви полегшите створення двостороннього конфлікту, коли і метадані каталогу, і фотографії мають Lightroom не знає, як об'єднати два набори метаданих; це змушує вас вибрати один, а інший копію метаданих перезаписати.)


Обмеження SDK насправді суттєві. Єдині дії, які офіційно підтримуються, відповідно до цього посібника - додавання експорту чи публікації пунктів призначення, застосування додаткової післяобробки для експорту, або додавання спеціальних полів метаданих. Будь-яка дія, яка потребує оновлення будь-якого параметра / значення, як описано у відповіді, ймовірно підтримується праворуч до тих пір, поки ви не спробуєте встановити оновлене значення.
Стівен Каннінгем

1
@StevenCunningham: Посібник - це навчальний документ; це не призначено для вичерпного переліку всіх речей, які ви можете зробити з SDK. На додаток до цього посібника програміста, SDK також містить посилання HTML. Є досить багато речей, які Adobe задокументувала в цій посиланні, яку вони не висвітлювали в посібнику PDF-програміста, на який ви вказуєте. Дивіться LrPhoto:setRawMetadata(), наприклад, розділ.
Воррен Янг

1
Приємна відповідь - +1.
Д. Ламберт

4

Я не знаю Lightroom (поки що - є, але ще не встановив його), але залежно від складності того, що ви намагаєтеся зробити, ви можете поглянути на системний інструмент для макро / автоматизації клавіатури, як AutoHotKey . Він дозволяє записати або запрограмувати будь-яку послідовність натискань клавіш, яку ви можете з'ясувати, а потім, натиснувши гарячу клавішу, вона відтворює їх назад у вашу програму (наприклад, LightRoom), так що - що стосується програми - це виглядає як ти його набрав. Це дозволяє автоматизувати всілякі речі, не змінюючи прикладних програм.


Безумовно, плагін запропонує більш тонкі зернисті рішення для автоматизації, це якесь екстремальне співвідношення і залежне від ОС. Я припускаю, що плагіни є (більш-менш) портативними між Windows та OSX.
Франческо

1
@Francesco - Я впевнений, що ви маєте рацію, але вам, мабуть, потрібно набагато більше навичок програмування та знання API LightRoom (або, як вони називають, інтерфейс для письменників макрокоманд), щоб пройти цей маршрут. Хоча досить велика кількість людей робить багатозавантажувальну систему або використовує vms, більшість людей, ймовірно, дотримуються однієї ОС і є подібні макропроцесори для Linux, Windows та OSX. Важкою частиною є правильність послідовності дій. У більшості простих речей перекодувати з одного макропроцесора на інший не дуже складно.
Джо

Я бачу вашу думку, але, на мою думку, це трохи поза сферою, враховуючи оригінальне запитання (ОП добре розбирається в декількох мовах, тільки не в Lua). У будь-якому випадку я не вважав, що ваша відповідь заслуговує на те, щоб вона була оскаржена, оскільки вона забезпечує можливе вирішення існуючої проблеми (я б сказав, це такий собі підхід до продуманого перегляду).
Франческо

Це, безумовно, дійсний варіант, і я дещо подумав. Я думаю, що я віддаю перевагу специфічному підходу Lightroom, який, здається, має кращу довговічність - я передбачаю, що API Lightroom зміниться менше від версії до версії, ніж макро рішення, залежне від ОС.
Девід

2

Я просто хотів подивитися, як зробити пакетну обробку на основі імен файлів у Lightroom, і чомусь це виглядало як найпростіший спосіб зробити це через API. На основі публікації @ Warren мені вдалося створити цей внутрішній цикл для кнопки на формі, куди я також міг би поставити текстове поле для ведення журналу ( 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 , але вищевказаний фрагмент повинен бути чудовим, щоб використовувати його як основу для завдань пакетної обробки пакетних імен.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.