Opracowanie wtyczki Lightroom - czy warto?

28

Niedawno zaktualizowałem proces organizacji i zarządzania zdjęciami z „nic” do Lightroom 4 i chociaż ogólnie jestem bardzo zadowolony z oprogramowania, jedną z cech, której tak bardzo brakuje, jest możliwość nagrywania dowolnego rodzaju makr lub skryptów w celu automatyzacji powtarzalne zadania - podczas mojej migracji do lightrooma było wiele powtarzalnych zadań, które chciałem wykonać i zastanawiam się, czy warto nauczyć się pisać wtyczki LR, aby wykonać niektóre z tych zadań. Aby podać przykłady rzeczy, które chcę zautomatyzować:

  • Na dużej grupie ułożonych w stos zdjęć RAW + PSD + JPG wybierz plik na każdym stosie z rozszerzeniem JPG i umieść go na szczycie stosu
  • Wykonaj masową kopię metadanych z (istniejącego) pliku RAW do (istniejącego) pliku JPEG

Widzę wiele innych sposobów, dzięki którym skrypty mogą ułatwić zarządzanie obrazami w Lightroomie, niż jest teraz. Moje pytanie składa się z trzech części:

1) Jak trudno jest pisać wtyczki Lightroom? Jestem dobrze zorientowany w wielu językach programowania (C / C ++, Python, Perl), ale nie zrobiłem nic z Luą. Czy interfejs API Lightroom jest łatwy do podłączenia i czy wymaga specjalistycznych narzędzi do programowania?

2) Czy mogę pisać skrypty, aby łatwo wykonywać zadania, które opisałem powyżej?

3) Czy są jakieś dobre zasoby lub samouczki, które mogę przeczytać, aby rozpocząć tworzenie wtyczki Lightroom?

David
źródło
Nie mogę się zastanowić nad rozwojem wtyczek - tak naprawdę nie przyjrzałem się temu - ale wygląda na to, że twoje zastosowania są szczególnie przeznaczone dla kogoś, kto nie przechodzi pracy do Lightroom. Oznacza to, że kiedy zaczniesz używać LR, nigdy nie będziesz musiał kopiować meta z RAW do .jpg lub .psd, na przykład dlatego, że o to właśnie chodzi w przepływie pracy.
Dan Wolfgang,
To prawda, przykłady, które podam (teoretycznie) nigdy nie będę musiał powtarzać, gdy skończę mój pierwszy import. Może jednak jest tak, że istnieją inne zadania, które chciałbym móc zautomatyzować w przyszłości? Nie jestem tego pewien. Ale jeśli opracowanie wtyczek jest wystarczająco łatwe, nauka teraz mnie nie skrzywdzi i może być korzystna w przyszłości. Jeśli tworzenie wtyczek jest skomplikowane, nie chcę się tym przejmować i będę ufać, że Lightroom zrobi większość tego, czego potrzebuję po zbudowaniu biblioteki.
David
Och, tak, opcje automatyzacji i łączności są nieskończone. Właśnie zwracałem na to uwagę, ponieważ w zależności od wielkości twojej biblioteki może to nie być warte wysiłku (przynajmniej dla mnie nie było).
Dan Wolfgang,
chociaż nie wiem, jak to zrobić za pomocą Lightrooma, możesz zbudować program do zmiany danych EXIF ​​dla wszystkich twoich zdjęć. Proszę sprawdzić archive.msdn.microsoft.com/changexifwithcsharp i stackoverflow.com/questions/58649/... i stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net . Wspomniałeś, że znasz C ++, wierzę, że możesz dostać się do C #
K ''
+1, ponieważ to pytanie dało mi pomysł, aby spojrzeć na to Lua SDK :-)
Francesco

Odpowiedzi:

39

Nic nie zrobiłem z Luą

Lua jest prawdopodobnie najprostszym, najczystszym językiem programowania, jaki znam. (I znam kilka .)

Prostota Lui jest także jej największą słabością: będąc małym, czystym językiem z założenia, nie ma w nim wielu rzeczy, których można się spodziewać, gdy pochodzić z języka klasy przemysłowej, takiego jak Java, lub baterii - zawiera język taki jak Python.

Lua została zaprojektowana do rozszerzenia o C, co w tym przypadku oznacza SDK Lightrooma. To świetnie, jeśli Adobe wykonał pracę, aby zapewnić potrzebne narzędzia, które nie są wbudowane w Luę, ale od czasu do czasu prawdopodobnie będziesz wzywał zewnętrzne narzędzia, aby załatwić sprawę.

