.GIF Graphics Interchange Format
.gif

Graphics Interchange Format

Convert GIF images and animations to JPG, PNG, or WebP directly in your browser — no upload, no server. GIF's LZW patent controversy (Unisys, 1994-2004) directly sparked the creation of PNG. FileDex decodes each frame locally using Canvas API, preserving transparency and color fidelity.

Learn more ↓
Image structure
GIF89a header
LSD palette · size
Frames LZW blocks
AnimationTransparencyLossy1987
By FileDex

Your files never leave your device

Common questions

How do I convert an animated GIF to MP4 without losing quality?

Drop your GIF into FileDex's converter and select MP4 as the output format. The conversion decodes GIF frames to full-color pixels and re-encodes them as H.264 video. Quality actually improves because MP4 supports millions of colors versus GIF's 256. File size typically drops by 10-20x.

Why is my GIF file so large compared to a video?

GIF stores each frame independently with LZW compression, which cannot exploit temporal redundancy between frames. A 10-second GIF at 15fps stores 150 separate compressed images. H.264/H.265 video uses inter-frame prediction to store only the differences, achieving 10-20x smaller files.

Can I convert a GIF to WebP and keep the animation?

Yes. Animated WebP supports the same loop-based playback as GIF but with VP8 compression and full 24-bit color. Drop your GIF into FileDex's converter and select WebP as the output. The result is typically 25-34% smaller than the original GIF while supporting millions of colors.

Does converting GIF to PNG preserve transparency?

Yes. PNG supports 8-bit alpha transparency, which is a superset of GIF's 1-bit binary transparency. Every transparent pixel in the GIF maps correctly to the PNG output. Only one frame is extracted since PNG does not support animation natively.

Is the GIF format still patent-encumbered?

No. The LZW compression patents held by Unisys expired in 2003 (US) and 2004 (worldwide). GIF is completely free to encode and decode without licensing.

Is GIF pronounced with a hard G or soft G?

Creator Steve Wilhite stated at his 2013 Webby Award acceptance that it is 'JIF' with a soft G. However, the hard G pronunciation is more widely used. The Oxford English Dictionary accepts both pronunciations.

Can a GIF file contain sound or audio?

No. GIF is strictly a raster image format with no audio track capability. What appear to be 'GIFs with sound' on social platforms are actually muted MP4 or WebM video files displayed in a GIF-like looping player. Use a video format like MP4 if you need animation with audio.

What makes .GIF special

Born in 1987
Older than the World Wide Web
CompuServe published GIF in 1987 for dial-up color images. The web launched in 1991. GIF predates the medium that made it famous.
256-color limit
Each frame maxes out at 256 colors
GIF uses an indexed palette of up to 256 colors per frame. Photos get dithered into dot patterns. PNG and WebP removed this limitation.
Secret video
Twitter and Imgur convert GIFs to MP4
Major platforms silently transcode uploaded GIFs to muted looping MP4. The bandwidth drops by 90% while the visual experience stays identical.
Patent war
LZW patent sparked Burn All GIFs
Unisys enforced LZW licensing fees in 1994, triggering a movement to abandon GIF. The controversy directly motivated the creation of PNG.

CompuServe published the Graphics Interchange Format in 1987 as a platform-independent way to transmit color images over dial-up connections. GIF uses LZW lossless compression with a hard ceiling of 256 colors per frame, making it efficient for flat graphics but wasteful for photographic or video-like content. Two specification versions exist: GIF87a (the original) and GIF89a (1989), which added animation, transparency, and text overlays. Virtually every GIF in circulation today is GIF89a.

Continue reading — full technical deep dive

LZW Compression

LZW (Lempel-Ziv-Welch) is a dictionary-based compression algorithm. The encoder starts with a table of 256 single-byte entries (one per possible color index). As it reads pixel data left-to-right, top-to-bottom, it builds longer dictionary entries from recurring sequences. When a sequence already exists in the table, it outputs that entry's code instead of the raw bytes. Repeated patterns — solid color runs, repeating tile backgrounds, uniform regions — compress extremely well. Photographic content with high pixel-to-pixel variation produces poor LZW ratios.

