Pengembangan plugin Lightroom - apakah itu layak?


28

Saya baru-baru ini meningkatkan organisasi foto dan alur kerja manajemen saya dari "tidak ada sama sekali" ke Lightroom 4, dan sementara saya umumnya sangat senang dengan perangkat lunak, satu fitur yang sangat kurang adalah kemampuan untuk merekam segala jenis makro atau skrip untuk diotomatisasi tugas berulang - selama migrasi saya ke lightroom, ada banyak tugas berulang yang ingin saya lakukan, dan saya ingin tahu apakah ada baiknya belajar bagaimana menulis plugin LR untuk melakukan beberapa tugas ini. Untuk memberi Anda contoh hal-hal yang ingin sayaotomatiskan:

  • Dalam sekelompok besar foto RAW + PSD + JPG yang ditumpuk, pilih file di setiap tumpukan dengan ekstensi JPG dan jadikan bagian atas tumpukan
  • Melakukan salinan massal metadata dari file RAW (yang sudah ada) ke file JPEG (yang sudah ada)

Saya dapat melihat banyak cara lain agar skrip dapat membuat manajemen gambar di dalam Lightroom bahkan lebih mudah daripada sekarang. Pertanyaan saya kemudian memiliki tiga bagian:

1) Seberapa sulitkah untuk menulis plugin Lightroom? Saya berpengalaman dalam sejumlah bahasa pemrograman (C / C ++, Python, Perl), tapi saya belum melakukan apa-apa dengan Lua. Apakah Lightroom API mudah dihubungkan, dan apakah itu memerlukan alat khusus untuk pengembangan?

2) Dapatkah saya menulis skrip untuk melakukan jenis tugas yang saya jelaskan di atas dengan mudah?

3) Apakah ada sumber daya atau tutorial yang bisa saya baca untuk memulai dengan pengembangan plugin Lightroom?


Saya tidak bisa mempertimbangkan pengembangan plugin - belum benar-benar melihat ke dalamnya - tapi sepertinya penggunaan Anda paling khusus untuk seseorang yang beralih dari workflow ke Lightroom. Yaitu, begitu Anda mulai menggunakan LR, Anda tidak akan pernah perlu menyalin meta dari RAW ke .jpg atau .psd, misalnya karena itulah alur kerjanya.
Dan Wolfgang

Itu benar, contoh yang saya berikan kepada saya (secara teoritis) tidak akan perlu dilakukan lagi setelah saya selesai dengan impor awal saya. Namun, mungkinkah ada tugas lain yang ingin saya lakukan secara otomatis di masa depan? Saya tidak yakin dengan hitungan ini. Tetapi jika cukup mudah untuk mengembangkan plugin, maka belajar sekarang tidak akan menyakiti saya, dan bisa bermanfaat di masa depan. Jika pengembangan plugin rumit, maka saya tidak ingin repot, dan akan percaya bahwa Lightroom akan melakukan sebagian besar yang saya butuhkan setelah pustaka saya dibangun.
David

Oh, ya, opsi otomatisasi dan konektivitas tidak terbatas. Saya baru saja menunjukkannya karena, tergantung pada ukuran perpustakaan Anda, mungkin tidak sepadan dengan usaha (setidaknya, bagi saya itu tidak).
Dan Wolfgang

sementara saya tidak tahu cara untuk melakukan ini menggunakan Lightroom, Anda sebenarnya dapat membangun sebuah program untuk mengubah data EXIF ​​untuk semua foto Anda. Silakan periksa archive.msdn.microsoft.com/changexifwithcsharp dan stackoverflow.com/questions/58649/… dan stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net . Anda menyebutkan bahwa Anda tahu C ++, saya yakin Anda bisa masuk ke C #
K ''

+1, karena pertanyaan ini memberi saya ide untuk melihat Lua SDK ini :-)
Francesco

Jawaban:


39

Saya belum melakukan apapun dengan Lua

Lua mungkin adalah bahasa pemrograman paling sederhana dan paling bersih yang saya tahu. (Dan saya tahu beberapa .)

Kesederhanaan Lua juga merupakan kelemahan terbesarnya: karena desainnya yang kecil, bahasa yang bersih, tidak memiliki banyak hal bawaan yang ingin Anda temukan ketika berasal dari bahasa tingkat industri seperti Jawa, atau baterai Bahasa -termasuk seperti Python.

Lua dirancang untuk diperpanjang oleh C, yang dalam hal ini berarti SDK Lightroom. Itu bagus jika Adobe melakukan pekerjaan untuk menyediakan alat yang Anda butuhkan yang tidak dibangun ke dalam Lua, tetapi setiap sekarang dan kemudian Anda mungkin akan menemukan diri Anda memanggil alat eksternal untuk menyelesaikan sesuatu.

