slimg - CLI de optimización de imágenes hecho en Rust (54 GB → 8 GB)
(github.com/clroot)¿Por qué lo hice?
Usaba mucho una herramienta de Google llamada Squoosh, pero la versión CLI daba errores al ejecutarse y la versión web era bastante útil, aunque... con ese típico estado de abandono de Google, al final decidí hacerla yo mismo. Busqué alternativas, pero no encontré ninguna que me convenciera.
¿Qué es slimg?
Es un CLI de optimización de imágenes escrito en Rust. Soporta conversión entre JPEG, WebP, PNG, AVIF y QOI, además de redimensionado y optimización de calidad. Usa códecs modernos como MozJPEG, OxiPNG y ravif.
Resultado real de uso:
Optimicé en lote 54 GB de fotos personales y se redujeron a 8 GB. (85% menos) La calidad es prácticamente indistinguible a simple vista.
# Procesamiento por lotes de directorio (en paralelo)
slimg convert ./photos --format webp --quality 85 --recursive
# Redimensionar + convertir
slimg resize photo.jpg --width 800 --format avif --quality 70
Características técnicas:
- Procesamiento en paralelo en todos los núcleos de CPU con Rayon
- Overwrite seguro con archivo temporal → atomic rename
- Separación entre la biblioteca (
slimg-core) y el CLI (reutilizable) - Rendimiento nativo mediante bindings a códecs en C
Instalación:
brew install clroot/tap/slimg
# https://github.com/clroot/slimg/releases
GitHub: https://github.com/clroot/slimg
7 comentarios
Se agregaron los bindings de Kotlin para slimg. Esto facilita el procesamiento de imágenes en servidores y backends.
Yo también lo hice con un LLM para reducir el tamaño y conservar la calidad mientras eliminaba el fondo de archivos generados en PNG y los convertía a SVG. Lo hice en Rust, y la conversión a SVG funcionó muy bien, pero para reducir el tamaño del SVG no me quedó otra que usar un programa llamado
svgo.svgoes excelente para eliminar código innecesario en SVG, pero me parece que esa parte requiere conocimiento de dominio, así que lo he estado aprovechando.Sin embargo, no se me había ocurrido usar códecs modernos como MozJPEG, OxiPNG o ravif. Yo también quiero probarlo. Gracias por la inspiración.
Yo ya estaba usando SalOne22/rimage, pero habrá que ver qué tal está este. Por ahora, que ofrezca bindings para Python parece ser una ventaja.
También se agregaron los bindings de Python para slimg.
Yo también hice en Rust una herramienta que convierte por lotes imágenes empaquetadas en archivos comprimidos y la estoy usando, así que creo que voy a probar cambiar las llamadas internas a este repositorio.
¿Habrá alguna razón específica por la que la decodificación de AVIF solo sea posible en macOS?
Ahora, si usan la versión 0.1.3, también podrán decodificar avif en Windows y Linux.
Se debe a que la versión de la biblioteca que maneja AVIF en el entorno de GitHub Actions usado para compilar no es compatible. Pronto ajustaremos el entorno de compilación para habilitar el soporte de AVIF también en máquinas Linux.