The algorithm is elegant but carries history. Unisys held a patent on LZW (U.S. Patent 4,558,302) and began enforcing licensing fees in 1994. The controversy directly motivated the creation of PNG as a patent-free alternative. The Unisys patent expired in the United States in June 2003 and worldwide by 2004. LZW is now freely usable.

Color Table Architecture

GIF files contain a Global Color Table (GCT) defined in the header — up to 256 RGB entries shared across all frames. Individual frames can optionally include a Local Color Table (LCT) that overrides the GCT for that frame only. Each table stores between 2 and 256 colors, with the size encoded as a power of two.

The 256-color-per-frame limit is absolute. Photographic images must be quantized down from millions of colors using dithering algorithms (Floyd-Steinberg, ordered, etc.), which introduces visible dot patterns. This is why GIF is fundamentally unsuitable for photographs.

However, the local color table trick expands total palette range in animations. Each frame can define its own 256-color palette. A 30-frame animation could theoretically use 7,680 distinct colors across all frames. Some tools exploit this by splitting a single static image into tiled sub-frames with different local palettes — a hack that produces better color fidelity at the cost of larger files and viewer compatibility issues.

Animation Internals

GIF animation works by stacking multiple image frames inside a single file. The Graphic Control Extension block precedes each frame and defines three properties:

Frame delay is specified in centiseconds (hundredths of a second). A value of 10 means 100 ms between frames. Values below 2 are treated inconsistently — most browsers clamp delays of 0 or 1 to 100 ms, making ultra-fast frame rates impossible to achieve reliably.

Disposal method controls what happens to the canvas before the next frame renders:

Method Behavior Use Case
0 — Unspecified Decoder chooses Rarely used intentionally
1 — Leave Previous frame remains Frames that fully cover the canvas
2 — Restore to background Canvas clears to background color Frames smaller than the canvas with transparency
3 — Restore to previous Canvas reverts to state before current frame Overlay animations that must "undo"

Wrong disposal methods cause ghosting, flashing, or accumulated artifacts. Disposal method 2 with transparency is the standard approach for animations where each frame differs significantly.

Transparency index designates one palette entry as fully transparent. This is strictly 1-bit: a pixel is either 100% opaque or 100% transparent. There is no partial transparency, no alpha gradients, no anti-aliased edges against unknown backgrounds. PNG's 8-bit alpha channel (256 levels of transparency) is the standard solution when smooth edges matter.

File Size Problem

Animated GIFs are enormous relative to their visual content. Each frame is stored as a separate compressed image. There is no inter-frame compression — no motion vectors, no temporal prediction, no reference frames. A 3-second 480p GIF is typically 2-5 MB; the same clip as MP4 H.264 is 150-300 KB — 10-20x smaller. At 720p the gap widens further, because GIF's per-frame LZW compression scales with pixel count while video codecs exploit temporal redundancy.

Frame optimization tools reduce size by storing only the rectangular region that changed between frames (delta frames) rather than full canvas replacements. Tools like Gifsicle apply this optimization and can cut 20-40% off naive GIF exports. Even so, the format remains orders of magnitude less efficient than modern video codecs for motion content.

Interlacing

GIF supports a 4-pass interlacing scheme. Rather than storing rows sequentially (0, 1, 2, 3...), an interlaced GIF stores rows in this order: pass 1 (every 8th row starting at 0), pass 2 (every 8th row starting at 4), pass 3 (every 4th row starting at 2), pass 4 (every 2nd row starting at 1). The viewer can display a rough image after receiving only 12.5% of the data. This mattered on dial-up connections. On modern broadband it adds a few bytes of overhead with no practical benefit for most use cases.

Platform Behavior

Major platforms silently convert uploaded GIF files to video. Twitter transcodes GIFs to MP4. Telegram converts them to MPEG4 video stored as "GIF" in the UI. Discord re-encodes large GIFs. Imgur converts uploads to MP4 served via <video> tags while keeping .gifv URLs. The visual experience is identical but bandwidth drops by 90% or more. When these platforms display "GIFs," they are almost always playing muted, looping video files.

