Lightroom eklentisi geliştirme - buna değer mi?


28

Son zamanlarda fotoğraf organizasyonu ve yönetim iş akışımı "hiçbir şey" den Lightroom 4'e yükselttim ve genel olarak yazılımdan çok memnun kaldığım halde, eksik olan bir özellik, otomatikleştirmek için herhangi bir makro veya komut dosyasını kaydetme yeteneği. tekrarlayan görevler - ışık odasına geçişim sırasında, yapmak istediğim birçok tekrarlı görev oldu ve bu görevlerden bazılarını yapmak için LR eklentileri yazmayı öğrenmeye değer olup olmadığını merak ediyorum. Size otomatikleştirmek istediğim şeyler hakkında örnekler vermek için:

  • Yığılmış RAW + PSD + JPG fotoğraf grubundaki bir grupta, JPG uzantılı her istifte dosyayı seçin ve istifin üstünde yapın
  • (Mevcut) bir RAW dosyasından (mevcut) bir JPEG dosyasına meta verilerin toplu bir kopyasını alın

Senaryoların Lightroom'da resim yönetimini şimdi olduğundan daha kolay hale getirebileceği birçok başka yol görebiliyorum. Benim sorum daha sonra üç bölümden oluşur:

1) Lightroom eklentilerini yazmak ne kadar zor? Çok sayıda programlama dilinde (C / C ++, Python, Perl) çok iyi anlaştım, ama Lua ile hiçbir şey yapmadım. Lightroom API'sinin bağlanması kolay mı ve geliştirme için herhangi bir özel araç gerektiriyor mu?

2) Yukarıda tarif ettiğim işleri kolayca gerçekleştirmek için senaryo yazabilir miyim?

3) Lightroom eklentisi geliştirmeye başlamak için okuyabildiğim herhangi bir iyi kaynak veya öğretici var mı?


Eklenti geliştirmeye ağırlık veremem - buna gerçekten bakmadım - ama kullanımlarınız en özel olarak iş akışından Işık Odasına geçmeyen biri için. Yani, LR kullanmaya başladığınızda, bir RAW'dan .jpg veya .psd'ye meta kopyalamaya hiç ihtiyacınız olmayacak, örneğin iş akışının nedeni budur.
Dan Wolfgang

Bu doğru, verdiğim örneklerin (teorik olarak) ilk ithalatımı bitirdikten sonra bir daha yapmaları gerekmeyecek. Bununla birlikte, belki gelecekte otomatikleştirmek isteyebileceğim başka işler de olabilir mi? Bu konuda emin değilim. Ancak, eklentileri geliştirmek yeterince kolaysa, şimdi öğrenmek bana zarar vermez ve gelecekte yararlı olabilir. Eklenti geliştirme karmaşıksa, rahatsız etmek istemiyorum ve Lightroom'un kütüphanem inşa edildikten sonra ihtiyacım olanın çoğunu yapacağına güveneceğim.
David,

Ah evet, otomasyon ve bağlantı seçenekleri sonsuzdur. Sadece işaret ediyorum, çünkü kütüphanenizin büyüklüğüne bağlı olarak, bu çabaya değmeyebilir (en azından benim için değildi).
Dan Wolfgang

Lightroom kullanarak bunu yapmanın bir yolunu bilmemekle birlikte, aslında tüm fotoğraflarınız için EXIF ​​verilerini değiştirmek üzere bir program oluşturabilirsiniz. Lütfen archive.msdn.microsoft.com/changexifwithcsharp ve stackoverflow.com/questions/58649/… ve stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net adresini ziyaret edin . C ++ 'ı bildiğini söyledin, inanıyorum ki C #
K' '

+1, bu soru bana Lua sdk :-) 'e bakma fikrini verdiğinden beri :-)
Francesco

Yanıtlar:


39

Lua ile hiçbir şey yapmadım

Lua muhtemelen bildiğim en basit, en temiz programlama dilidir. ( Birkaç tanesini biliyorum .)

Lua'nın sadeliği aynı zamanda en büyük zayıflığıdır: küçük, temiz bir dil olarak tasarımdan, Java gibi endüstriyel bir dilden veya bataryalardan gelirken bulmayı umacağınız pek bir şey yoktur. Python gibi dahil dil.

Lua, bu durumda Lightroom'un SDK'sı anlamına gelen C tarafından uzatılmak üzere tasarlanmıştır. Adobe, Lua'da yerleşik olmayan ihtiyaç duyduğunuz araçları sağlamak için çalışma yaptıysa, bu harikadır, ancak her zaman ve muhtemelen kendiniz işlerin yapılması için dış araçlara seslendiğini göreceksiniz.

