How to compress a GIF
- Upload the GIF. You see its file size, dimensions, frame count and loop length.
- Pick a preset (Light, Balanced, Small, Tiny) or set the size, number of colors and frames yourself.
- Press Compress and compare the original and the result side by side, then download.
What each setting does
A GIF stores up to 256 colors per frame and compresses each frame with LZW, which works best on long runs of the same value. Reducing the size cuts the pixels to store; reducing the colors shortens the palette and makes runs longer; dropping frames removes whole images. Changed-area encoding is the setting most tools skip: after the first frame, each frame stores only the rectangle that differs from the one before, and pixels inside that rectangle that did not change are written as transparent, which LZW compresses to almost nothing. All frames share one palette built from the whole animation, so colors do not flicker between frames.
What we tested
On October 14, 2026 we made two GIFs with FFmpeg’s palette filters: a 4-second full-motion test pattern and a mostly static “screen recording” with a small moving element. We ran both through every preset in Chromium and decoded each result with Pillow to check the frame count, the loop length and the picture against the original frames (PSNR in decibels; higher is closer, and above about 30 dB differences are hard to see).
| GIF | Setting | Size | Smaller by | Frames | Loop length | Quality vs original |
|---|---|---|---|---|---|---|
| Full motion (testsrc2) | Original | 413.3 KB | 60 | 4.00 s | ||
| Light (100%, 256 colors) | 401.4 KB | 2.9% | 60 | 4.00 s | 63.4 dB | |
| Balanced (100%, 128) | 349.4 KB | 15.5% | 60 | 4.00 s | 46.3 dB | |
| Balanced, changed-area encoding off | 455.8 KB | 10.3% larger | 60 | 4.00 s | 46.4 dB | |
| Small (75%, 64, every 2nd frame) | 95.2 KB | 77.0% | 30 | 4.00 s | 32.6 dB | |
| Tiny (50%, 32, every 2nd frame) | 45.7 KB | 88.9% | 30 | 4.00 s | 30.5 dB | |
| Screen-capture style | Original | 51.7 KB | 60 | 4.00 s | ||
| Light (100%, 256 colors) | 50.8 KB | 1.7% | 60 | 4.00 s | 80.5 dB | |
| Balanced (100%, 128) | 50.8 KB | 1.7% | 60 | 4.00 s | 80.5 dB | |
| Balanced, changed-area encoding off | 88.5 KB | 71.4% larger | 60 | 4.00 s | 80.5 dB | |
| Small (75%, 64, every 2nd frame) | 22.0 KB | 57.4% | 30 | 4.00 s | 40.8 dB | |
| Tiny (50%, 32, every 2nd frame) | 10.5 KB | 79.7% | 30 | 4.00 s | 40.1 dB |
Two things stand out. Size and frame dropping do most of the work, while full-size presets gain little on GIFs that FFmpeg already optimized (its GIF encoder stores only changed areas by default, through its offsetting and transdiff flags). And changed-area encoding is what keeps re-encoding from making a GIF bigger: with it switched off, Balanced came out larger than both originals. A small GIF with transparency, which is re-encoded as full frames, came out 139.5% larger than its original in our test, so check the size before you download; the tool tells you when a result is not smaller.
Every output decoded cleanly and kept its loop length to the millisecond the GIF format allows (delays are stored in hundredths of a second). The page fitted a 390 px phone screen with no errors.
Sources
Checked on .
Frequently Asked Questions
Built by Derek Giordano · Part of Ultimate Design Tools