Guides · Formats & timing
GIF frame delay and frame rate: how GIF timing really works
GIFs store time in hundredths of a second, browsers slow down delays under 20 ms, and loop count lives in a 1990s Netscape extension. What that means for your GIF's speed.
By Li Jiang · Published · Updated · 5 min read
Tested: Delay rounding checked against the source of gifenc, the encoder EasyGIF uses; file sizes from EasyGIF's encoder, measured 2026-10-29
A video has a frame rate. A GIF doesn't: each frame carries its own delay, the time to wait before showing the next one. Most of the confusion about GIF speed (why a 30 fps clip plays at a different speed, why a "faster" GIF can play slower, why some GIFs loop once and stop) comes from three details of how that delay and the looping are stored.
Detail 1: delays are stored in hundredths of a second
The GIF89a specification defines the delay in each frame's Graphic Control Extension as a whole number of hundredths (1/100) of a second. A delay can be 50 ms or 60 ms, but not 55 ms, and not 33.3 ms. Any encoder has to round, and that rounding decides the real frame rate:
| Frame rate you want | Ideal delay | Stored (1/100 s) | Frame rate you get |
|---|---|---|---|
| 5 fps | 200 ms | 20 (200 ms) | 5 fps |
| 10 fps | 100 ms | 10 (100 ms) | 10 fps |
| 12 fps | 83.3 ms | 8 (80 ms) | 12.5 fps |
| 15 fps | 66.7 ms | 7 (70 ms) | 14.3 fps |
| 20 fps | 50 ms | 5 (50 ms) | 20 fps |
| 24 fps | 41.7 ms | 4 (40 ms) | 25 fps |
| 25 fps | 40 ms | 4 (40 ms) | 25 fps |
| 30 fps | 33.3 ms | 3 (30 ms) | 33.3 fps |
| 50 fps | 20 ms | 2 (20 ms) | 50 fps |
| 60 fps | 16.7 ms | 2 (20 ms) | 50 fps |
Frame rates that divide 100 evenly (5, 10, 20, 25, 50) play exactly. Everything else drifts. A 15 fps clip is stored at 70 ms per frame and plays at about 14.3 fps, so a 6-second clip takes about 6.3 seconds. A 24 or 30 fps source plays slightly faster, at 25 or 33.3 fps. For short loops this rarely matters, but it explains why a GIF made from a video can drift out of sync with the original.
EasyGIF's video options are 5, 10, 15, 20, and 25 frames per second, and all but 15 map onto exact delays. If you need a GIF to stay in step with a video, pick 10, 20, or 25.
Detail 2: browsers slow down very short delays
Because the delay is in hundredths of a second, the shortest delays possible are 0 and 10 ms. Long ago, many GIFs used 0 to mean "as fast as possible", which made them play at wildly different speeds on different computers. To keep those GIFs watchable, Chrome, Firefox, and Safari treat a stored delay of 0 or 10 ms as 100 ms.
So a GIF set to 10 ms per frame, which you'd expect to be the fastest possible, plays at 10 frames per second instead of 100. The shortest delay that plays as set is 20 ms (50 fps), which is why EasyGIF's frame delay slider starts there. Anything you want to look faster than 50 fps can't be done by shortening the delay; drop frames instead.
Detail 3: looping comes from a Netscape extension
The original GIF89a specification doesn't say anything about looping. Loop counts come from the NETSCAPE2.0 application extension, which Netscape Navigator introduced in the 1990s and every browser still honors. It stores how many times to repeat after the first play, with 0 meaning forever.
That leads to two quirks:
- A GIF with no Netscape extension plays once and stops on the last frame. That's how "play once" GIFs are made, and why GIFs from some old tools don't loop.
- The stored number counts repeats, not plays. A GIF that should play twice stores 1.
EasyGIF's Loop setting (Forever, Once, 2×, 3×) is the number of times the animation plays in total; the encoder writes the matching extension for you. Some apps, especially chat apps, ignore the loop count and loop everything forever anyway.
Per-frame delays
Each frame has its own delay, so a GIF can pause on one frame and rush through others: a long hold on the punchline, the last step of a tutorial, or the "after" in a before-and-after. When you open an existing GIF in EasyGIF, every frame keeps its original delay; you can see it under each frame on the timeline. To give one frame more time in a GIF you're building, duplicate it on the timeline: each copy adds one more delay.
If you turn off Keep the original timing under Motion, every frame gets the same delay from the Frame delay slider. That's the quickest way to speed up or slow down a whole GIF.
Delay doesn't change file size
The delay is a two-byte number in each frame's header, so changing it doesn't change the size of the GIF. We encoded the same 24-frame clip at 20 ms, 100 ms, and 1,000 ms per frame and got 2,107 KB, 2,107 KB, 2,107 KB: identical. To make a GIF both faster and lighter, remove frames rather than shortening delays. The file size guide covers what else works.
Choosing a speed
| Use | Delay per frame |
|---|---|
| Smooth motion from video | 40–100 ms (10–25 fps) |
| Stop-motion, drawings, pixel art | 100–250 ms |
| Slideshows, product photo sets | 500 ms–1 s |
| Steps people need to read | 1.5–2 s, or duplicate the frame |
The ranges suggested on the GIF creator:
| Delay | Frame rate | Good for |
|---|---|---|
| 20–40 ms | 25–50 fps | Smooth motion from a high-frame-rate video |
| 60–100 ms | 10–16 fps | Most video clips, screen recordings, and reactions |
| 150–300 ms | 3–7 fps | Stop-motion and simple frame-by-frame drawings |
| 500 ms–1 s | 1–2 fps | Slideshows and product photo sets |
| 1.5–2 s | < 1 fps | Tutorials and before/after frames that need reading time |
Boomerang and reverse
Playing a clip forward and then backward is done with frames, not timing: the frames are written twice, the second time in reverse order. EasyGIF leaves out the first and last frame on the way back so the turnarounds don't stutter. Because it adds almost as many frames again, a boomerang GIF is nearly twice the size of the forward-only version.
Try it on your own files
Free, no sign-up, and made on your device. Nothing is uploaded.
Open the GIF creatorSources (last checked October 30, 2026)
- W3C: GIF89a specification (Graphic Control Extension)
- gifenc source: how delays and loop counts are written
Spotted something out of date? Please let us know.