Your images
Drop images here
PNG, JPEG or WebP · Nothing is uploaded
Preparing images…
Starting locally
Private local image compressor
PNG, JPEG or WebP · Nothing is uploaded
Starting locally
Decode, optimise and re-encode animated GIFs on this device. Nothing below works yet. It is here so the design can be argued with before it is written.
The thing ezgif cannot do. Name a ceiling — 2 MB for a forum, 512 KB for an email — and let the optimiser search for it, walking the levers from least to most destructive:
It reports the SSIM of what it settled on, so the cost is visible rather than guessed. If the target is unreachable without gutting the image, it says so instead of quietly mangling it.
gifsicle compiled to WebAssembly — the same encoder the site you screenshotted runs server-side, at 358 KB, including the lossy LZW mode that is the single biggest lever on GIF size.
Palette selection goes through the SSIM-guided search already used by Smart PNG mode, rather than a fixed colour count.
Cost: WebAssembly needs 'wasm-unsafe-eval' in the script policy. It will be loaded only when this tool is opened, never precached.
Turn a clip into an animated GIF without it leaving the machine. Nothing below works yet.
WebCodecs VideoDecoder with mp4box.js for demuxing, falling back to frame-stepping a video element for anything it cannot open.
This decodes on the GPU. The alternative, ffmpeg compiled to WebAssembly, ships a 32 MB binary that exceeds the 25 MiB per-file limit on Cloudflare Pages, so it could not be self-hosted even if it were faster — and it is not.
MP4, MOV and WebM through WebCodecs where the browser exposes the codec. Anything else falls back to the video element, which is slower but accepts whatever the browser can play.
Safari gained WebCodecs in 16.4 and Firefox in 130. Older browsers get the fallback path, not an error.