Skip to content

ProgrammerHasan/img-squeeze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

img-squeeze

Tiny, fast image compression for Node.js using sharp.
✔ Resize by width/height • ✔ Hit a target size (KB) • ✔ Choose output format (JPEG/PNG/WebP/AVIF) • ✔ Strip metadata

Install

npm i img-squeeze
# or for CLI
npm i -g img-squeeze

Library Usage

import { squeeze, squeezeMany } from "img-squeeze";

// Single file -> target 200KB, keep under 1920x1080, auto format
await squeeze("input.jpg", {
  targetKB: 200,
  maxW: 1920,
  maxH: 1080,
  format: "auto",   // or "jpeg" | "png" | "webp" | "avif"
  quality: 85,
  minQuality: 40,
  stripMeta: true,
  outDir: "dist",
  suffix: "min"
});

// Many files (glob)
const results = await squeezeMany("images/**/*.{jpg,jpeg,png}", {
  targetKB: 180,
  maxW: 1600
});
console.log(results);

CLI

img-squeeze "images/**/*.{jpg,png}" --outDir dist --targetKB 200 --maxW 1920
img-squeeze input.png --format webp --quality 80
img-squeeze input.jpg --format avif --targetKB 120 --minQuality 45

Options

maxW, maxH – resize bounds (fit: inside)

targetKB – try to reach this size or below (iterative quality/scale)

quality – start quality for lossy formats (default 85)

minQuality – floor (default 40)

format – auto | jpeg | png | webp | avif

stripMeta – remove EXIF/ICC metadata (default true)

suffix – filename suffix (default min)

outDir – output directory (default: same folder as input)

Notes

Requires Node.js 18+

Input formats: JPG/JPEG/PNG/WebP/AVIF

If targetKB is set, the tool reduces quality first, then scales down a bit if needed.

Quick test (local)

npm install
node -e "import('./index.js').then(async m => console.log(await m.squeeze('sample.jpg', {targetKB:200,

About

Tiny Node.js tool to compress images by quality/size/resize with sharp. Supports JPG, PNG, WebP, AVIF

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published