How to make a GIF small enough to send
A five-second screen recording turns into a 20 MB GIF and then bounces off every upload limit it meets. Chat apps cap attachments on free plans, forums often allow only a few megabytes, and email attachments over 25 MB are refused by the most common providers. Avatars, emoji slots and signature images are stricter still.
The good news is that almost every oversized GIF carries far more data than anyone can see. This guide explains where the weight comes from, how to cut it in a predictable way, and when the right move is not to send a GIF at all.
Why GIFs are enormous
The format dates from 1987 and was designed for small graphics, not video. Each frame is stored as a separate picture with lossless LZW compression, which works on flat areas of colour and fails on anything noisy. There is no motion compensation: a video codec stores a talking head on a static background almost for free after the first frame, while a GIF pays for the whole frame again and again.
Each frame is also limited to 256 colours. When a GIF is made from camera footage, the encoder sprinkles dithering dots across every frame to fake the missing shades, and those dots are exactly what LZW compresses worst.
That leaves three levers, and they multiply:
- Frame rate. Going from 30 to 12 fps removes 60% of the frames. Most chat GIFs look fine at 10 to 15 fps.
- Dimensions. Size follows pixel count, not width. Scaling to 75% keeps 56% of the pixels; scaling to 50% keeps a quarter.
- Palette. A palette of 64 or 128 colours chosen for this particular animation compresses much better than 256.
Duration is the fourth lever, and the cheapest: cutting the boring second at the end of a loop costs nothing visually.
Shrink an existing GIF
Compress GIF rebuilds the animation with FFmpeg running in your browser. The first pass analyses the whole animation and builds one optimised palette; the second redraws every frame against it with ordered dithering, which leaves a regular pattern that compresses far better than random noise.
- Pick a level. Medium is selected by default.
- Drop one or more GIFs. Each row shows the size before and after.
- If the result is still too big, remove it, switch to the next level and drop the original again.
What the levels do, in numbers:
- Light: 15 fps, original dimensions, up to 256 colours. For UI demos where every pixel of text must stay readable.
- Medium: 12 fps, 75% of the width and height, up to 128 colours. The right first try for reaction GIFs and recordings shared in chat.
- Heavy: 10 fps, half the width and height, up to 64 colours. Built for hard limits; frame count and pixel count together drop to a small fraction of the original.
Timing is preserved at every level. A three-second loop still lasts three seconds; it is simply drawn with fewer frames. Files up to 100 MB are accepted, and nothing leaves your device.
Which level for which content
- Screen recordings and UI walkthroughs survive colour reduction well but suffer from downscaling, because small text turns to mush. Start with Light; if that is not enough, record a smaller area next time rather than going to Heavy.
- Stickers, logos and flat illustrations with a handful of colours look almost the same at 64 colours, so Heavy usually works.
- Clips from camera footage with skin tones, skies and gradients band visibly at 64 colours. Medium is the safer ceiling.
- Pixel art should never be scaled. Use Light.
Start from the video if you still have it
If the GIF was made from a video and you still have the source, rebuilding it is often better than squeezing the finished GIF, because you control the settings from the start.
- Cut the clip to the moment that matters with Trim video. Three seconds of a loop is usually enough.
- Open Video to GIF and choose a width and frame rate. For chat, 320 or 480 px at 10 fps is a solid default; use 640 px only for screen recordings with text.
- Convert. If the result is still slightly over the limit, run it through Compress GIF at Medium.
Video to GIF always counts its maximum duration from 0:00, which is why trimming first matters: otherwise you get the first seconds of the video, not the part you wanted.
The better answer, when the destination allows it
If the place you are posting to accepts video, send an MP4. The same five seconds that cost 20 MB as a GIF often cost a few hundred kilobytes as H.264, in full colour and at full frame rate. Most modern chat apps play short muted clips inline and on loop, so the recipient sees practically the same thing. Some messengers even convert uploaded GIFs to video behind the scenes for exactly this reason.
Compress video produces an H.264 MP4; Medium is a good preset for chat. For a muted loop, the soundtrack is not worth keeping anyway.
GIF remains the only choice where video is not allowed or does not autoplay: email bodies and signatures, README files on some hosts, old forum software, custom emoji and avatar slots, and documentation tools that strip video. Use GIF there, and video everywhere else.
Typical situations
- A chat app rejects the file as too large. Try Medium first. If the GIF came from a screen recording longer than ten seconds, shorten it from the source instead of going to Heavy.
- A forum caps attachments at a few megabytes. Heavy, and if that is still too big, rebuild at 320 px and 8 to 10 fps from the source clip.
- An email signature or newsletter. Keep the animation under a few hundred kilobytes: small dimensions, few frames, Heavy. Large animated images make emails slow to open and some clients only show the first frame.
- A reaction GIF for a group chat. 320 px wide is plenty on a phone screen. Nobody notices 10 fps in a two-second reaction.
Troubleshooting
- The file barely shrank. The source was already optimised: small, low frame rate, or few colours. Move up one level. If the original runs at 10 fps or less, Light may even add frames, so skip straight to Medium or Heavy.
- Bands appear in gradients. That is the 128- or 64-colour palette. Step back to a lighter level or crop away the sky or soft background.
- A fine grid texture shows up. This is the ordered dither pattern, most visible on smooth gradients at Heavy.
- One scene has odd colours. The whole animation shares one palette, so a short scene in unusual colours gets few palette slots. Cutting that scene out helps more than any setting.
- The page seems stuck. The FFmpeg engine downloads once on first use and then runs locally. A large GIF can take up to a minute on a laptop and longer on a phone.
Checklist
- Can the destination take an MP4? If yes, send a compressed MP4 instead.
- Cut the duration to the part that matters before anything else.
- For chat, aim for 320 to 480 px at 10 to 12 fps.
- Compress at Medium; go to Heavy only for hard limits.
- Check the result at its real display size before sending.
Published 2026-10-08