EasyGIF

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 wantIdeal delayStored (1/100 s)Frame rate you get
5 fps200 ms20 (200 ms)5 fps
10 fps100 ms10 (100 ms)10 fps
12 fps83.3 ms8 (80 ms)12.5 fps
15 fps66.7 ms7 (70 ms)14.3 fps
20 fps50 ms5 (50 ms)20 fps
24 fps41.7 ms4 (40 ms)25 fps
25 fps40 ms4 (40 ms)25 fps
30 fps33.3 ms3 (30 ms)33.3 fps
50 fps20 ms2 (20 ms)50 fps
60 fps16.7 ms2 (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

UseDelay per frame
Smooth motion from video40–100 ms (10–25 fps)
Stop-motion, drawings, pixel art100–250 ms
Slideshows, product photo sets500 ms–1 s
Steps people need to read1.5–2 s, or duplicate the frame

The ranges suggested on the GIF creator:

DelayFrame rateGood for
20–40 ms25–50 fpsSmooth motion from a high-frame-rate video
60–100 ms10–16 fpsMost video clips, screen recordings, and reactions
150–300 ms3–7 fpsStop-motion and simple frame-by-frame drawings
500 ms–1 s1–2 fpsSlideshows and product photo sets
1.5–2 s< 1 fpsTutorials 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 creator

Sources (last checked October 30, 2026)

Spotted something out of date? Please let us know.

Related guides