कमांड लाइन (jpgboost-cli)
jpgboost-cli ग्राफ़िकल इंटरफ़ेस खोले बिना आपकी इमेज कंप्रेस करता है। यह स्क्रिप्ट, शेड्यूल्ड टास्क और कंटीन्यूअस इंटीग्रेशन के लिए सही टूल है।
आपका लाइसेंस 2 इंस्टॉलेशन तक कवर करता है जिन्हें आप व्यक्तिगत रूप से इस्तेमाल करते हैं। ऐप और CLI को अलग-अलग इंस्टॉलेशन माना जाता है, भले ही दोनों एक ही Mac पर इंस्टॉल हों। ये Settings > License में डिवाइस के रूप में दिखते हैं।
ऐसा सर्वर जो सिर्फ़ आपके अपने ऑटोमेशन के लिए CLI चलाता है, जैसे कंटीन्यूअस इंटीग्रेशन या शेड्यूल्ड टास्क, बिना किसी अतिरिक्त लाइसेंस की ज़रूरत के इन दो स्लॉट में से एक को इस्तेमाल कर सकता है। ज़्यादा जानकारी के लिए सर्वर पर लाइसेंस और प्रति उपयोगकर्ता एक लाइसेंस सेक्शन देखें।
कमांड लाइन किस काम आती है
jpgboost-cli एक स्वतंत्र एक्ज़ीक्यूटेबल है, जो JPGBoost.app के अंदर शामिल है। यह न तो लोकल API पर निर्भर करता है और न ही ऐप के किसी चल रहे इंस्टेंस पर: यह सीधे उसी डिकोडिंग और एनकोडिंग इंजन का इस्तेमाल करता है, इसलिए बिलकुल वैसी ही फ़ाइलें बनाता है जैसी ग्राफ़िकल इंटरफ़ेस बनाता है।
यह हर उस स्थिति के लिए सही एंट्री पॉइंट है जहाँ कोई इंटरफ़ेस नहीं खुलना चाहिए: एक शेल स्क्रिप्ट, एक शेड्यूल्ड टास्क, एक कंटीन्यूअस इंटीग्रेशन, बड़ी संख्या में फ़ाइलों की प्रोसेसिंग।
jpgboost-cli JPGBoost.app में शामिल है। न तो कोई कंपाइलेशन ज़रूरी है, न ही किसी लाइब्रेरी की इंस्टॉलेशन, क्योंकि यह ऐप में पहले से इंटीग्रेटेड कंपोनेंट्स का इस्तेमाल करता है।
कमांड को एक्सेस करने योग्य बनाना
बाइनरी ऐप के पैकेज के अंदर स्थित है। आप इसे सीधे इसके पूरे पथ से कॉल कर सकते हैं:
/Applications/JPGBoost.app/Contents/MacOS/jpgboost-cli --help
किसी भी फ़ोल्डर से jpgboost-cli चलाने के लिए, एक बार सिम्बॉलिक लिंक बनाएँ:
sudo ln -s /Applications/JPGBoost.app/Contents/MacOS/jpgboost-cli \
/usr/local/bin/jpgboost-cli
jpgboost-cli --help
चूँकि लिंक पैकेज की ओर इशारा करता है, यह ऐप के अपडेट होने के बाद भी वैध रहता है। इस पेज के उदाहरण इसी इंस्टॉलेशन को मानकर चलते हैं; इसके बिना, jpgboost-cli की जगह ऊपर बताया गया पूरा पथ इस्तेमाल करें।
आप /usr/local/bin की जगह अपना पर्सनल फ़ोल्डर इस्तेमाल कर सकते हैं, जैसे ~/bin, बशर्ते वह आपके PATH में शामिल हो। एक आसान विकल्प है अपने ~/.zshrc में एक alias जोड़ना।
सर्वर पर लाइसेंस
ऐसी मशीन जो सिर्फ़ CLI चलाती है, जैसे बिना ग्राफ़िकल इंटरफ़ेस वाला सर्वर, को JPGBoost.app इस्तेमाल किए बिना एक्टिवेट और मैनेज किया जा सकता है।
# CLI से इस मशीन का आइडेंटिफ़ायर
jpgboost-cli --machine-id
# पहला एक्टिवेशन, खरीदारी के बाद ईमेल से मिले टोकन के साथ
jpgboost-cli --activate ACT-XXXX-XXXX-XXXX-XXXX-XXXX
# इस पहले से एक्टिवेटेड सर्वर से, दूसरा डिवाइस जोड़ने के लिए कोड जनरेट करना
jpgboost-cli --add-device
# कहीं और जनरेट किए गए कोड की मदद से लाइसेंस से जुड़ना (ऐप या दूसरी CLI)
jpgboost-cli --pair XXXX-XXXX
# अगर सर्वर के पास लाइसेंस का नया वर्शन है, तो उसे पाना
jpgboost-cli --sync
# इस्तेमाल की गई इंस्टॉलेशन की संख्या / सीमा, और उनकी लिस्ट — लोकल रीड, बिना किसी नेटवर्क कॉल के
jpgboost-cli --devices
ऐप और CLI को दो अलग-अलग इंस्टॉलेशन माना जाता है, भले ही वे एक ही Mac पर हों। हर एक का अपना खुद का इंस्टॉलेशन आइडेंटिफ़ायर होता है और इसलिए यह Pro लाइसेंस द्वारा अनुमति दिए गए दो स्लॉट में से एक को लेता है।
आप अपने लाइसेंस को अलग-अलग तरीक़ों से इस्तेमाल कर सकते हैं, उदाहरण के लिए अपने Mac पर ऐप और किसी सर्वर पर CLI के साथ, एक ही Mac पर ऐप और CLI के साथ, दो अलग-अलग Mac पर ऐप के साथ, या ऐसे सर्वर पर सिर्फ़ CLI के साथ जो कभी ऐप नहीं खोलता।
सिंटैक्स और ऑप्शन
jpgboost-cli <file...> --output <folder> [options]
| ऑप्शन | फ़ंक्शन | डिफ़ॉल्ट वैल्यू |
|---|---|---|
--output <folder> | गंतव्य फ़ोल्डर, अगर मौजूद न हो तो बन जाता है | ज़रूरी |
--quality <1-100> | कम्प्रेशन क्वालिटी | 75 |
--format <format> | png, jpeg, heic, avif, webp या jxl | jpeg |
--profile <name> | एक नामित एक्सपोर्ट प्रोफ़ाइल लागू करता है | कोई नहीं |
--jobs <N> | पैरेलल में प्रोसेस की गई फ़ाइलें | कोर की संख्या |
--json | पढ़ने योग्य टेक्स्ट की जगह स्ट्रक्चर्ड JSON आउटपुट | बंद |
--help | हेल्प दिखाता है | — |
शुरुआती उदाहरण
# WebP में दो फ़ाइलें, क्वालिटी 60
jpgboost-cli foto1.jpg foto2.png --quality 60 --format webp --output ./compressed
# foto1.jpg: 4.2 MB -> 890 KB (-79%) -> ./compressed/foto1.webp
# foto2.png: 1.8 MB -> 620 KB (-66%) -> ./compressed/foto2.webp
#
# 2 फ़ाइल(ें) प्रोसेस हुईं, 0 फ़ेल हुईं।
# AVIF में एक पूरा फ़ोल्डर
jpgboost-cli ~/Pictures/export/*.png --format avif --quality 65 --output ~/Pictures/web
बैच प्रोसेसिंग और पैरेलेलिज़्म
सैकड़ों या हज़ारों फ़ाइलों के लिए, --jobs ऑप्शन एक साथ कई इमेज को प्रोसेस करता है। हर फ़ाइल को अलग से डिकोड, एनकोड और फिर रिलीज़ किया जाता है: मेमोरी का इस्तेमाल इंतज़ार कर रही फ़ाइलों की संख्या के साथ नहीं, बल्कि सिर्फ़ --jobs की वैल्यू के साथ बढ़ता है।
# एक साथ प्रोसेस हुई आठ फ़ाइलें
jpgboost-cli ~/Photos/batch/*.jpg --jobs 8 --format webp --output ~/Photos/web
# एक-एक करके, किसी साझा मशीन पर लोड सीमित करने के लिए
jpgboost-cli ~/Photos/batch/*.jpg --jobs 1 --format webp --output ~/Photos/web
12 फ़ाइलों के एक बैच पर, --jobs 8, --jobs 1 से लगभग चार गुना तेज़ पाया गया। असली फ़ायदा आपके Mac के कोर की संख्या और गंतव्य फ़ॉर्मेट पर निर्भर करता है: AVIF और JPEG XL, JPEG या HEIC की तुलना में एनकोड करने में साफ़ तौर पर धीमे होते हैं।
एक्सपोर्ट प्रोफ़ाइल इस्तेमाल करना
--profile ऑप्शन ऐप में या API के ज़रिए बनाई गई प्रोफ़ाइल को दोबारा इस्तेमाल करता है। यह सिर्फ़ उतना ही पूरा करता है जो आपने साफ़ तौर पर नहीं बताया।
# फ़ॉर्मेट, क्वालिटी और फ़ोल्डर सब प्रोफ़ाइल से आते हैं
jpgboost-cli --profile "Web JPEG" *.png
# साफ़ तौर पर बताया गया फ़ोल्डर हावी रहता है, बाकी प्रोफ़ाइल से आता है
jpgboost-cli --profile "Web JPEG" --output ./de/livery *.png
CLI सीधे किसी प्रोफ़ाइल को बना या अपडेट भी कर सकती है, बिना Settings या लोकल API से गुज़रे:
jpgboost-cli --create-profile "Web JPEG" --format jpeg --quality 70 --output ./compressed
--format और --quality ज़रूरी हैं, --output वैकल्पिक है (बताया गया फ़ोल्डर पहले से मौजूद होना चाहिए)। पहले से इस्तेमाल हुआ नाम डुप्लिकेट बनाने की जगह मौजूदा प्रोफ़ाइल की जगह ले लेता है — यह वैसा ही व्यवहार है जैसा ऐप के Profiles टैब और लोकल API में होता है। बाकी CLI की तरह, इसके लिए JPGBoost Pro ज़रूरी है।
JSON आउटपुट
--json के साथ, आउटपुट एक JSON array है जिसमें हर प्रोसेस हुई फ़ाइल एक JSON ऑब्जेक्ट के बराबर होती है, बिलकुल लोकल API के रिस्पॉन्स जैसे ही रूप में, जो jq या किसी अन्य टूल के साथ जोड़ना आसान बनाता है।
jpgboost-cli *.png --format webp --output ./output --json
# jq के साथ जोड़ना: सिर्फ़ एरर वाली फ़ाइलें रखना
jpgboost-cli *.png --format webp --output ./output --json \
| jq '.[] | select(.error != null)'
उपलब्ध फ़ील्ड: path, originalSizeBytes, compressedSizeBytes, ratio, destination और error।
एग्ज़िट कोड
| कोड | अर्थ |
|---|---|
0 | सभी फ़ाइलें सफलतापूर्वक प्रोसेस हुईं |
77 | इस मशीन के लिए कोई वैलिड Pro लाइसेंस नहीं |
| शून्य के अलावा कुछ भी | कम से कम एक फ़ाइल फ़ेल हुई; किसी स्क्रिप्ट या कंटीन्यूअस इंटीग्रेशन में सीधे इस्तेमाल हो सकता है |
एक जैसे नाम वाली फ़ाइलें
एक जैसे बेस नाम वाली दो इनपुट फ़ाइलें स्वाभाविक रूप से एक ही आउटपुट की ओर इशारा करती हैं। WebP में कन्वर्ट किए गए a/foto.jpg और b/foto.png, दोनों foto.webp ही बनाएँगे।
JPGBoost उन्हें ओवरराइट नहीं करता: दूसरी फ़ाइल को अलग नाम मिलता है।
a/foto.jpg -> foto.webp
b/foto.png -> foto-2.webp
नाम आर्ग्युमेंट के क्रम के हिसाब से दिए जाते हैं, चाहे --jobs के साथ एक्ज़ीक्यूशन का क्रम कुछ भी हो, इसलिए नतीजा दोबारा बनाया जा सकता है (reproducible)। यही नियम ऐप, Shortcuts, AppleScript और वॉच किए गए फ़ोल्डर में भी लागू होता है।
यह नियम सिर्फ़ अलग-अलग फ़ाइलों के बीच होने वाली टक्कर पर लागू होता है। उसी फ़ाइल को उसी फ़ोल्डर में दोबारा एक्सपोर्ट करना उसके पिछले आउटपुट की जगह ले लेता है, बिना foto-2, foto-3 वगैरह जमा किए।
इंस्टॉलेशन जाँचना
किसी भी समय जाँचें कि कमांड सही तरीक़े से रिस्पॉन्स दे रहा है:
jpgboost-cli --help