GIF87a vs GIF89a

GIF87a supports only static images and animation via multi-image packing (without explicit timing control). GIF89a added four extension blocks: Graphic Control Extension (frame delay, disposal, transparency), Comment Extension (embedded text metadata), Plain Text Extension (overlaid text rendering — almost never used), and Application Extension (application-specific data, most notably the Netscape looping extension that enables infinite animation loops). The Netscape 2.0 Application Extension block is not part of the GIF89a specification itself — it is a de facto standard that every browser honors.

Modern Alternatives

Format Colors Alpha Animation Compression Browser Support
GIF 256/frame 1-bit Yes LZW (lossless) Universal
APNG 16M+ 8-bit Yes Deflate (lossless) Universal since 2023
WebP 16M+ 8-bit Yes VP8/VP8L Universal since 2023
AVIF 16M+ 8-bit Yes (AVIF sequence) AV1 All major browsers since 2024
MP4 (H.264) 16M+ No Video Temporal + spatial Universal via <video>

For short looping clips, inline <video> with MP4 or WebM is the correct technical choice. APNG replaces GIF for animated graphics that need lossless quality and full alpha. GIF persists because of ecosystem inertia — messaging apps, Slack integrations, Giphy APIs, and email clients where <video> tags are blocked.

Gotchas

Dithering on photographic frames creates noisy, grainy results that compress poorly and look worse than a lossy JPEG at a fraction of the size. GIF has no audio track — it is an image format, not a multimedia container. Maximum frame rate is capped at roughly 50 fps in theory (2 centisecond delay), but browser clamping makes anything above 20 fps unreliable. Large animated GIFs (10 MB+) cause memory pressure on mobile browsers because every frame must be decoded into an uncompressed bitmap — a 100-frame 720p GIF consumes over 250 MB of RAM when fully decoded.

.GIF compared to alternatives

.GIF compared to alternative formats
Formats Criteria Winner
.GIF vs .PNG
Color depth
GIF is limited to 256 indexed colors per frame. PNG supports 24-bit truecolor (16.7 million colors) and 8-bit alpha channel.
PNG wins
.GIF vs .WEBP
Animation file size
Animated WebP uses VP8/VP8L compression producing files 25-34% smaller than equivalent GIF animations, with full-color support.
WEBP wins
.GIF vs .MP4
Animation efficiency
H.264 video achieves 10-20x smaller files than GIF for the same animation content by exploiting temporal redundancy between frames.
MP4 wins
.GIF vs .APNG
Animation with transparency
APNG supports full 24-bit color and 8-bit alpha per frame during animation. GIF only supports 1-bit binary transparency with 256 colors.
APNG wins

Technical reference

MIME Type
image/gif
Magic Bytes
47 49 46 38 GIF8 signature, followed by 7a (GIF87a) or 9a (GIF89a) version.
Developer
CompuServe
Year Introduced
1987
Open Standard
Yes
0000000047494638 GIF8

GIF8 signature, followed by 7a (GIF87a) or 9a (GIF89a) version.

Binary Structure

GIF files begin with a 6-byte header containing the ASCII signature 'GIF' followed by the version string '87a' or '89a'. The Logical Screen Descriptor (7 bytes) declares canvas dimensions, global color table flag, color resolution, and background color index. If flagged, a Global Color Table follows with 3-byte RGB entries (up to 768 bytes for 256 colors). Image data blocks each contain a Local Image Descriptor (10 bytes), optional Local Color Table, LZW minimum code size byte, and variable-length sub-blocks of LZW-compressed pixel data. GIF89a adds Extension Blocks: Graphics Control Extension (animation delay, disposal method, transparency index), Comment Extension, Plain Text Extension, and Application Extension (Netscape looping). The file terminates with a single Trailer byte 0x3B.

