slimg - CLI optimasi gambar yang dibuat dengan Rust (54GB → 8GB)
(github.com/clroot)Mengapa dibuat?
Saya sering memakai tool Google bernama Squoosh, tetapi versi CLI-nya error saat dijalankan, dan versi web-nya memang lumayan berguna, tapi... karena khas Google sering dibiarkan begitu saja, akhirnya saya memutuskan untuk membuatnya sendiri. Saya juga sempat mencari alternatif, tetapi tidak ada yang benar-benar cocok.
Apa itu slimg?
Ini adalah CLI optimasi gambar yang ditulis dengan Rust. Mendukung konversi antar JPEG, WebP, PNG, AVIF, dan QOI, serta resize dan optimasi kualitas. Menggunakan codec modern seperti MozJPEG, OxiPNG, dan ravif.
Hasil penggunaan nyata:
Saya mengoptimalkan secara batch 54GB foto pribadi dan ukurannya turun menjadi 8GB. (berkurang 85%) Kualitasnya hampir tidak terasa berbeda jika dilihat dengan mata telanjang.
# Pemrosesan batch direktori (paralel)
slimg convert ./photos --format webp --quality 85 --recursive
# Resize + konversi
slimg resize photo.jpg --width 800 --format avif --quality 70
Fitur teknis:
- Pemrosesan paralel di semua core CPU dengan Rayon
- Overwrite aman dengan temporary file → atomic rename
- Pemisahan library (
slimg-core) dan CLI (bisa digunakan ulang) - Performa native melalui binding codec C
Instalasi:
brew install clroot/tap/slimg
# https://github.com/clroot/slimg/releases
GitHub: https://github.com/clroot/slimg
7 komentar
Binding Kotlin untuk slimg telah ditambahkan. Pemrosesan gambar di server/backend kini bisa dilakukan dengan mudah.
Saya juga membuat dengan LLM alur untuk menghapus latar belakang dari file yang dibuat sebagai PNG lalu mengonversinya ke SVG sambil mengurangi ukuran dan mempertahankan kualitas. Saya membuatnya dengan Rust, dan bagian konversi ke SVG berjalan sangat baik, tetapi untuk mengurangi ukuran di SVG saya tidak punya pilihan selain menggunakan program bernama
svgo.svgosangat unggul dalam menghapus kode yang tidak perlu dari SVG, tetapi rasanya bagian itu memang memerlukan pengetahuan domain, jadi saya memanfaatkansvgo. Namun, saya tidak kepikiran untuk menggunakan codec terbaru seperti MozJPEG, OxiPNG, dan ravif. Saya jadi ingin mencobanya juga. Terima kasih sudah memberi inspirasi.Saya sebelumnya menggunakan SalOne22/rimage, tetapi sepertinya saya perlu melihat bagaimana yang ini. Untuk saat ini, menyediakan binding Python tampaknya merupakan keunggulan.
Binding Python untuk slimg juga telah ditambahkan.
Saya juga membuat dan memakai alat di Rust yang mengonversi gambar yang dibundel dalam file arsip secara batch, jadi sepertinya saya perlu mencoba mengubah pemanggilan internalnya ke repositori ini.
Apakah ada alasan tertentu mengapa decoding AVIF hanya tersedia di macOS?
Kini, jika Anda menggunakan versi 0.1.3, decoding avif juga tersedia di Windows dan Linux.
Hal ini terjadi karena versi library yang menangani avif tidak kompatibel di lingkungan github actions yang digunakan untuk build. Dalam waktu dekat, lingkungan build akan diperbaiki agar mendukung avif juga di mesin Linux.