Presentamos libSquoosh

Es Squoosh, pero como biblioteca de Node.

Nos complace presentar libSquoosh, una biblioteca de nodos experimental sobre la cual se compila la CLI de Squoosh, que te brinda todas las capacidades de la CLI de Squoosh con una interfaz idiomática para JavaScript.

Squoosh.app es una AWP que comprime imágenes por ti en el navegador. Es compatible con muchos formatos de imagen nuevos y antiguos, y los procesa del lado del cliente en el navegador a través de WebAssembly. Esto significa que tus fotos permanecen seguras en tu computadora y no se envían a un servidor, y que Squoosh funciona incluso sin conexión.

En la Chrome DevSummit 2020, anunciamos Squoosh v2, junto con la CLI de Squoosh para llevar todos los códecs de Squoosh a la línea de comandos usando Node y WebAssembly. Esto te permite comprimir carpetas enteras con un comando y utilizar la CLI para que pueda elegir los parámetros de códecs por ti.

La CLI habilita mucha automatización y, por lo tanto, es natural que los desarrolladores comiencen a solicitar una interfaz más idiomática que invocar de manera programática la CLI de Squoosh a través del shell. Anton (@atjn en GitHub) se encargó de la tarea y separó el código de la CLI de Squoosh en dos partes: el código de la interfaz de línea de comandos y la funcionalidad principal subyacente.

import { ImagePool } from "@squoosh/lib";

// libSquoosh uses a worker-pool under the hood
// to parallelize all image processing.
const imagePool = new ImagePool();

// Accepts both file paths and Buffers/TypedArrays.
const image = imagePool.ingestImage("./squoosh.jpeg");

// Optional.
// await image.preprocess({
//   resize: {
//     enabled: true,
//     width: 128,
//   },
// });

await image.encode({
  // All codecs are initialized with default values
  // that can be individually overwritten.
  mozjpeg: {
    quality: 10,
  },
  avif: {
    cqLevel: 10,
  },
  jxl: {},
});

const { extension, binary } = await image.encodedWith.mozjpeg;
await fs.writeFile(`output.${extension}`, binary);
// ... same for other encoders ...

await imagePool.close();

Nuestro objetivo es que la compresión de imágenes sea más accesible para los autores de herramientas. Esperamos ver la integración en Webpack, Rollup y otras herramientas de compilación para garantizar que tus imágenes estén optimizadas correctamente para la Web.

me gustaría expresar un gran “gracias” a Anton por el tiempo que se comprometió a Squoosh.

Todavía es pronto para la CLI de Squoosh y libSquoosh, y tenemos muchas más ideas y planes que nos gustaría implementar. Mientras tanto, prueba libSquoosh. Sin embargo, ten en cuenta que esta es una versión preliminar y experimental, y que existe la posibilidad de que te encuentres con algunos errores. Si encuentras algunos o tienes preguntas, abre un problema.

Si te interesa contribuir con Squoosh, por ejemplo, contribuir a la escasa documentación sobre libSquoosh o ayudar con cualquiera de las otras partes de la app, iniciaremos un programa de mentoría para ayudarte a comenzar. Si quieres obtener más información, consulta nuestro error de seguimiento.