लाइटरूम प्लगइन विकास - क्या यह इसके लायक है?


28

मैंने हाल ही में अपने फोटो संगठन और प्रबंधन वर्कफ़्लो को "कुछ भी नहीं" से लाइटरूम 4 में अपग्रेड किया है, और जब मैं आम तौर पर सॉफ्टवेयर से बहुत प्रसन्न होता हूं, तो एक विशेषता यह है कि इसकी कमी है, किसी भी प्रकार के मैक्रोज़ या स्क्रिप्ट को स्वचालित करने की क्षमता है। दोहराए जाने वाले कार्य - लाइटरूम में मेरे प्रवास के दौरान, कई बार दोहराए जाने वाले कार्य हुए हैं जो मैं करना चाहता हूं, और मैं सोच रहा हूं कि क्या यह सीखने के लायक है कि इनमें से कुछ कार्यों को करने के लिए LR प्लगइन्स कैसे लिखें। आपको उन चीजों के उदाहरण देने के लिए जिन्हें मैं स्वचालित करना चाहता हूं:

  • खड़ी रॉ + PSD + JPG तस्वीरों के एक बड़े समूह में, JPG एक्सटेंशन के साथ प्रत्येक स्टैक में फ़ाइल का चयन करें और इसे स्टैक के शीर्ष पर बनायें
  • (मौजूदा) RAW फ़ाइल से (मौजूदा) JPEG फ़ाइल की मेटाडेटा की एक सामूहिक प्रतिलिपि बनाएँ

मैं बहुत सारे अन्य तरीके देख सकता हूं कि स्क्रिप्ट लाइटरूम के भीतर छवि प्रबंधन को आसान बना सकती है, जो अब है। मेरे प्रश्न के तीन भाग हैं:

1) लाइटरूम प्लगइन्स लिखना कितना मुश्किल है? मैं कई प्रोग्रामिंग भाषाओं (C / C ++, Python, Perl) से अच्छी तरह वाकिफ हूं, लेकिन मैंने लुआ के साथ कुछ भी नहीं किया है। क्या लाइटरूम एपीआई को हुक करना आसान है, और क्या इसके लिए विकास के किसी विशेष उपकरण की आवश्यकता है?

2) क्या मैं ऊपर बताए गए कार्यों को आसानी से करने के लिए स्क्रिप्ट लिख सकता हूं?

3) क्या कोई अच्छा संसाधन या ट्यूटोरियल हैं जिसे मैं लाइटरूम प्लगइन विकास के साथ शुरू करने के लिए पढ़ सकता हूं?


मैं प्लगइन विकास पर वजन नहीं कर सकता - वास्तव में इसे देखा नहीं है - लेकिन ऐसा लगता है कि आपके उपयोग सबसे विशेष रूप से किसी वर्कफ़्लो से लाइटरूम के लिए जा रहे हैं। यही है, एक बार जब आप LR का उपयोग करना शुरू करते हैं, तो आपको उदाहरण के लिए RAW से .jpg या .psd में मेटा को कॉपी करने की आवश्यकता नहीं होगी, क्योंकि वर्कफ़्लो क्या है।
दान वोल्फगैंग

यह सच है, मेरे द्वारा दिए गए उदाहरण (सैद्धांतिक रूप से) एक बार फिर से करने की आवश्यकता नहीं होगी जब मैं अपने प्रारंभिक आयात के साथ करूँगा। हालांकि, शायद यह मामला है कि ऐसे अन्य कार्य हैं जिन्हें मैं भविष्य में स्वचालित करने में सक्षम होना चाहूंगा? मुझे इस गिनती पर यकीन नहीं है। लेकिन अगर प्लगइन्स को विकसित करना काफी आसान है, तो अब सीखना मुझे नुकसान नहीं पहुंचाएगा, और भविष्य में फायदेमंद हो सकता है। यदि प्लगइन विकास जटिल है, तो मैं परेशान नहीं करना चाहता हूं, और मुझे विश्वास है कि लाइटरूम सबसे ज्यादा काम करेगा जो मुझे एक बार मेरी लाइब्रेरी के निर्माण की आवश्यकता है।
डेविड

ओह, हाँ, स्वचालन और कनेक्टिविटी विकल्प अनंत हैं। मैं सिर्फ इसे इंगित कर रहा था क्योंकि, आपके पुस्तकालय के आकार के आधार पर, यह प्रयास के लायक नहीं हो सकता है (कम से कम, मेरे लिए ऐसा नहीं था)।
डेन वोल्फगैंग