Apakah Lightroom API mudah dihubungkan

Satu-satunya bagian yang sulit tentang itu adalah Anda perlu menyusun kode sumber Anda dengan cara tertentu dan menyediakan Info.luafile khusus untuk memberi tahu Lightroom tentang plugin Anda. Itu semua dijelaskan dalam dokumen SDK . SDK mencakup beberapa plugin yang berfungsi untuk memulai, termasuk plugin "hello world" yang cukup rumit yang dapat diambil untuk kode awal yang bermanfaat.

apakah itu memerlukan alat khusus untuk pengembangan?

Anda dapat bertahan hanya dengan editor teks.

Tidak ada fasilitas debugging yang dibangun ke dalam Lightroom, tetapi ada fasilitas debug logging di SDK. Anda dapat menangkap pesan-pesan ini di WinDbgWindows atau ConsoleOS X.

Perkembangan yang lebih baru adalah sumber terbuka ZeroBrane Studio Lua IDE. Anda dapat menggunakan ini alih-alih editor teks lain, tetapi bagian yang sangat keren adalah mungkin untuk melampirkannya ke plugin Anda yang sedang berjalan yang memungkinkan Anda men-debug-nya saat dijalankan. Saya sudah mencoba ini, dan itu membantu mengurangi waktu siklus perbaikan / muat ulang / debugging.

Dapatkah saya menulis skrip untuk melakukan jenis tugas yang saya jelaskan di atas dengan mudah?

Saya tidak berpikir kedua tugas itu 100% dapat dilakukan hanya dengan menggunakan Lightroom SDK, tetapi dapat melakukan banyak pekerjaan untuk Anda.

pilih file di setiap tumpukan dengan ekstensi JPG dan jadikan itu bagian atas tumpukan

Berikut ini beberapa kode mirip Lua untuk membuat Anda hampir sampai di sana:

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

Sayangnya, saya tidak melihat cara di SDK untuk melakukan tindakan baris komentar terdalam itu, setidaknya LR 5. Yang terbaik yang bisa saya lakukan adalah menelepon catalog:setSelectedPhotos(peer), lalu menyerahkannya kepada pengguna untuk benar-benar mengeklik lencana nomor untuk menyusun ulang tumpukan.

Melakukan salinan massal metadata dari file RAW (yang sudah ada) ke file JPEG (yang sudah ada)

Anda dapat melakukan ini dengan SDK yang ada, tetapi ada batasannya.

Misalnya, saat Anda bisa membaca nilai dateTimeOriginalbidang EXIF , tidak ada fasilitas di SDK itu sendiri untuk mengatur nilai. Saya berasumsi ini karena pengembang Lightroom memutuskan ini tidak boleh diubah secara program, bahwa ini adalah informasi berharga dari kamera. (Kenapa itu harus terjadi ketika ada Metadata> Edit Capture Time ... item menu yang saya tidak tahu, tapi begitulah.)

Tapi, setiap kali SDK mencoba menjebak Anda dengan salah satu dari keterbatasan ini, sering ada lubang palka untuk melarikan diri. Anda dapat menginstal ExifTool dan memanggilnya dari Lua, misalnya. Itu bukan solusi yang sempurna, karena Anda kemudian memiliki ketidakkonsistenan antara metadata katalog dan metadata foto, tetapi Lightroom akan melihat dan menempelkan lencana pada foto, yang ketika diklik akan memungkinkan Anda menyelesaikan konflik dengan memuat ulang metadata dari foto.

(Anda akan ingin memiliki opsi "Secara otomatis menulis perubahan ke XMP" yang diatur dalam dialog Pengaturan Katalog ketika menggunakan plugin semacam itu. Jika tidak, Anda membuatnya lebih mudah untuk menciptakan konflik dua arah, di mana baik katalog dan metadata foto memiliki berubah. Lightroom tidak tahu cara menggabungkan dua set metadata; itu membuat Anda memilih satu, dan menimpa salinan metadata lainnya dengannya.)


Batasan SDK sebenarnya substansial, satu-satunya tindakan yang didukung secara resmi, sesuai panduan ini adalah menambahkan tujuan ekspor atau publikasi, menerapkan pasca-pemrosesan tambahan pada ekspor, atau menambahkan bidang metadata khusus. Tindakan apa pun yang memerlukan pembaruan pengaturan / nilai apa pun, seperti dijelaskan dalam jawaban, kemungkinan didukung hingga Anda mencoba dan mengatur nilai yang diperbarui.
Steven Cunningham

