← All tools

Video to GIF Converter

Trim a clip and convert video to GIF in your browser: frame rate, palette, dithering, reverse, loop. MP4, WebM, MOV — nothing is uploaded.

This tool runs entirely in your browser. Your input is never uploaded.

The video never leaves your device: decoding, palette building, and GIF encoding all run locally.

How the video to GIF converter works

Drop in a video (MP4, WebM, MOV, MKV — anything your browser can play) and it is decoded by the browser itself, right on this page. You trim the section you want, pick output settings, and the tool extracts frames, builds a color palette, and writes a real GIF89a file — all in local memory, nothing is uploaded.

The pipeline splits work across threads: the main thread seeks and draws frames from the <video> element, while a Web Worker does the heavy lifting — median-cut palette quantization, optional error-diffusion dithering, and LZW compression. The interface stays responsive even for long clips.

Trimming and preview

Two sliders set the start and end points, and the video loops inside your selection so you can judge the cut before committing. "Set start / set end at playhead" snaps the boundaries to wherever the preview is paused, and a 0.25×/0.5× preview speed helps with fast action. The selection length is always visible.

Output settings

  • Width: presets from 200 to 640, or keep the original size (capped at 800 px — GIF is not a delivery format for big video).
  • Frame rate: 5–24 fps presets, a custom 1–30 field, or source rate capture. Source rate uses requestVideoFrameCallback to grab every frame the video presents with its true timing, which produces variable-frame-rate GIFs — smoother motion, larger files. It is limited to 60-second selections and falls back to fixed-rate seeking where unsupported.
  • Colors per frame: 8–256. Each frame gets its own median-cut palette (vivid, streaming-friendly) or all frames share one global palette (smaller files, consistent color; falls back automatically if the memory budget would be exceeded).
  • Dithering: none, Floyd–Steinberg error diffusion, or a 4×4 Bayer ordered matrix. Dithering hides banding at low color counts at the cost of some noise.
  • Transparent diff: identical pixels between consecutive frames become transparent and the previous frame stays on screen (disposal "do not dispose"). Static backgrounds shrink dramatically.
  • Duplicate frames are detected and folded — the previous frame's delay is extended instead of re-emitting the image.
  • Reverse (boomerang): appends a mirrored copy of the frame sequence so the clip plays forward then backward in a seamless loop.
  • Aspect crop: free, 1:1, 4:3, 16:9, or 9:16, centered on the source.
  • Loop: play once, forever (NETSCAPE2.0), or a fixed number of repeats.

Limits and tips

Frame counts are capped at 600; a warning appears from 300 up because very large GIFs take a while to encode and most chat platforms recompress anything past a few megabytes anyway. A practical starting point for chat stickers: 480 px wide, 12–15 fps, 128 colors, Floyd–Steinberg dithering, transparent diff on.

The audio track is ignored — GIF has no sound. HDR/10-bit sources are tone-mapped by the browser before frames reach the canvas.

All processing happens locally: no account, no upload, no server round-trip.

Related tools

A growing collection of browser-only tools. Your data stays on your device whenever the browser can handle the task.