Lightroom API'sinin bağlantı kurması kolay mı

Bununla ilgili en zor kısım, kaynak kodunuzu belirli bir şekilde yapılandırmanız ve Info.luaLightroom'a eklentiniz hakkında bilgi vermek için özel bir dosya sağlamanız gerektiğidir. Hepsi SDK belgelerinde açıklanmıştır . SDK, kullanışlı bir başlangıç ​​kodu için elden çıkarılabilecek oldukça ayrıntılı bir "merhaba dünyası" eklentisi de dahil olmak üzere, başlaması gereken birkaç işlevsel eklenti içerir.

Geliştirme için herhangi bir özel araç gerektiriyor mu?

Sadece bir metin editörü ile alabilirsiniz.

Lightroom'da yerleşik bir hata ayıklama tesisi yoktur, ancak SDK'da bir hata ayıklama günlüğü tesisi vardır. Bu mesajları WinDbgWindows'ta veya ConsoleOS X'de yakalayabilirsiniz .

Daha yeni bir gelişme, açık kaynaklı ZeroBrane Studio Lua IDE'dir. Bunu başka bir metin düzenleyici yerine kullanabilirsiniz, ancak asıl harika olan şey, çalışırken hata ayıklamanızı sağlayan çalışan eklentinize eklemenizin mümkün olmasıdır. Bunu denedim ve bu düzeltme / yeniden yükleme / yeniden başlatma hata ayıklama döngüsü süresini azaltmaya yardımcı olur.

Yukarıda tarif ettiğim işleri kolayca gerçekleştirmek için senaryo yazabilir miyim?

Her iki görevin de yalnızca Lightroom SDK'yı kullanarak% 100 yapabileceğini sanmıyorum, ancak sizin için çok iş yapabilir.

JPG uzantılı her istifte dosyayı seçin ve istifin üstünde yapın

İşte size hemen hemen tüm yol boyunca sizi uyaran belli belirsiz Lua benzeri kod :

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

Ne yazık ki, SDK'da en içteki yorum satırının en azından LR 5'ten itibaren yaptığı eylemi yapmanın bir yolunu görmüyorum. Bulabileceğim en iyi şey aramak catalog:setSelectedPhotos(peer), sonra yığını yeniden düzenlemek için gerçekte sayı rozetini tıklatması için kullanıcıya bırakmasıdır.

(Mevcut) bir RAW dosyasından (mevcut) bir JPEG dosyasına meta verilerin toplu bir kopyasını alın

Bunların bir kısmını mevcut SDK ile yapabilirsiniz, ancak sınırlamalar vardır.

Örneğin , EXIF alanının değerini okuyabileceğiniz gibi , değeri ayarlamak için dateTimeOriginalSDK'nın kendisinde bir olanak yoktur . Bunun, Lightroom geliştiricilerin bunun programlı olarak değiştirilmemesi gerektiğine, kameradan gelen değerli bilgilerin olduğuna karar vermeleri nedeniyle olduğunu düşünüyorum. (Bilmiyorum, bir Meta Veri> Yakalama Zamanını Düzenle ... menü öğesi varken neden böyle olmalıdır?)

Ancak, SDK sizi bu sınırlamalardan biriyle yakalamaya çalıştığında, genellikle bir kaçış kapısı vardır. Örneğin, ExifTool'u yükleyebilir ve Lua'dan arayabilirsiniz. Bu mükemmel bir çözüm değil, çünkü o zaman katalog meta verileri ve fotoğraf meta verileri arasında bir tutarsızlığa sahip olursunuz, ancak Lightroom, fotoğrafın üzerine bir rozet yerleştirir ve tıklandığında meta verileri fotoğraftan yeniden yükleyerek çakışmayı çözmenize izin verir.

(Böyle bir eklentisi kullanıldığında Kataloğu Ayarları iletişim seçeneği seti "XMP içine otomatik olarak yazma değişiklikleri" sahip olmak isteyeceksiniz. Aksi takdirde, daha kolay iki yönlü çatışma, katalog oluşturmak, hem de yapmak ve fotoğraf var metadata Lightroom, iki meta verinin nasıl birleştirileceğini bilmez, bir tanesini seçmenizi sağlar ve diğer meta veri kopyasının üzerine yazar.)


SDK'nın sınırlamaları aslında oldukça önemlidir, bu rehbere göre resmi olarak desteklenen tek eylemler ihracat veya hedefleri yayınlamak, ihracatta ek işlem sonrası uygulamak veya özel meta veri alanları eklemekdir. Herhangi bir ayar / değer güncellemesini gerektiren herhangi bir eylem, cevabın açıklandığı gibi, siz güncellenmiş değeri deneyene ve ayarlayana kadar desteklenir.
Steven Cunningham

