User Rating 0.0
Total Usage 0 times

Drop images here or click to browse

PNG, JPG, WebP, BMP — any order, any size

Is this tool helpful?

Your feedback helps us improve.

About

A quasistatic GIF is a near-still animation where frames differ by subtle shifts - a flickering light, a slow gradient pulse, a gentle parallax offset. The format exploits the GIF89a specification's Graphics Control Extension to loop 2 - 255 near-identical frames at configurable inter-frame delays (d in centiseconds, range 2 - 6553500 ms). This tool performs real LZW compression and Median Cut color quantization directly in your browser. No server upload occurs. Each frame is reduced to a palette of at most 256 colors per the GIF specification. Misconfiguring quantization quality produces visible banding; setting inter-frame delay below 20 ms causes most browsers to clamp it to 100 ms, breaking intended timing.

The encoder constructs the binary GIF89a byte stream from scratch: Header, Logical Screen Descriptor, Global Color Table, Application Extension (NETSCAPE2.0 for looping), per-frame Graphics Control Extensions, Image Descriptors with LZW-compressed pixel data, and Trailer. Output file size scales with frame count and color entropy. Frames with large flat regions compress efficiently; photographic content with noise does not. Expect 50 - 500 KB per frame at 480p.

gif creator animated gif gif maker image to gif gif encoder quasistatic gif

Formulas

The GIF89a frame delay d is stored as a 16-bit unsigned integer in centiseconds. Actual display time per frame:

tframe = d × 10 ms

Total animation duration for n frames:

T = ni=1 di × 10 ms

LZW compression ratio depends on pixel entropy. The minimum code size m is derived from palette size k:

m = max(2, ⌈log2(k)⌉)

Where d = delay in centiseconds, n = frame count, T = total loop duration, k = number of colors in palette, m = LZW minimum code size in bits. The code table resets when it reaches 212 = 4096 entries.

Reference Data

ParameterGIF89a Spec ValuePractical RangeNotes
Max Colors2562 - 256Per-frame local palette
Frame Delay0 - 65535 cs2 - 100 csBrowsers clamp <2 cs to 10 cs
Loop Count0 - 655350 = infiniteNETSCAPE2.0 extension
Max Width65535 px2048 pxMemory-limited in browser
Max Height65535 px2048 pxMemory-limited in browser
LZW Min Code Size2 - 8 bitsMatches palette bit depthDerived from color count
LZW Max Code Size12 bitsFixedTable resets at 4096 entries
Disposal Method0 - 70 - 32 = restore to background
InterlacingSupportedOff (faster encoding)Adds complexity, rarely needed
Transparency1 indexOptionalOne palette entry marked transparent
Color QuantizationN/AMedian Cut / NeuQuantQuality 1 - 30 (lower = better)
Typical File Size (480p)N/A50 - 500 KB/frameDepends on entropy
Browser Delay FloorN/A20 msChrome/Firefox impose minimum
NETSCAPE2.0 Block19 bytesFixed structureRequired for animation looping
Header SignatureGIF89a6 bytesASCII: 47 49 46 38 39 61

Frequently Asked Questions

Most browsers impose a minimum inter-frame delay. Chrome and Firefox clamp any delay below 20 ms to 100 ms. If you set 10 ms expecting 100 fps, you will get 10 fps instead. Use a minimum of 20 ms (50 fps) to avoid this browser-imposed floor. The GIF89a spec allows values down to 10 ms (0.01 s) but renderers are not obligated to honor it.
GIF supports at most 256 colors per frame. Photographic images with millions of colors must be reduced via quantization. The Median Cut algorithm partitions the RGB color cube into 256 regions, selecting the centroid of each. Lower quality settings sample more pixels for better accuracy but slower encoding. Visible banding appears in smooth gradients. Flat-color illustrations quantize nearly losslessly.
This tool caps frames at 2048 × 2048 pixels. At that resolution, a single frame's RGBA pixel data occupies 2048 × 2048 × 4 = 16 MB of memory. With 20 frames, that is 320 MB before quantization buffers. Most devices handle 480p (854 × 480) comfortably. For 1080p content, expect encoding times of 5-30 seconds per frame depending on CPU.
The disposal method (GIF89a Graphics Control Extension bits 2-4) tells the renderer what to do with the frame area before drawing the next frame. Method 0 (unspecified) leaves the frame in place. Method 1 (do not dispose) also leaves it. Method 2 (restore to background) clears the area to the background color. Method 3 (restore to previous) reverts to the canvas state before the frame was drawn. This tool uses method 0 for full-frame replacement, which is correct when every frame covers the entire canvas.
Yes. Upload a sequence of frames where only a small region changes between frames. The LZW compressor exploits the redundancy in unchanged pixels, producing smaller file sizes than a fully animated GIF. For best results, keep the static area identical across frames (pixel-perfect) and limit motion to a small bounding box. The fewer unique pixel runs, the better LZW compresses.
GIF uses LZW compression, which is effective for runs of identical palette indices. Photographic content with noise or dithering produces short, unique runs that compress poorly. A 480p photographic frame may occupy 200-500 KB after quantization. Reducing the color count (e.g., to 64 or 128) or downscaling the resolution are the most effective ways to reduce file size. Additionally, more frames linearly increase total size.