Boomerang GIF Creator
Create boomerang GIF animations from video clips. Upload a video, extract frames, reverse and loop them into a seamless bounce effect.
Drop a video here or click to browse
MP4, WebM, MOV • Max 100 MB
About
A boomerang animation plays a sequence of frames forward then immediately in reverse, creating a seamless back-and-forth loop. The visual effect depends on frame count (n), playback delay (d in ms), and output resolution. Too few frames produce stutter. Too many inflate file size beyond platform upload limits (Instagram caps at 15MB for stories). This tool extracts frames from your video at a configurable rate, applies median-cut color quantization to 256 colors per the GIF89a specification, and encodes a real .gif file using LZW compression entirely in your browser. No server upload occurs. Your footage stays private.
Frame timing matters more than resolution for perceived smoothness. A 10-frame boomerang at 80ms delay looks fluid. The same frames at 200ms look choppy. Note: color-rich gradients suffer from the 256-color palette constraint inherent to the GIF format. Flat-color or high-contrast subjects produce cleaner results. Pro tip: trim your source video to under 3 seconds before uploading for optimal file size and visual impact.
Formulas
The total frame count in a boomerang GIF is determined by the extraction count and the bounce repetitions. Given n extracted frames and b bounce cycles:
The subtraction of 2 avoids duplicating the first and last frame at each reversal boundary. Playback duration per cycle:
where d is the inter-frame delay in ms. The frame extraction interval from a source video of duration D seconds:
Color quantization reduces the RGB color space (16.7M colors) to a palette of k ≤ 256 entries using median-cut partitioning. The LZW compressor then encodes indexed pixel streams with variable-length codes starting at m + 1 bits, where m = ceil(log2(k)) is the minimum code size.
Where: Ftotal = total frames in output GIF, n = extracted source frames, b = bounce count, d = delay per frame (ms), D = source video duration (s), k = palette size, m = minimum LZW code size (bits).
Reference Data
| Parameter | Recommended Range | Effect on Output | Platform Limit |
|---|---|---|---|
| Frame Count | 8 - 24 frames | Smoothness of motion | Instagram: ≤ 60 frames |
| Frame Delay | 50 - 120 ms | Playback speed perception | Most renderers clamp min to 20 ms |
| Output Width | 320 - 480 px | File size & clarity | Twitter: 15 MB max |
| Color Depth | 128 - 256 colors | Gradient quality vs size | GIF89a max: 256 |
| Bounce Count | 1 - 3 loops | Total frames = n × 2 × bounces | - |
| Source Duration | 0.5 - 3 s | Content per loop cycle | - |
| Source FPS | ≥ 24 fps | Available frame density | - |
| File Size (8 frames, 320px) | ~200 - 500 KB | Fast load, low quality | - |
| File Size (20 frames, 480px) | ~1 - 4 MB | Smooth, larger file | - |
| Dithering | On for photos, Off for graphics | Reduces banding artifacts | - |
| Transparency | Not supported in boomerang | GIF supports it, but loops break | - |
| Aspect Ratio | 1:1 or 9:16 | Platform-optimized framing | IG Stories: 9:16 |
| LZW Min Code Size | 2 - 8 bits | Compression efficiency | Spec-defined per color table |
| Instagram Boomerang FPS | ~10 fps effective | Native app benchmark | - |
| Max Recommended Total Frames | 48 | Beyond this, file size spikes | - |