Drop images here
or click to choose, or paste a screenshot
How it hits the number
Encoders cannot be asked for an exact file size, so this finds the best-looking version that fits under 80,000 bytes, then pads the file to the number with a chunk that decoders ignore. The image is unchanged.
Fitting the budget is a trade between resolution and quality. Squeezing a large photo into 80 KB by dropping quality alone looks bad, so each candidate size is scored against the original and the one that survives best wins — which usually means a smaller, cleaner image.
In a build, or from a terminal
The same engine runs as a command and as an endpoint, for the images you never open a browser for.
npx exact80 ./images --format webp
curl -X POST https://exact80.vercel.app/api/compress \
-F image=@photo.jpg -o photo.avifThere is a GitHub Action too, which compresses the images in a pull request and comments with what it saved. The README has the details.