GIF Compressor
A free GIF compressor online that runs entirely in your browser. Drop a GIF, set the palette, scale and frame rate yourself, and watch the before-and-after byte count against the Discord, Slack and X limits. Nothing is uploaded and there is no sign-up.
Why GIFs are so much bigger than the same clip as video
A GIF is far bigger than the same clip as an MP4 because GIF stores every frame as a separate paletted still image, capped at 256 colours, with no motion compression. H.264, VP9 and AV1 encode most frames as the difference from the frame before, so a mostly-still scene costs almost nothing after the first frame. GIF has no equivalent mechanism. The size sheet breaks down what makes a GIF heavy, factor by factor.
The format's only interframe trick is a transparent-pixel optimisation: an encoder may mark pixels that did not change as transparent so the previous frame shows through. That helps a static screen recording enormously. It does nothing for a pan, a fade, or handheld footage, where nearly every pixel differs and every frame is stored close to whole.
This compressor does not apply that optimisation. It decodes every frame to a full picture and re-encodes each one whole, so a GIF that was already optimised this way can come back larger rather than smaller. The before-and-after byte count shows it either way; if the number goes up, keep your original.
256 colours per frame, and LZW on top
Inside a frame, GIF replaces each pixel's colour with an index into a palette of at most 256 entries, then runs LZW compression over those indices. LZW rewards repetition, so flat areas of one colour compress hard and noisy areas barely compress at all. This is why screen recordings, UI captures and flat illustration shrink dramatically while film grain and gradients resist.
It also explains the shape of the controls above. Fewer palette entries mean fewer distinct index values, which means longer repeated runs for LZW to collapse. That is the compression win, and on most footage it costs nothing a viewer can see.
What each control actually costs
Work down this list in order: colours, then scale, then frame rate. Colours is the only control that usually costs the viewer nothing, so it should always be the first thing you try. Scale and frame rate both change what is on screen, so spend them second and third.
| Control | What it costs | Typical saving | When to reach for it |
|---|---|---|---|
| Colours | Almost none on most footage | 10-20% from 256 to 128; more again at 64, varying with the footage | Reach for this first. It is the only control that shrinks the file without changing the frame or the motion. |
| Scale | Fine detail and small text | Roughly the square of the change: 50% width is a quarter of the pixels | Second. Blunt but predictable — halving the width is the single biggest lever on the page. |
| Frame rate | Motion smoothness; the length stays the same | Close to proportional: every 2nd frame removes about half the frame data | Last. As a rule of thumb it survives down to roughly 15 fps; below that, dropped frames start to read as stutter. |
| Palette mode | Colour accuracy across scene changes | A shared palette is usually smaller; a per-frame palette costs 256 extra colour entries per frame | Leave it shared unless the clip cuts between very different scenes. |
Colours: the cheapest saving on the page
Going from 256 to 128 colours is invisible on almost any real footage and typically returns 10-20%. Sixty-four colours is safe for screen recordings, flat art and UI captures. Below 32, banding appears on skin tones and gradients, which is why the presets in the tool label that trade-off in plain language rather than hiding it behind a quality percentage.
Scale: the blunt instrument
Pixel count falls with the square of the scale, so 50% width is a quarter of the pixels and usually well under a quarter of the bytes. It is the single biggest lever available, and also the most visible one. Drop to 480 pixels wide for chat and social, 320 for an inline documentation GIF, and leave full size alone if the clip contains small text.
Frame rate: the last lever to reach for
Keeping every second frame removes roughly half the frame data. Because the delays of the dropped frames are folded into the survivors, the animation still runs for the same number of seconds at half the frame rate.
As a rule of thumb, the result still reads as motion down to roughly 15 fps and starts to read as stutter below that. Judge it on your own clip rather than the number: dialogue and fast pans show it first, screen recordings barely at all.
Palette mode: shared or per-frame
A shared global palette is built once from a sample spread across the whole animation and reused by every frame, which is smaller and the right default. A per-frame palette gives each frame its own optimal 256 entries, which looks better when the clip cuts between very different scenes but adds a colour table to every frame. If a hard cut looks wrong on the shared setting, that is the one to change.
GIF file size limits by platform
These are the ceilings that decide what "small enough" means. Every figure below is read directly from the same constant the tool uses, so the table cannot drift from the code. The note column is what actually happens at the edge, which is often more useful than the number itself.
| Platform | Where | Limit | What happens at the edge |
|---|---|---|---|
| Discord | Free | 20 MB | Raised from 10 MB on 13 August 2026 (the 10 MB limit dated from a 2024 cut from 25 MB). Mobile uploads are now measured before compression, as on desktop. |
| Discord | Nitro | 500 MB | Nitro Basic is 50 MB; full Nitro is 500 MB. |
| Discord | Custom emoji | 256 KB | 128 × 128 is the recommended size, not a hard cap; Discord compresses an emoji that is a bit bigger. Using animated emoji needs Nitro. |
| Slack | Custom emoji | 128 KB | Slack says square images under 128 KB “work best”, so this is a recommendation, and it publishes no pixel size. GIF emoji can have up to 50 frames. |
| X (Twitter) | Desktop upload | 15 MB | Mobile uploads are capped at 5 MB. One GIF per post, and it cannot share a post with other images. |
| Giphy | Upload | 100 MB | GIPHY recommends 8 MB or less. Uploads are also capped at 15 seconds (6 or less recommended). |
| Newsletter body | 1 MB | A working rule, not a published limit. Outlook for Windows 2007–2019 does not animate GIFs at all. |
Treat the cap as a ceiling rather than a target. A GIF that only just clears Discord's 20 MB free limit still makes every reader download all of it and stalls before the first loop completes. If you need a specific number rather than a specific look, the GIF file size reducer searches for the best settings that fit a byte budget instead of asking you to guess.
Using this as a Discord GIF compressor
Discord is the most common reason people go looking for a GIF size compressor, and it has several separate limits. A free account accepts 20 MB; Discord has changed that number more than once, so older figures still circulate, and the table above carries the current one. Full Nitro raises the cap to 500 MB, and Nitro Basic sits at 50 MB in between.
Custom animated emoji are a different world: 256 KB, and forced to 128 × 128 pixels. For a normal message, 128 colours at full scale often clears the free cap on its own. For an emoji, scale down until the long edge is 128 pixels, then take the palette to 32 or 16 colours — at that size the banding is invisible and 256 KB is genuinely tight.
Slack's custom emoji ceiling is stricter still: 128 KB, also at 128 × 128 pixels. That is the hardest target in the table, and the one case where the 16-colour preset — poster-like on anything larger — is the correct answer rather than a compromise.
When you should not use a GIF at all
For anything longer than about three seconds, use MP4 or WebM. A GIF stores every frame close to whole; a modern video codec stores most frames as the difference from the one before. That is a structural advantage, not a tuning difference, so the video is dramatically smaller at the same quality, keeps full 24-bit colour instead of 256 palette entries, and can carry sound. No amount of palette tuning closes that gap.
The GIF vs WebP vs APNG vs MP4 comparison puts the four formats side by side on colour, transparency, sound and where each one plays.
Every major surface already accepts video. X converts uploaded GIFs to video behind the scenes, Slack and Discord play MP4 inline, and modern email clients that stall on a 2 MB animation will happily show a static poster frame with a link. The GIF is rarely the compatible choice any more; it is mostly a habit.
GIF still wins in three places: chat emoji and stickers, where the format is mandated; documentation and README files on hosts that will not embed video; and any context that has to autoplay silently without a player. Those are real cases, and they are exactly the ones where a hard byte limit applies — which is why this tool exists.
If you are converting a clip in the first place, start at the right size rather than shrinking a bloated file afterwards. The video to GIF converter lets you trim and set the frame rate before the first encode, which almost always beats compressing a GIF that was exported at full resolution.
A workflow that gets under the limit fast
Start by dropping the palette to 128 colours and re-encoding. If the result already fits, stop — you have paid nothing. Most people skip this step and go straight to scale, which is why so many compressed GIFs look softer than they needed to. Any GIF optimizer worth using shows you the byte count before and after, so you can tell which control did the work.
If it still does not fit, crop before you scale. Removing dead space around the subject takes pixels out without touching the pixels that matter, and the GIF cropper does it losslessly on the decoded frames. Scaling comes after that, then frame rate as the last resort.
One more thing worth knowing: everything on this page runs locally. Frames are decoded, composited, resized, quantised and re-encoded in the tab, so nothing is uploaded and the tool works on internal recordings you could not paste into a web service. The rest of the free creator tools library works the same way, including the image compressor for static JPG, PNG and WebP files.
GIF compressor FAQ
How do I compress a GIF without losing quality?
Cut the palette before you cut anything else. Dropping from 256 to 128 colours is invisible on most footage and typically saves 10-20%, because GIF encodes pixels as palette indices and a shorter index alphabet compresses into longer LZW runs. Scale and frame rate both change what the viewer sees; palette size usually does not.
Why is my GIF still large after compressing it?
Because the content resists LZW, the compression inside every GIF frame. Film grain, dithering noise, gradients and camera motion break up the long runs of identical palette indices that LZW collapses, so each frame stays expensive. Screen recordings and flat illustration compress well; handheld footage of a busy scene barely compresses, and the honest fix is a smaller frame or fewer frames.
Does this GIF compressor upload my file?
No. Decoding, resizing, quantising and re-encoding all run in your browser tab in plain JavaScript, so the file never leaves your machine and no copy is stored on a server. The GIF codec downloads the first time you use it; after one file it keeps working without a connection until you close the tab, and it works on files you would not hand to a website.
Does dropping frames make the GIF play faster?
Not here. When a frame is removed, its display delay is added to the frame that survives it, so a 4-second animation still runs for 4 seconds — it just runs at a lower frame rate. Tools that simply delete frames without folding the delays make the animation shorter and faster, which is a different edit.
What is a good file size for a GIF?
Under 1 MB for anything embedded in a page or an email, and under 256 KB for a Discord emoji (128 KB on Slack). Discord accepts 20 MB on a free account and X accepts 15 MB on desktop, but a GIF near either cap still makes every reader download all of it and stalls the first loop. Treat the platform cap as the ceiling, not the target.
How small can a GIF actually get?
It depends almost entirely on how busy the frame is. A screen recording with large flat areas can shrink dramatically at 64 colours with no visible change, while a handheld clip of a busy street gives up far less before the banding shows. Run one pass, look at the before-and-after byte count, and move one control at a time.
Should I use a GIF or an MP4?
MP4 or WebM for anything longer than about three seconds. A modern video codec encodes most frames as the difference from the frame before, so it stores a fraction of what a GIF does for the same clip, with full colour and sound. Every major platform accepts video, and several of them silently convert your GIF to video anyway.
Need the clip before you need the GIF?
Generate the source footage in Playcut's AI video studio, export it, then bring it back here to shrink.
Open the Playcut studio