OffsetLengthFieldExampleDescription
0x00 3 bytes Signature 47 49 46 ASCII 'GIF' — identifies the file as GIF format.
0x03 3 bytes Version 38 39 61 ASCII '89a' (GIF89a) or '87a' (GIF87a). 89a adds animation, transparency, and comment extensions.
0x06 2 bytes Canvas Width E8 03 Logical screen width in pixels (little-endian uint16). Example: 1000px.
0x08 2 bytes Canvas Height C8 00 Logical screen height in pixels (little-endian uint16). Example: 200px.
0x0A 1 byte Packed byte F7 Bits 0-2: size of Global Color Table (2^(N+1) entries). Bit 3: sort flag. Bits 4-6: color resolution. Bit 7: Global Color Table present.
0x0B 1 byte Background Color Index 00 Index into Global Color Table for background color.
0x0C 1 byte Pixel Aspect Ratio 00 0 = square pixels. Non-zero: ratio = (value + 15) / 64.
1987CompuServe publishes GIF87a specification with LZW compression and multi-image support1989GIF89a adds Graphics Control Extension (animation timing, transparency, disposal methods) and Comment Extension1994Unisys begins enforcing LZW patent licensing for GIF encoders, triggering the 'Burn All GIFs' campaign1995PNG format created as a patent-free alternative to GIF for static images2003US LZW patent (Unisys) expires, removing licensing barriers for GIF encoder implementations2004Worldwide LZW patents expire, making GIF fully free to implement
Extract first frame from animated GIF as PNG ffmpeg
ffmpeg -i input.gif -frames:v 1 output.png

-frames:v 1 extracts only the first video frame. Output format is inferred from the .png extension. Lossless extraction with full color fidelity.

Convert GIF animation to MP4 with browser-safe encoding ffmpeg
ffmpeg -i input.gif -movflags +faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4

-movflags +faststart moves the moov atom for web streaming. -pix_fmt yuv420p ensures compatibility with all hardware decoders. The scale filter rounds dimensions to even numbers, which H.264 requires.

Create high-quality GIF from MP4 using two-pass palette generation ffmpeg
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,palettegen" palette.png && ffmpeg -i input.mp4 -i palette.png -lavfi "fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

Two-pass approach: first pass generates an optimal 256-color palette from the source video using Lanczos resampling. Second pass encodes the GIF using that palette for maximum color accuracy. fps=15 and scale=480 keep file size manageable.

Probe GIF file for frame count and dimensions ffprobe
ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=width,height,nb_read_frames -of csv=p=0 input.gif

-count_frames forces frame counting (slow but accurate). Output is CSV: width,height,frame_count. Useful for determining animation length before conversion.

GIF JPG transcode lossy JPEG produces smaller files for photographic content and is accepted by every image viewer and upload form. Animated GIFs lose animation since JPEG is single-frame — use this when only the first frame or a key frame matters.
GIF PNG transcode lossless PNG supports full 24-bit color and 8-bit alpha transparency, removing GIF's 256-color palette restriction. Ideal for extracting individual frames from animated GIFs while preserving exact pixel data.
GIF WEBP transcode lossy WebP animated images produce files 25-34% smaller than equivalent GIF animations with better color depth (24-bit vs 8-bit indexed). All modern browsers support animated WebP.
GIF MP4 transcode lossy H.264 in MP4 delivers dramatically smaller file sizes than GIF animation — often 10-20x reduction — with full-color support. Social platforms and messaging apps auto-convert GIF uploads to MP4/WebM internally for this reason.
LOW

Attack Vectors

  • Decompression bombs — GIF files with very large canvas dimensions but small file size can exhaust memory when decoded
  • Crafted LZW streams — malformed LZW code tables can trigger buffer overflows in vulnerable decoders
  • Comment Extension injection — arbitrary text in GIF comment blocks could carry social engineering payloads

Mitigation: FileDex decodes GIF entirely in the browser sandbox using Canvas API. No server-side processing, no file upload, no execution of embedded content. Memory limits enforced by the browser runtime.

gifsicle tool
CLI tool for optimizing, resizing, and editing GIF animations frame by frame
FFmpeg tool
Decodes and encodes GIF with palette generation; handles GIF-to-video conversion
ImageMagick tool
Read, write, resize, and composite GIF images including animation frame manipulation
Pillow library
Python imaging library with GIF read/write, frame extraction, and animation assembly
sharp library
High-performance Node.js image processing library with GIF support via libvips