जबकि मुझे लाइटरूम का उपयोग करने का तरीका नहीं पता है, आप वास्तव में अपनी सभी तस्वीरों के लिए EXIF ​​डेटा को बदलने के लिए एक कार्यक्रम बना सकते हैं। कृपया आर्काइव.मन्स.नम.मोबाइल / Microsoft.changexifwithcsharp और stackoverflow.com/questions/58649/… और stackoverflow.com/questions/226973/how-to-edit-exif-data-in-net की जाँच करें । आपने उल्लेख किया कि आप C ++ को जानते हैं, मेरा मानना ​​है कि आप
K ''

+1, चूँकि इस सवाल ने मुझे इस Lua sdk को देखने का विचार दिया :-)
फ्रांसेस्को

जवाबों:


39

मैंने लुआ के साथ कुछ नहीं किया है

लुआ शायद सबसे सरल, सबसे साफ सुथरी प्रोग्रामिंग भाषा है जिसे मैं जानता हूं। (और मुझे कुछ पता है ।)

लुआ की सादगी भी इसकी सबसे बड़ी कमजोरी है: डिजाइन के हिसाब से छोटी, साफ भाषा होने के नाते इसमें बहुत सारी चीजें नहीं हैं, जो आपको जावा, या बैटरी जैसी औद्योगिक-श्रेणी की भाषा से आने पर मिलेंगी। -पाइथन की तरह भाषा को शामिल किया गया।

Lua को C द्वारा विस्तारित करने के लिए डिज़ाइन किया गया है, जिसका इस मामले में मतलब है Lightroom का SDK। यह बहुत अच्छा है अगर Adobe ने उन उपकरणों को प्रदान करने के लिए काम किया है जिनकी आपको आवश्यकता है जो कि Lua में निर्मित नहीं हैं, लेकिन हर बार और फिर आप शायद अपने आप को बाहरी उपकरणों को कॉल करके चीजों को प्राप्त करने के लिए कहेंगे।

क्या Lightroom API को हुक करना आसान है

इसके बारे में केवल मुश्किल हिस्सा यह है कि आपको अपने स्रोत कोड को एक विशेष तरीके से संरचना करने की आवश्यकता है और Info.luaअपने प्लगइन के बारे में लाइटरूम को बताने के लिए एक विशेष फ़ाइल प्रदान करें। यह सब एसडीके डॉक्स में बताया गया है । एसडीके में कई कामकाजी प्लगइन्स शामिल हैं, जिनमें से एक काफी विस्तृत "हैलो वर्ल्ड" प्लगइन शामिल है, जिसे उपयोगी शुरुआती कोड के लिए परिमार्जन किया जा सकता है।

क्या इसे विकास के लिए किसी विशेष उपकरण की आवश्यकता है?

आप बस एक पाठ संपादक के साथ प्राप्त कर सकते हैं।

लाइटरूम में कोई डिबगिंग सुविधा नहीं है, लेकिन एसडीके में डिबग लॉगिंग सुविधा है। आप इन संदेशों WinDbgको Windows या ConsoleOS X पर पकड़ सकते हैं

एक और हालिया विकास ओपन सोर्स ZeroBrane Studio Lua IDE है। आप इसे किसी अन्य टेक्स्ट एडिटर के बजाय उपयोग कर सकते हैं, लेकिन वास्तव में अच्छा सा यह है कि इसे अपने रनिंग प्लगइन से अटैच करना संभव है, जो इसे रन करते ही आपको डीबग कर देता है। मैंने यह कोशिश की है, और यह फिक्सिंग / पुनः लोड / पुनः आरंभ डिबगिंग चक्र समय को कम करने में मदद करता है।

क्या मैं ऊपर बताए गए कार्यों को आसानी से करने के लिए स्क्रिप्ट लिख सकता हूं?

मुझे नहीं लगता कि या तो टास्क 100% डू-सक्षम है जो केवल लाइटरूम एसडीके का उपयोग कर सकता है, लेकिन यह आपके लिए बहुत काम कर सकता है।

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

दुर्भाग्य से, मुझे उस अंतरतम टिप्पणी लाइन की कार्रवाई को करने के लिए एसडीके में एक रास्ता नहीं दिखता है, कम से कम एलआर 5 के रूप में। सबसे अच्छा मैं साथ आ सकता हूं कॉल करना है catalog:setSelectedPhotos(peer), फिर उपयोगकर्ता को छोड़ दें वास्तव में स्टैक को फिर से चालू करने के लिए नंबर बैज पर क्लिक करें।

