GIF Compressor — Reduce GIF File Size Online

Reduce GIF size up to 70% — runs in your browser via WebAssembly.

Lossy LZW, color reduction, frame skipping, transparency optimization. No upload, no registration, no watermark. Files never leave your device.

GIF Compressor

Reduce GIF file size with lossy compression, color reduction, resize, and frame skip. Browser-only, no upload.

Drag & drop your PDF here

or browse files

Single file · PDF supported

GIF processing runs entirely in your browser via WebAssembly. Files never leave your device.

Why GIFs get so large

GIF files have two built-in size constraints: they are limited to 256 colors per frame, and they use LZW compression which is lossless but not efficient for photographic content. A 30-frame, 640x480 GIF at 10fps can easily reach 10-20MB. Twitter's GIF limit is 15MB; Slack's is 10MB; WhatsApp's is 16MB. Many GIFs fail to upload simply because they were exported at full quality without any post-processing.

Lossy compression explained

Standard GIF encoding is lossless. Lossy GIF compression (via gifsicle's --lossy flag) introduces controlled dithering artifacts that improve LZW compressibility. A lossy value of 80 typically reduces file size by 30-40% with barely visible quality loss. A value of 160 can cut size by 60% at the cost of noticeable color banding. Start at 80 and increase until the output looks acceptable.

Color palette reduction

GIFs support 2 to 256 colors per frame. Many GIFs use far fewer than 256 distinct colors, so reducing the palette from 256 to 128 or 64 often produces no visible change but saves 10-20% on file size. For simple graphics like logos or text animations, 32 or 16 colors may be sufficient.

Frame skip and resize

Dropping every other frame halves the animation's data at the cost of smoother motion. This works well for GIFs where each frame is similar to the next (slow motion, panning shots). Resize to 75% reduces pixel count by ~44%, which alone can cut file size in half. Combine resize with lossy compression for the biggest reduction.

Platform limits for reference

Twitter accepts GIFs up to 15MB (converted to video internally). Slack shows animated GIFs up to 10MB. WhatsApp limits GIF-as-video to 16MB. Discord limits file uploads to 8MB on free accounts. Optimize to the smallest target platform in your use case.

How this tool works

This tool uses gifsicle-wasm-browser, a WebAssembly port of gifsicle 1.92, the standard command-line GIF optimizer. Gifsicle was originally written by Eddie Kohler and is maintained as open-source software. The WASM build runs entirely in your browser — no network calls, no server processing.

Privacy

Your GIF files never leave your device. The WebAssembly module downloads once to your browser cache and runs locally for every subsequent compression.

GIF compression is not one algorithm — it's four independent strategies you can stack. Each one trades a different axis of quality for size. The right combination depends on what the GIF is for (chat reaction, tutorial screen recording, web embed) and how much visual fidelity you can spare. The four H2 sections below walk through each strategy, when to use it, and how much it typically saves.

Lossy LZW Compression

GIF uses LZW (Lempel-Ziv-Welch) compression by default — it's lossless. Lossy LZW is a modification that introduces a small amount of noise before LZW kicks in, so the LZW dictionary finds more repeating patterns and shrinks the file further. Typical savings: 30-50% over standard LZW with no visible artifacts up to a lossy level around 30-50.

Push the lossy level higher (80+) and you start to see banding in smooth gradients, especially in screen recordings of dark UIs. For chat GIFs and reactions where the source already has hard edges and bold colors, lossy LZW is the first dial to turn. For high-fidelity screen recordings, keep it moderate.

Frame Drop (Remove Every Nth Frame)

GIFs encode every frame independently inside the file. Drop every second frame and the file roughly halves; drop every third frame and you cut a third of the bytes. The trade-off is animation smoothness — at 24fps you can skip every other frame and the playback still feels fluid. At 12fps source rate, skipping frames makes the motion choppy.

Frame drop is the highest-impact knob for long screen recordings. A 30-second tutorial GIF often shrinks 60-70% with frame skip alone and is still perfectly watchable. For short reaction GIFs that loop, leave the frames alone — the loop sells the motion.

Color Palette Reduction

GIF uses an indexed color palette of up to 256 colors per frame. Dropping the palette to 128 colors typically saves 15-25% of the file with no visible change for most content. Dropping to 64 colors saves 30-45% and starts to show banding in gradients. Dropping to 32 colors is aggressive and only suitable for cartoons, line drawings, or pixel art.

Pair palette reduction with dithering to mask the banding — dithered 64-color GIFs often look as good as 256-color GIFs at half the size. Logos, comics, and flat-color content tolerate aggressive palette reduction well. Photographs, dark UI captures, and anything with smooth gradients need a richer palette.

Transparency Optimization

Animated GIFs can store only the pixels that changed between frames, leaving the rest transparent. This is called frame disposal or transparent optimization. Most GIF encoders skip this optimization by default because it requires comparing every frame against the previous one — turning it on cuts 20-40% off the file for screen recordings where most of the frame stays static.

Transparency optimization is a free win for screen recordings, terminal captures, and any GIF where the background doesn't change. It does nothing for content where the whole frame shifts every step — a video clip or a panning camera shot gets zero savings from this knob. For static-background screen captures, this is often the second-most-impactful setting after frame drop.

GIF for WhatsApp Under 16MB

WhatsApp caps inline media at 16MB and silently re-encodes anything you send as a video, which kills the GIF loop. The fix: compress to under 16MB before sending and use the "send as document" option to bypass re-encoding. A 60-second screen recording usually fits inside 16MB with lossy LZW at 50 plus frame drop every other frame.

Working with static images instead? Use Image compressor for JPG, PNG, and WebP. Need a different animation format? AVIF converter.