slimg - Rust से बना image optimization CLI (54GB → 8GB)
(github.com/clroot)यह क्यों बनाया गया?
मैं Google के Squoosh टूल का अक्सर इस्तेमाल करता था, लेकिन उसका CLI version चलाने पर error देता था और web version उपयोग लायक तो था, पर... Google की खास तरह की उपेक्षा वाली स्थिति देखकर आखिरकार मैंने इसे खुद बनाने का फैसला किया। विकल्प भी खोजे, लेकिन कोई पसंद नहीं आया।
slimg क्या है?
यह Rust में लिखा गया एक image optimization CLI है। यह JPEG, WebP, PNG, AVIF, QOI के बीच conversion, resize और quality optimization को support करता है। यह MozJPEG, OxiPNG, ravif जैसे आधुनिक codec का उपयोग करता है।
वास्तविक उपयोग का परिणाम:
मैंने 54GB की निजी photos को batch optimization किया और आकार 8GB तक घट गया। (85% कमी) quality ऐसी रही कि नंगी आंखों से लगभग कोई फर्क महसूस नहीं होता।
# directory batch processing (parallel)
slimg convert ./photos --format webp --quality 85 --recursive
# resize + conversion
slimg resize photo.jpg --width 800 --format avif --quality 70
तकनीकी विशेषताएँ:
- Rayon के साथ सभी CPU cores पर parallel processing
- temporary file → atomic rename के जरिए सुरक्षित overwrite
- library (
slimg-core) और CLI अलग (दोबारा उपयोग योग्य) - C codec bindings के जरिए native performance
इंस्टॉलेशन:
brew install clroot/tap/slimg
# https://github.com/clroot/slimg/releases
GitHub: https://github.com/clroot/slimg
7 टिप्पणियां
slimg की Kotlin binding जोड़ दी गई है। अब server/backend में image processing को आसानी से संभाला जा सकता है।
मैंने भी PNG में बने फ़ाइलों से background remove करके उन्हें SVG में convert करते हुए size कम करने और quality बनाए रखने वाला एक टूल LLM की मदद से बनाया है। इसे Rust में बनाया था, और SVG में convert करना तो बहुत अच्छी तरह हो गया, लेकिन SVG का size कम करने के लिए आखिरकार
svgoनाम के प्रोग्राम का इस्तेमाल करना ही पड़ा।svgoSVG में गैर-ज़रूरी कोड कम करने में बहुत सक्षम है, लेकिन मुझे लगा कि यह ऐसा हिस्सा है जिसके लिए domain knowledge चाहिए, इसलिए मैंsvgoका उपयोग कर रहा था.लेकिन MozJPEG, OxiPNG, ravif जैसे आधुनिक codecs का उपयोग करने के बारे में मैंने सोचा ही नहीं था। अब मैं भी इसे एक बार आज़माना चाहता हूँ। प्रेरणा देने के लिए धन्यवाद।
मैं पहले से SalOne22/rimage इस्तेमाल कर रहा था, तो देखना पड़ेगा कि यह कैसा है। फिलहाल Python binding देना इसका एक फ़ायदा लगता है।
slimg के लिए Python bindings भी जोड़ी गई हैं।
मैं भी Rust में एक टूल बनाकर इस्तेमाल कर रहा हूँ जो compressed files में बंधी images को bulk में convert कर देता है, इसलिए लगता है कि मुझे इस repository के लिए internal calls बदलकर देखना चाहिए.
क्या avif decoding के सिर्फ macOS पर ही उपलब्ध होने की कोई खास वजह है?
अब 0.1.3 वर्ज़न का उपयोग करने पर Windows और Linux में भी avif decoding संभव है।
यह इसलिए है क्योंकि build में इस्तेमाल किए गए GitHub Actions environment में
avifको handle करने वाली library का version compatible नहीं है। जल्द ही build environment को ठीक करके Linux machine पर भीavifsupport जोड़ा जाएगा।