Czy interfejs API Lightroom jest łatwy do podłączenia?

Jedyną trudną częścią tego jest to, że musisz ustrukturyzować kod źródłowy w określony sposób i zapewnić specjalny Info.luaplik, aby poinformować Lightroom o swojej wtyczce. Wszystko to wyjaśniono w dokumentacji SDK . Zestaw SDK zawiera kilka funkcjonujących wtyczek na początek, w tym dość rozbudowaną wtyczkę „hello world”, którą można wyczyścić pod kątem przydatnego kodu początkowego.

czy wymaga specjalistycznych narzędzi do programowania?

Możesz sobie poradzić tylko za pomocą edytora tekstu.

W programie Lightroom nie ma wbudowanej funkcji debugowania , ale w pakiecie SDK dostępna jest funkcja rejestrowania debugowania . Możesz złapać te wiadomości w WinDbgsystemie Windows lub ConsoleOS X.

Nowszym rozwiązaniem jest open source ZeroBrane Studio Lua IDE. Możesz użyć tego zamiast innego edytora tekstu, ale naprawdę fajne jest to, że można dołączyć go do działającej wtyczki, która pozwala debugować ją podczas działania. Próbowałem tego i pomaga to skrócić czas cyklu usuwania / przeładowywania / restartowania.

Czy mogę pisać skrypty w celu łatwego wykonywania wyżej opisanych zadań?

Nie sądzę, aby którekolwiek z tych zadań było w 100% wykonalne przy użyciu tylko zestawu SDK Lightroom, ale może dla ciebie zrobić wiele pracy.

wybierz plik na każdym stosie z rozszerzeniem JPG i ustaw go na szczycie stosu

Oto trochę niejasny kod podobny do Lua, który doprowadzi Cię prawie do samego końca:

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

Niestety nie widzę w SDK sposobu na wykonanie tej najbardziej wewnętrznej akcji linii komentarza, przynajmniej od LR 5. Najlepsze, co mogę wymyślić, to zadzwonić catalog:setSelectedPhotos(peer), a następnie pozostawić użytkownikowi kliknięcie znaczka numeru, aby zmienić kolejność stosu.

Wykonaj masową kopię metadanych z (istniejącego) pliku RAW do (istniejącego) pliku JPEG

Możesz to zrobić za pomocą istniejącego zestawu SDK, ale istnieją ograniczenia.

Na przykład, chociaż można odczytać wartość dateTimeOriginalpola EXIF , w samym zestawie SDK nie ma możliwości ustawienia wartości. Zakładam, że dzieje się tak, ponieważ programiści Lightroom zdecydowali, że nie należy tego nigdy zmieniać programowo, ponieważ jest to cenna informacja z kamery. (Dlaczego miałoby tak być, gdy jest element menu Metadane> Edytuj czas przechwytywania ... nie wiem, ale masz go.)

Ale ilekroć SDK próbuje złapać Cię w jedno z tych ograniczeń, często pojawia się właz ewakuacyjny. Możesz na przykład zainstalować ExifTool i wywołać go z Lua. To nie jest idealne rozwiązanie, ponieważ masz wtedy niespójność między metadanymi katalogu i metadanymi zdjęcia, ale Lightroom zauważy i umieści znaczek na zdjęciu, który po kliknięciu pozwoli rozwiązać konflikt, ponownie ładując metadane ze zdjęcia.

(Podczas korzystania z takiej wtyczki będziesz chciał ustawić opcję „Automatycznie zapisuj zmiany w XMP” w oknie dialogowym Ustawienia katalogu. W przeciwnym razie ułatwisz utworzenie dwukierunkowego konfliktu, w którym metadane katalogu i zdjęcia mają zmienione. Lightroom nie wie, jak scalić dwa zestawy metadanych; sprawia, że ​​wybierasz jeden, i zastępuje nim drugą kopię metadanych).

Warren Young
źródło
Ograniczenia zestawu SDK są w rzeczywistości znaczące, jedyne działania, które są oficjalnie obsługiwane, zgodnie z tym przewodnikiem to dodawanie miejsc docelowych eksportu lub publikacji, stosowanie dodatkowego przetwarzania końcowego podczas eksportu lub dodawanie niestandardowych pól metadanych. Każde działanie wymagające aktualizacji dowolnego ustawienia / wartości jest, jak opisano w odpowiedzi, prawdopodobnie obsługiwane aż do momentu próby ustawienia zaktualizowanej wartości.
Steven Cunningham,
1
@StevenCunningham: Ten przewodnik jest dokumentem instruktażowym; nie ma na celu wyczerpującego wyszczególnienia wszystkich rzeczy, które możesz zrobić z SDK. Oprócz przewodnika tego programisty zestaw SDK zawiera także odwołanie do HTML. Istnieje wiele rzeczy, które Adobe udokumentowało w tym odwołaniu, których nie omawiali w podręczniku programisty PDF, na który wskazują. Patrz LrPhoto:setRawMetadata()na przykład sekcja.
Warren Young,
1
Dobra odpowiedź - +1.
D. Lambert
4

