What it does
Turns a short video clip (MP4, WebM, MOV supported by your browser) into an animated GIF — entirely in your browser. Nothing is uploaded anywhere: the video is decoded locally, frames are grabbed from a <canvas>, and encoded directly into a GIF file using a pure-JavaScript encoder.
You can also choose how the GIF plays back:
- Normal loop — plays forward, then jumps back to the start (classic GIF loop).
- Ping-pong (back and forth) — plays forward, then backward, then forward again, forever — no jump cut, seamless "boomerang" effect.
- Reverse — plays the clip backward, looping.
Try it
How it works
- You pick a local video file — it's loaded into a hidden
<video>element and a preview is shown, entirely client-side (URL.createObjectURL). - When you click Convert, the tool seeks the video frame-by-frame (based on your chosen start time, duration, and target FPS), draws each frame onto an off-screen
<canvas>(resized to your target width, preserving aspect ratio), and collects the resulting frames as raw pixel data. - Depending on the playback mode:
- Normal loop: frames are kept in their captured (forward) order.
- Ping-pong: the captured forward frames are followed by the same frames in reverse order (minus the duplicated end frames), so the GIF plays forward then backward with no visible jump.
- Reverse: the frame order is simply flipped.
- The ordered frame list is fed into a pure-JavaScript GIF encoder (an in-browser implementation of the GIF89a format with a NeuQuant-style color quantizer), which produces a single animated
.giffile with infinite looping enabled. - The resulting GIF is shown as a preview and offered as a direct download — the file itself is built with
Blob/URL.createObjectURL, so it never touches a server.
Tips
- Keep clips short (2–5 seconds) and the frame rate moderate (8–15 fps) — GIFs are uncompressed-ish per frame internally, so file size grows fast with duration, resolution, and frame rate.
- Ping-pong roughly doubles the number of encoded frames for the same duration (forward + backward pass), so expect a larger file than "Normal loop" or "Reverse" for the same settings.
- Lower the output width first if the resulting GIF is too large — it has the biggest impact on file size.
- Browser support depends on the video codec — most modern browsers play H.264 MP4, VP8/VP9 WebM, but some formats (e.g. certain HEVC/MOV files) may not decode; try converting the source video to MP4 first if it fails to load.
Notes
- All processing (decoding, frame extraction, GIF encoding) happens locally in your browser tab. Your video is never uploaded anywhere.
- Very long videos or high frame counts can use a lot of memory, since every frame is held in memory during encoding. If the tab becomes unresponsive, try a shorter duration, lower FPS, or smaller width.