slimg - Rust ile yapılmış görüntü optimizasyonu CLI'ı (54GB → 8GB)
(github.com/clroot)Neden yapıldı?
Google'ın Squoosh adlı aracını sık kullanıyordum, ancak CLI sürümü çalıştırıldığında hata veriyordu ve web sürümü kullanışlı olsa da... Google'a özgü o bakımsız bırakılmış hâl yüzünden sonunda kendim yapmaya karar verdim. Alternatiflere baktım ama içime sinen bir şey olmadı.
slimg nedir?
Rust ile yazılmış bir görüntü optimizasyonu CLI'ıdır. JPEG, WebP, PNG, AVIF ve QOI arasında dönüştürme, yeniden boyutlandırma ve kalite optimizasyonunu destekler. MozJPEG, OxiPNG ve ravif gibi modern codec'leri kullanır.
Gerçek kullanım sonucu:
Kişisel fotoğraflarımdan oluşan 54GB'lık arşivi toplu olarak optimize ettim ve boyutu 8GB'a düştü. (%85 azalma) Kalite ise gözle bakıldığında neredeyse fark edilmeyecek seviyede.
# Dizin toplu işleme (paralel)
slimg convert ./photos --format webp --quality 85 --recursive
# Yeniden boyutlandırma + dönüştürme
slimg resize photo.jpg --width 800 --format avif --quality 70
Teknik özellikler:
- Rayon ile tüm CPU çekirdeklerinde paralel işleme
- Geçici dosya → atomic rename ile güvenli overwrite
- Kütüphane (
slimg-core) ve CLI ayrımı (yeniden kullanılabilir) - C codec binding'leri ile yerel performans
Kurulum:
brew install clroot/tap/slimg
# https://github.com/clroot/slimg/releases
GitHub: https://github.com/clroot/slimg
7 yorum
slimg için Kotlin binding'leri eklendi. Sunucu/backend tarafında görüntü işlemeyi kolayca yapabilirsiniz.
Ben de PNG olarak üretilen dosyalarda arka planı kaldırıp SVG'ye dönüştürürken boyutu küçültüp kaliteyi koruyan bir şeyi LLM ile yaptım. Rust ile yazdım ve SVG'ye dönüştürme kısmı çok iyi çalıştı, ancak SVG'de boyutu küçültmek için
svgoadlı bir programı kullanmaktan başka çare yoktu.svgo, SVG içindeki gereksiz kodları azaltma konusunda çok başarılı, ama bu kısım sanırım alan bilgisi gerektiriyor; bu yüzdensvgo'dan yararlanıyordum.Ancak MozJPEG, OxiPNG, ravif gibi modern codec'leri kullanmayı hiç düşünmemiştim. Ben de bir kez denemek istedim. İlham verdiğiniz için teşekkür ederim.
Ben zaten SalOne22/rimage kullanıyordum, bunun nasıl olduğunu da görmek gerekecek sanırım. En azından Python binding sunması bir avantaj gibi görünüyor.
slimg için Python binding'leri de eklendi.
Ben de sıkıştırılmış arşivler içinde paketlenmiş görselleri toplu dönüştüren bir aracı Rust ile yapıp kullanıyorum; bu repository ile iç çağrıları değiştirmeyi denemem gerekecek.
Acaba avif decoding’in yalnızca macOS’ta mümkün olmasının özel bir nedeni var mı?
Artık 0.1.3 sürümünü kullanırsanız Windows ve Linux'ta da AVIF decoding mümkün.
Bunun nedeni, derleme için kullanılan GitHub Actions ortamında
avifile çalışan kütüphane sürümlerinin birbiriyle uyumlu olmaması. Yakında derleme ortamını düzelterek Linux makinelerde deavifdesteğini etkinleştirmeyi planlıyoruz.