On-device AI — professional-grade, fully private.

Compress GIF

Shrink animated GIFs to a size you choose — timing and transparency intact.

  • No upload
  • Target a file size
  • Keeps frame timing
  • 2–256 colours

Drop a GIF here

GIF, animated WebP or APNG

Compression mode
Compression mode
Target size
2 MB

The tool searches for the gentlest settings that reach this.

Output
Colours
128
Dithering
Scale
100%
Keep 1 frame in
1

Removed frames give their time to the frame that stays, so the animation still plays for the same length.

Advanced
0

Lets near-identical pixels count as unchanged.

Store only what changed between frames.

Turns delta frames off — the two need the same palette slot.

How to compress a GIF

Reduce an animated GIF to a smaller file, either by naming the size you need or by setting the palette, scale and frame rate yourself.

  1. 1

    Add your GIF

    Drag an animated GIF onto the drop area, or click to browse. Animated WebP and APNG files work too. The file is read on your device and never uploaded.

  2. 2

    Choose target size or manual control

    In target mode, type the size you need — 5 MB, 2 MB, whatever the destination allows — and the tool searches for the gentlest settings that reach it. In manual mode you set the palette, scale, frame drop and dithering directly.

  3. 3

    Check the preview and the numbers

    The result panel shows the compressed animation, the size before and after, and how much was saved. If a setting is too aggressive you will see it in the preview rather than after downloading.

  4. 4

    Download the compressed GIF

    Press Download. The file keeps its per-frame timing, its loop count and its transparency, so it plays exactly like the original, only smaller.

Why compress a GIF

A GIF is the only widely supported animation format that predates every modern compression technique, and it shows. The format stores at most 256 colours per frame, has no motion compensation, and in the hands of a careless encoder writes every frame as a complete picture. A fifteen-second screen recording that would be a 400 kB MP4 routinely lands as a 12 MB GIF — too large for an email attachment, too large for most chat clients, and slow enough on a phone connection that it finishes loading after the reader has scrolled past it.

Set a target file size and the compressor solves for it, or take the palette, scale and frame controls yourself.

Reads GIF, animated WebP and APNG. Writes a standard GIF89a with per-frame delays, loop count and transparency preserved.

What compression actually buys you

  • Attachability. Most mail servers reject attachments over 10 MB and many chat clients refuse anything over 8. A compressor is often the difference between sending the file and not.
  • Page speed. An animated GIF blocks nothing but it does compete for bandwidth with everything else on the page, and it keeps decoding for as long as it loops.
  • Mobile data. A reader on a metered connection pays for every byte of an unoptimised animation, and pays again on each visit if it is not cached.
  • Storage that adds up. A documentation site with sixty screen recordings is carrying half a gigabyte of animation that could be eighty megabytes.

How GIF compression actually works

There is no quality slider in the GIF format. Unlike JPEG, where a single number trades detail for size, a GIF is compressed by changing what is in it — how many colours, how many pixels, how many frames, and how much of each frame has to be stored at all. Understanding those four levers is what turns compression from guesswork into a decision, because they cost the viewer very different amounts.

The four levers, in the order they should be pulled

  • Dimensions. Halving the width and the height removes about three quarters of the pixel data and changes nothing about the motion. On an animation that will be displayed small anyway, this is very close to free, which is why it is tried first.
  • Palette. Going from 256 colours to 128 is invisible on most footage once dithering is applied. Below about 32 entries, smooth gradients start to show as bands.
  • Delta frames. Storing only the rectangle that changed, and marking unchanged pixels transparent, costs nothing visually and is frequently worth several times the file size on its own.
  • Frame rate. Dropping every second frame halves the frame data, and it is the only lever on this list a viewer notices immediately, as stutter. It goes last.

Delta frames: the lever most tools leave switched off

