← SkillSafe / Pic Lite free · nothing uploaded

Compress images and GIFs without uploading them anywhere

Drop in JPEG, PNG, WebP or animated GIF. Everything — decoding, resizing, quantising, re-encoding — happens inside this tab. There is no server to send your pictures to, no account to make, and nothing to pay. Close the tab and every trace is gone.

Drop images here

or , or paste from the clipboard

Up to 60 files at a time, 25 MB each. Nothing to hand? , , , or .

Settings

GIF stays GIF; converting an animation to a still format exports the first frame and says so.

JPEG and WebP only. Every attempt re-encodes from the original decode, so nudging this never stacks damage.

PNG has no quality dial — its size lever is the palette. Transparency survives quantisation.

Applied per frame, so a palette is spent on the colours each frame actually uses.

Appended before the extension. Leave blank to keep the original name.

Watermark

Nothing queued yet.

What this actually does

A browser canvas will happily re-encode a JPEG or a WebP at a quality you pick, and that covers most of the job. It falls down in two places, and this app fills both in by hand.

Nothing is compiled in. There is no WebAssembly codec, no mozjpeg, no oxipng — this platform only admits binaries from a vetted allowlist and no image codec is on it. Everything above is plain JavaScript over typed arrays, and you can read all of it: compress.js, quantize.js, pngenc.js, gifcodec.js, metastrip.js, watermark.js, encoder.js, worker.js, pipeline.js, zipenc.js, download.js, report.js, history.js, examples.js, app.js.

Where it will not beat a dedicated tool

The JPEG and WebP encoders are the browser's, not mozjpeg's, so a already-well-optimised JPEG may not shrink much further — when that happens the app tells you it kept your original rather than handing back something bigger. Progressive JPEG output is not offered because the canvas does not expose it. Lossless PNG re-crushing (the thing oxipng does) is only partly reproduced: the encoder picks filters adaptively and packs indices tightly, but it does not brute-force filter strategies.