(मौजूदा) RAW फ़ाइल से (मौजूदा) JPEG फ़ाइल की मेटाडेटा की एक सामूहिक प्रतिलिपि बनाएँ

आप इसमें से कुछ मौजूदा एसडीके के साथ कर सकते हैं, लेकिन सीमाएं हैं।

उदाहरण के लिए, जब आप EXIF फ़ील्ड का मान पढ़ सकते हैं , तो मान सेटdateTimeOriginal करने के लिए SDK में कोई सुविधा नहीं है । मुझे लगता है कि यह इसलिए है क्योंकि लाइटरूम डेवलपर्स ने तय किया कि इसे कभी भी प्रोग्रामेटिक रूप से नहीं बदला जाना चाहिए, क्योंकि यह कैमरे से कीमती जानकारी है। (ऐसा क्यों होना चाहिए जब मेटाडेटा> कैप्चर टाइम संपादित करें ... मेनू आइटम मुझे नहीं पता, लेकिन वहां आपके पास है।)

लेकिन, जब भी एसडीके आपको इन सीमाओं में से किसी एक के साथ फंसाने की कोशिश करता है, तो अक्सर पलायन होता है। आप ExifTool स्थापित कर सकते हैं और उदाहरण के लिए लुआ से इसे कॉल कर सकते हैं । यह एक सही समाधान नहीं है, क्योंकि आपके पास कैटलॉग मेटाडेटा और फोटो मेटाडेटा के बीच असंगतता है, लेकिन लाइटरूम नोटिस करेगा और फोटो पर एक बैज लगाएगा, जिसे क्लिक करने पर आप फोटो से मेटाडेटा को पुनः लोड करके संघर्ष को हल कर देंगे।

(आप इस तरह के एक प्लगइन का उपयोग करते समय कैटलॉग सेटिंग्स संवाद में सेट "स्वचालित रूप से एक्सएमपी में परिवर्तन लिखना" विकल्प चाहते हैं। अन्यथा, आप दो-तरफ़ा संघर्ष बनाने में आसान बनाते हैं, जहां कैटलॉग और फोटो मेटाडेटा दोनों हैं। परिवर्तित। लाइटरूम को मेटाडेटा के दो सेटों को मर्ज करने का तरीका नहीं पता है, यह आपको एक चुनता है, और यह इसके साथ अन्य मेटाडेटा कॉपी को अधिलेखित करता है।)


एसडीके की सीमाएं वास्तव में पर्याप्त हैं, केवल क्रियाएं जो आधिकारिक रूप से समर्थित हैं, इस गाइड के अनुसार निर्यात या प्रकाशन गंतव्य जोड़ रहे हैं, निर्यात पर अतिरिक्त पोस्ट-प्रोसेसिंग लागू कर रहे हैं, या कस्टम मेटाडेटा फ़ील्ड जोड़ रहे हैं। किसी भी क्रिया को किसी भी सेटिंग / मूल्य को अपडेट करने की आवश्यकता होती है, जैसा कि उत्तर में वर्णित है, जब तक आप कोशिश करते हैं और अपडेट किए गए मान को सेट करने तक संभव है, तब तक समर्थित है।
स्टीवन कनिंघम

1
@StevenCunningham: यह गाइड एक ट्यूटोरियल दस्तावेज़ है; इसका मतलब उन सभी चीजों को व्यापक रूप से सूचीबद्ध करना नहीं है जो आप एसडीके के साथ कर सकते हैं। उस प्रोग्रामर के गाइड के अलावा, एसडीके में एक HTML संदर्भ भी शामिल है। काफी कुछ चीजें हैं जो एडोब ने उस संदर्भ में प्रलेखित की हैं जो उन्होंने पीडीएफ प्रोग्रामर के गाइड को कवर नहीं किया था। LrPhoto:setRawMetadata()उदाहरण के लिए अनुभाग देखें ।
वॉरेन यंग

1
अच्छा जवाब - +1।
डी। लैम्बर्ट

4