The GIF specification has allowed a frame to cover only part of the canvas since 1989, and to mark pixels transparent to mean "what is already on screen here is still correct". A talking-head clip or a UI recording changes a small fraction of its pixels per frame, and a long run of one repeated transparent index compresses almost to nothing. Measured on this tool's own test animation — a static gradient background with one moving square — storing every frame whole produced 116,532 bytes, and delta encoding produced 21,304. That is a 5.5x difference from a change with no visual cost whatsoever, and it is the single largest reason a hand-rolled GIF is several times bigger than it needs to be.

Measured results

  • Delta frames vs whole frames 116,532 B to 21,304 B on a 20-frame animation — 5.5x, with pixel-identical output.
  • 256 to 8 colours 381,670 B to 90,113 B on a 12-frame photographic clip — 4.2x, and the point at which banding becomes obvious.
  • Drop every second frame 21,304 B to 14,282 B, with total playback duration unchanged at 2,000 ms.
  • Encoding speed 100 frames at 480x270 encoded in 209 ms on the hardware-accelerated path.

Targeting a file size instead of guessing

Every other GIF compressor gives you a compression slider and leaves you to discover what number reaches the size you need. That is the wrong way round: you almost never want "75% compression", you want a file under 8 MB because that is what the chat client accepts. Target mode inverts it. You name the size, and the tool searches a ladder of settings ordered by what each one costs the viewer — dimensions first, palette second, frames last — and returns the gentlest combination that fits. The search is a bisection, so it costs at most eight encodes rather than the twenty-six a linear scan would, and if a size genuinely cannot be reached it says so and hands back the smallest it managed rather than quietly missing the one instruction it was given.

Choosing settings by hand

  • Screen recordings and UI demos. Flat colours and sharp edges. Try 64 colours with no dithering — dithering adds noise that hurts text legibility and costs bytes on exactly the material that compresses best without it.
  • Photographic or video-derived footage. Smooth gradients need dithering to avoid banding. 128 colours with ordered dithering is a good starting point; error diffusion looks slightly better and is slower because it cannot be parallelised.
  • Line art, logos and pixel art. Often survives 16 or even 8 colours with dithering off. Turn dithering off deliberately here — it will visibly speckle flat areas.
  • Anything with a transparent background. Leave delta optimisation alone and expect a larger file. The two features compete for the same palette index, and correctness wins.

Where a compressed GIF is the right answer

  • Email signatures and newsletters. Most email clients still refuse to play video, so an animation has to be a GIF. Keep it under a megabyte.
  • Documentation and READMEs. A GIF plays inline on GitHub and in most static site generators with no player, no autoplay policy and no codec question.
  • Chat and messaging. Size caps are strict and vary by client, which is exactly the case target mode exists for.
  • Offline and archival copies. A GIF needs no codec support and no network, so it still plays in twenty years.

What goes in, and what comes out

The input list is closed and it is enforced at the file dialog rather than at the engine, so a file this tool cannot open is refused in milliseconds with a route to the tool that can, instead of being accepted and failing later behind a spinner.

  • GIF in. Animated or single-frame, interlaced or not, with a global palette or a different local palette on every frame. Sub-rectangle frames at an offset are composited onto the full canvas before anything else happens.
  • Animated WebP and APNG in. Both are read by our own demuxers on every browser rather than by a native decoder, so frames and timing are identical everywhere — including in browsers that have no animated-image decoder at all.
  • GIF out, always. A standard GIF89a with a global colour table, per-frame delays, disposal methods and a Netscape loop extension.
  • Anything else is refused with a route. A video is sent to Video to GIF, a still image to the GIF Maker. "We can't open this here, use that instead" is actionable; "unsupported file" reads as though your file is broken.

Size and frame limits

  • Free. One file up to 50 MB and up to 300 frames, output up to 1024 px on the long edge and up to 128 colours. That is a genuinely useful compressor, not a demo — it matches the file cap of the most-used competitor for this job.
  • Pro. No imposed file cap and the full 256-colour palette at full resolution. The ceiling is your device's memory, because nothing is uploaded — there is no server allowance to run out of.
  • The one limit both plans share. Every frame is expanded to full colour while it is being worked on, so a memory budget bounds the job before it starts rather than letting the tab stop responding while the progress ring keeps turning.