1
@StevenCunningham: Bu rehber öğretici bir belgedir; SDK ile yapabileceğiniz her şeyi kapsamlı bir şekilde listelemek değildir. Bu programcının rehberine ek olarak, SDK ayrıca bir HTML referansı içerir. Adobe'nin bu referansta belgelemiş olduğunuz PDF programcının kılavuzunda kapsamadıklarını belgeleyen pek çok şey vardır. LrPhoto:setRawMetadata()Örneğin , bölüme bakınız .
Warren Young,

1
Güzel cevap - +1.
D. Lambert,

4

Lightroom'u bilmiyorum (henüz - henüz kurmadım), ancak ne yapmaya çalıştığınızın karmaşıklığına bağlı olarak, AutoHotKey gibi sistem çapında bir klavye makro / otomasyon aracına bakmak isteyebilirsiniz. . Anlayabileceğiniz herhangi bir tuş vuruşu sırasını kaydetmenize veya programlamanıza olanak tanır ve ardından bir kısayol tuşuna bastığınızda, bunları programınıza geri oynatır (LightRoom gibi), böylece - program söz konusu olduğunda - görünür Yazdığın gibi. Bu, uygulama programlarınızı hiçbir şekilde değiştirmenize gerek kalmadan her türlü şeyi otomatikleştirmenize olanak sağlar.


Elbette bir eklenti daha ince taneli otomasyon çözümü sunacaktır, bu bir tür aşırı oran ve işletim sistemine bağlı. Eklentileri Windows ve OSX arasında taşınabilir (veya daha az) olduğunu varsayıyorum.
Francesco

1
@Francesco - Haklı olduğunuza eminim, ancak muhtemelen daha fazla programlama becerisine ve LightRoom API'sına (veya makro yazarlar için arayüz dedikleri şey) bilgiye sahip olmanız gerekiyor. Çok sayıda insan çoklu önyükleme yapsa veya vms kullansa da, çoğu insan muhtemelen bir işletim sistemine bağlı kalır ve Linux, Windows ve OSX için benzer makro işlemcileri vardır. Zor kısım, doğru eylem dizisini elde etmek. Çoğu basit şey için, bir makro işlemciden diğerine kod yazma çok zor değildir.
Joe,

Amacınızı anlıyorum ama bence asıl soru göz önüne alındığında biraz kapsam dışı (OP bir dizi dilde, sadece Lua değil). Her halükarda, elinizdeki soruna olası bir çözüm sağladığı için cevabınızın reddedilmeyi hak etmediğini düşünmedim (bir çeşit düşünülmüş bir yaklaşımdır).
Francesco,

Bu kesinlikle geçerli bir seçenek ve biraz da düşündüğüm bir şey. Daha uzun ömürlü gibi görünen bir Lightroom'a özgü yaklaşımı tercih edeceğimi düşünüyorum - Lightroom API'sinin işletim sisteminden bağımsız bir makro çözümünden daha versiyondan versiyona değişeceğini tahmin ediyorum.
David,

2

Sadece Lightroom'daki dosya adlarına dayanan toplu işlemlerin nasıl yapıldığına bakmak istedim ve bir nedenden ötürü API üzerinden yapmanın en kolay yolu gibi görünüyordu. @ Warren'ın gönderisine dayanarak, formdaki bir düğme için bu iç döngüyü oluşturmayı başardım; burada ayrıca logging için bir metin alanı ( logs_field) ve bazı girdi değerleri (dosya adlarını içerecek bir metin alanı filenames_fieldve toplu iş için bazı ek parametreler ) koyabilirim. işleme 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
 }

Bu parçacık bazı dosya adı desenleri geçmesi ve fotoğrafların tümünü bir etiket de geçerli olacak (eğer değiştirmek isteyebilirsiniz getAllPhotosile getMultipleSelectedOrAllPhotosbu kalıpları eşleşen yalnızca bazı resim üzerinde çalıştırmak için gereken durumunda). Fotoğrafları Lightroom'un dışına etiketlemiş olduğum için yapmak zorunda kaldım, ancak bu etiketleri dosya adlarına dayanarak LR'ye taşımak için de kolay bir yola ihtiyacım vardı.

Ben katlanmak github olarak hem de tüm proje , ancak yukarıdaki pasajı dosya adı temelli görev toplu işlemler için bir üs olarak kullanılmasına iyi olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.