1
@StevenCunningham: Panduan itu adalah dokumen tutorial; itu tidak dimaksudkan untuk mendaftar secara komprehensif semua hal yang dapat Anda lakukan dengan SDK. Selain panduan programmer itu, SDK juga menyertakan referensi HTML. Ada beberapa hal yang telah didokumentasikan Adobe dalam referensi yang tidak mereka bahas dalam panduan program PDF yang Anda tunjuk. Lihat LrPhoto:setRawMetadata()bagian, misalnya.
Warren Young

1
Jawaban yang bagus - +1.
D. Lambert

4

Saya tidak tahu Lightroom (belum - memilikinya tetapi belum menginstalnya), tetapi tergantung pada kompleksitas dari apa yang Anda coba lakukan, Anda mungkin ingin melihat sistem makro alat / alat otomatisasi keyboard seperti AutoHotKey . Ini memungkinkan Anda merekam atau memprogram urutan penekanan tombol yang dapat Anda temukan dan kemudian, ketika Anda menekan tombol panas, itu memainkannya kembali ke dalam program Anda (seperti LightRoom) sehingga - sejauh menyangkut program - terlihat seperti Anda mengetiknya. Ini memungkinkan Anda untuk mengotomatisasi segala macam hal tanpa harus memodifikasi program aplikasi Anda sama sekali.


Tentunya sebuah plugin akan menawarkan solusi otomatisasi berbutir lebih halus, ini adalah semacam rasio ekstrim dan OS-dependent. Saya menganggap plugin (lebih atau kurang) portabel antara Windows dan OSX.
Francesco

1
@ Francesco - Saya yakin Anda benar, tetapi Anda mungkin memerlukan lebih banyak keterampilan pemrograman dan pengetahuan tentang LightRoom API (atau apa pun yang mereka sebut antarmuka untuk penulis makro) untuk menempuh rute itu. Meskipun cukup banyak orang melakukan multiboot atau menggunakan vms, kebanyakan orang mungkin tetap menggunakan satu OS dan ada prosesor makro yang serupa untuk Linux, Windows, dan OSX. Bagian yang sulit adalah melakukan urutan tindakan dengan benar. Untuk sebagian besar hal sederhana , pengodean ulang dari satu prosesor makro ke prosesor lain tidak terlalu sulit.
Joe

Saya mengerti maksud Anda, tetapi menurut saya itu sedikit di luar ruang lingkup mengingat pertanyaan awal (OP berpengalaman dalam serangkaian bahasa, hanya saja tidak Lua). Dalam kasus apa pun saya tidak berpikir bahwa jawaban Anda layak untuk diturunkan karena memberikan solusi yang mungkin untuk masalah yang ada (itu adalah semacam pendekatan berpikir-out-of-the-box, saya akan mengatakan).
Francesco

Ini tentu saja pilihan yang valid, dan sesuatu yang saya pikirkan sedikit. Saya pikir saya akan lebih memilih pendekatan Lightroom-spesifik, yang tampaknya memiliki umur panjang yang lebih baik - saya mengantisipasi bahwa Lightroom API akan berubah lebih sedikit dari versi ke versi daripada solusi makro yang bergantung pada OS.
David

2

Saya hanya ingin melihat bagaimana melakukan pemrosesan batch berdasarkan nama file di Lightroom, dan untuk beberapa alasan itu tampak seperti cara termudah untuk melakukannya adalah melalui API. Berdasarkan pada pos @ Warren saya berhasil membuat loop dalam ini untuk tombol pada formulir, di mana saya juga bisa meletakkan textfield untuk logging ( logs_field), dan beberapa nilai input (seperti textfield untuk memasukkan nama file filenames_fielddan beberapa parameter tambahan untuk batch diproses dalam 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
 }

Potongan ini akan melalui beberapa pola nama file, dan menerapkan label untuk semua foto (Anda mungkin ingin mengganti getAllPhotosdengan getMultipleSelectedOrAllPhotosjika Anda hanya perlu menjalankannya pada beberapa gambar) yang cocok dengan pola tersebut. Saya harus melakukan ini karena saya sudah menandai foto di luar Lightroom tetapi membutuhkan cara mudah untuk memindahkan tag tersebut ke LR juga berdasarkan nama file.

Saya memasang seluruh proyek juga di github , tetapi potongan di atas harus baik-baik saja untuk digunakan sebagai dasar untuk tugas-tugas pemrosesan batch berbasis nama file.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.