Nie znam Lightrooma (jeszcze - mam go, ale jeszcze go nie zainstalowałem), ale w zależności od złożoności tego, co próbujesz zrobić, możesz przyjrzeć się systemowemu narzędziu makro / automatyzacji klawiatury, takim jak AutoHotKey . Pozwala nagrywać lub programować dowolną sekwencję naciśnięć klawiszy, a następnie, po naciśnięciu klawisza skrótu, odtwarza je z powrotem w programie (takim jak LightRoom), dzięki czemu - jeśli chodzi o program - wygląda tak jak to napisałeś. To pozwala zautomatyzować wszelkiego rodzaju rzeczy bez konieczności modyfikacji programów aplikacyjnych.

Joe
źródło
Z pewnością wtyczka będzie oferować bardziej precyzyjne rozwiązanie automatyzacji, jest to rodzaj ekstremalnego stosunku i zależy od systemu operacyjnego. Zakładam, że wtyczki są (mniej więcej) przenośne między Windows i OSX.
Francesco
1
@Francesco - jestem pewien, że masz rację, ale prawdopodobnie potrzebujesz dużo więcej umiejętności programistycznych i znajomości interfejsu API LightRoom (lub jakkolwiek nazywają interfejs dla pisarzy makr), aby pójść tą drogą. Chociaż spora liczba osób korzysta z wielu systemów operacyjnych lub używa vms, większość ludzi prawdopodobnie trzyma się jednego systemu operacyjnego i istnieją podobne makroprocesory dla systemów Linux, Windows i OSX. Trudność polega na prawidłowym wykonaniu sekwencji działań. W przypadku najprostszych rzeczy przekodowanie z jednego makroprocesora na drugi nie jest bardzo trudne.
Joe
Rozumiem twój punkt widzenia, ale moim zdaniem jest to trochę poza zakresem biorąc pod uwagę oryginalne pytanie (OP jest dobrze zorientowany w szeregu języków, po prostu nie Lua). W każdym razie nie sądziłem, że twoja odpowiedź zasługuje na wzięcie pod uwagę, ponieważ zapewnia ona możliwe rozwiązanie danego problemu (powiedziałbym, że jest to rodzaj myślenia od razu po wyjęciu z pudełka).
Francesco
Jest to z pewnością ważna opcja i coś, o czym trochę myślałem. Myślę, że wolałbym podejście specyficzne dla Lightroom, które wydaje się mieć dłuższą żywotność - spodziewam się, że API Lightroom zmieni się mniej z wersji na wersję niż rozwiązanie makro zależne od systemu operacyjnego.
David
2

Chciałem tylko przyjrzeć się sposobom przetwarzania wsadowego opartego na nazwach plików w Lightroomie iz jakiegoś powodu wyglądało na to, że najłatwiej to zrobić za pomocą interfejsu API. Na podstawie posta @ Warrena udało mi się stworzyć tę wewnętrzną pętlę dla przycisku w formularzu, w którym mógłbym również umieścić pole tekstowe do logowania ( logs_field) i niektóre wartości wejściowe (takie jak pole tekstowe zawierające nazwy plików filenames_fieldi niektóre dodatkowe parametry dla partii przetwarzanie w 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
 }

Ten fragment będzie przejść przez kilka wzorców nazw plików i zastosować etykietę do wszystkich zdjęć (warto wymienić getAllPhotosze getMultipleSelectedOrAllPhotosw przypadku wystarczy uruchomić go na niektórych zdjęciach), które pasują do tych wzorców. Musiałem to zrobić, ponieważ oznaczyłem już zdjęcia poza Lightroomem, ale potrzebowałem łatwego sposobu przeniesienia tych tagów do LR, również na podstawie nazw plików.

Cały projekt umieściłem również na githubie , ale powyższy fragment powinien być odpowiedni do użycia jako baza do zadań przetwarzania wsadowego na podstawie nazw plików.

Sztuczki
źródło