What happens on your device

Nothing is uploaded. When you add a file, it is decoded frame by frame on your machine, the palette is built from a sample spread across the whole animation rather than from the first frame, every pixel is mapped to that palette, unchanged regions are marked transparent, and the result is compressed and written out as a standard GIF89a. All of it runs in a background thread so the page stays responsive, and the heaviest single operation — remapping every pixel of every frame to the nearest palette entry — runs on your graphics hardware where it is available, falling back to your processor where it is not.

Why the same file compresses identically every time

  • A deterministic quantiser. Most GIF libraries use NeuQuant, a randomised neural quantiser whose output shifts between runs. This tool uses median cut, which is exact and reproducible, so the same input and settings always produce byte-identical output.
  • Identical results on every path. The graphics-accelerated and processor paths are required to produce the same bytes, not merely similar ones. A path that picked a different palette entry would show as colour flicker between frames, which is far more visible in an animation than one wrong pixel is in a still.
  • Timing read from the file, not assumed. GIF delays are per-frame and routinely irregular. They are read individually and carried through, rather than averaged into one frame rate.

Encoding is hardware accelerated where your device supports it, and the accelerated and fallback paths are verified to produce byte-identical output. Measured on the reference machine: 100 frames at 480x270 in 209 ms. It all runs on your device, not our servers.

Frequently asked questions

How much smaller can a GIF get without looking worse?

For most screen recordings and reaction clips, 50 to 80 percent is achievable before anything is obvious, and almost all of that comes from two changes: reducing the dimensions and cutting the palette from 256 colours to 64 or 128. Photographic footage with smooth gradients is the hard case, because a small palette shows as banding. Line art, UI recordings and flat-coloured animation compress far harder — those often survive a 32-colour palette with no visible loss at all.

Does dropping frames make my GIF play faster?

Not here. When a frame is removed its display time is added to the frame that stays, so the animation still runs for exactly as long as it did before. This is worth checking on any tool you use: it is a common bug, the output is still a valid GIF, and the only symptom is that the animation runs at double speed — which is easy to miss on a short clip and impossible to miss on a long one.

What is the difference between reducing colours and lossy compression?

Reducing colours changes the palette: every pixel is remapped to the nearest of a smaller set, so the file has less information to store. Lossy compression instead allows pixels that are nearly identical to the previous frame to be treated as unchanged, so they cost almost nothing. The two are independent, and combining a moderate amount of each usually beats pushing either one to its limit.

Should I convert to MP4 instead of compressing the GIF?

If whatever you are posting to accepts video, yes, and it is not close. GIF is limited to 256 colours per frame and has no modern inter-frame compression, so an MP4 or WebM of the same clip is routinely ten to twenty times smaller and looks better. Compress the GIF when the destination genuinely requires the format — email signatures, some chat clients, documentation that must work offline.

Will compressing break my GIF's transparency?

No. GIF transparency is a per-frame palette index rather than an alpha channel, and it is carried through the whole pipeline. One thing does change automatically: when a transparent background is requested, delta-frame optimisation is switched off, because both features want to use the transparent index and they mean different things by it. The result is correct and slightly larger, and the tool says so rather than silently producing a smear.

Why did my GIF get bigger instead of smaller?

Almost always because it was already optimised, and re-encoding it built a fresh palette and fresh frame data without finding anything left to remove. The tool reports the before and after size on every run, so this is visible immediately rather than after you have replaced the original. If the output is larger, keep the input.

Is there a limit on how large a GIF I can compress?

On the free plan, one file up to 50 MB and up to 300 frames. Pro removes the file cap and works up to what your device's memory can handle — nothing is uploaded, so the ceiling is your machine rather than a server allowance. Very long animations at large dimensions are noticeably faster on a desktop browser than on a phone.

Does the compressed file play the same everywhere?

Yes. The output is a standard GIF89a with a global colour table, per-frame delays and a Netscape loop extension, which is what every browser, chat client and image viewer expects. Frame timing and loop count are copied from the source unless you change them yourself.