मैं लाइटरूम (अभी तक नहीं जानता - लेकिन अभी तक इसे स्थापित नहीं किया है) नहीं जानता, लेकिन आप क्या करने की कोशिश कर रहे हैं, इसकी जटिलता के आधार पर, आप ऑटोहोटेकी जैसे सिस्टम वाइड कीबोर्ड मैक्रो / ऑटोमेशन टूल को देखना चाहते हैं। । यह आपको कीस्ट्रोक्स के किसी भी क्रम को रिकॉर्ड या प्रोग्राम करने देता है जिसे आप समझ सकते हैं और फिर, जब आप एक हॉट कुंजी दबाते हैं, तो यह उन्हें आपके प्रोग्राम (जैसे लाइटरूम) में वापस खेलता है ताकि - जहां तक ​​कार्यक्रम का संबंध है - यह दिखता है जैसे आपने इसे टाइप किया। यह आपको अपने एप्लिकेशन प्रोग्राम को बिल्कुल भी संशोधित किए बिना सभी प्रकार की चीजों को स्वचालित करने की अनुमति देता है।


निश्चित रूप से एक प्लगइन अधिक महीन दाने वाले स्वचालन समाधान की पेशकश करेगा, यह एक प्रकार का चरम अनुपात और ओएस-निर्भर है। मुझे लगता है कि विंडोज़ और OSX के बीच प्लगइन्स अधिक (कम या ज्यादा) पोर्टेबल हैं।
फ्रांसेस्को

1
@Francesco - मुझे यकीन है कि आप सही हैं, लेकिन आपको उस मार्ग पर जाने के लिए संभवतः बहुत अधिक प्रोग्रामिंग कौशल और लाइटरूम एपीआई (या जो भी वे मैक्रो लेखकों के लिए इंटरफ़ेस कहते हैं) का ज्ञान चाहिए। हालाँकि बहुत से लोग मल्टीबूट करते हैं या vms का उपयोग करते हैं, लेकिन अधिकांश लोग संभवतः एक OS से चिपके रहते हैं और लिनक्स, विंडोज और OSX के लिए समान मैक्रो प्रोसेसर होते हैं। कठोर भाग को क्रियाओं का क्रम मिल रहा है। अधिकांश सरल चीजों के लिए, एक मैक्रो प्रोसेसर से दूसरे में पुनरावृत्ति करना बहुत मुश्किल नहीं है।
जो

मैं आपकी बात देख रहा हूं लेकिन मेरी राय में यह मूल प्रश्न से थोड़ा हटकर है (ओपी अच्छी तरह से भाषाओं की एक श्रृंखला में पारंगत है, सिर्फ लुआ नहीं)। किसी भी मामले में मैंने नहीं सोचा था कि आपका जवाब कम होने का हकदार है क्योंकि यह हाथ में समस्या का संभावित समाधान प्रदान करता है (यह एक तरह का थिंक-आउट-ऑफ-द-बॉक्स दृष्टिकोण है, मैं कहूंगा)।
फ्रांसेस्को

यह निश्चित रूप से एक वैध विकल्प है, और कुछ मैंने थोड़ा सा सोचा है। मुझे लगता है कि मैं एक लाइटरूम-विशिष्ट दृष्टिकोण को प्राथमिकता दूंगा, जो बेहतर दीर्घायु के लिए लगता है - मुझे अनुमान है कि लाइटरूम एपीआई ओएस-निर्भर मैक्रो समाधान की तुलना में संस्करण से कम संस्करण में बदल जाएगा।
डेविड

2

मैं बस देखना चाहता था कि लाइटरूम में फाइलनाम के आधार पर बैच प्रसंस्करण कैसे किया जाए, और किसी कारण से यह एपीआई के माध्यम से ऐसा करने का सबसे आसान तरीका लग रहा था। @ वॉरेन की पोस्ट के आधार पर मैं एक फॉर्म पर एक बटन के लिए इस आंतरिक लूप को बनाने में कामयाब रहा, जहां मैं लॉगिंग ( 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कि वे पैटर्न से मेल खाते हैं मामले में आप केवल अपने चित्रों में से कुछ पर इसे चलाने के लिए की जरूरत है)। मुझे ऐसा करना पड़ा क्योंकि मैंने पहले ही लाइटरूम के बाहर की तस्वीरों को टैग कर दिया था, लेकिन उन टैग्स को LR में और साथ ही फाइलनाम के आधार पर स्थानांतरित करने के लिए एक आसान तरीका चाहिए था।

मैंने पूरी परियोजना के साथ-साथ जीथब पर भी काम किया , लेकिन उपरोक्त स्निपेट को फ़ाइल नाम आधारित बैच प्रसंस्करण कार्यों के लिए आधार के रूप में उपयोग करने के लिए ठीक होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.