User Rating 0.0
Total Usage 0 times

Drop a video here or click to browse

MP4, WebM, MOV • Max 100 MB

Is this tool helpful?

Your feedback helps us improve.

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.

boomerang gif animation video to gif loop bounce effect gif creator gif maker

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:

Ftotal = b × (2n 2)

The subtraction of 2 avoids duplicating the first and last frame at each reversal boundary. Playback duration per cycle:

Tcycle = Ftotal × d

where d is the inter-frame delay in ms. The frame extraction interval from a source video of duration D seconds:

tstep = Dn

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

ParameterRecommended RangeEffect on OutputPlatform Limit
Frame Count8 - 24 framesSmoothness of motionInstagram: ≤ 60 frames
Frame Delay50 - 120 msPlayback speed perceptionMost renderers clamp min to 20 ms
Output Width320 - 480 pxFile size & clarityTwitter: 15 MB max
Color Depth128 - 256 colorsGradient quality vs sizeGIF89a max: 256
Bounce Count1 - 3 loopsTotal frames = n × 2 × bounces -
Source Duration0.5 - 3 sContent per loop cycle -
Source FPS24 fpsAvailable frame density -
File Size (8 frames, 320px)~200 - 500 KBFast load, low quality -
File Size (20 frames, 480px)~1 - 4 MBSmooth, larger file -
DitheringOn for photos, Off for graphicsReduces banding artifacts -
TransparencyNot supported in boomerangGIF supports it, but loops break -
Aspect Ratio1:1 or 9:16Platform-optimized framingIG Stories: 9:16
LZW Min Code Size2 - 8 bitsCompression efficiencySpec-defined per color table
Instagram Boomerang FPS~10 fps effectiveNative app benchmark -
Max Recommended Total Frames48Beyond this, file size spikes -

Frequently Asked Questions

The GIF89a format restricts each frame to a maximum of 256 indexed colors. Smooth gradients in the source video (sky, skin tones) get quantized, producing visible steps. To reduce banding, lower the output resolution (fewer unique colors per frame) or choose source material with higher contrast and fewer gradient regions. Dithering can also scatter the banding perceptually.
Extracting more frames than the source video's native frame rate yields duplicate or near-identical frames. For a 1-second clip at 30 fps, requesting 60 frames means the tool seeks fractional positions that round to the same decoded frame. This wastes file size without improving smoothness. Keep extraction count at or below the source FPS multiplied by duration.
Each bounce cycle appends 2n − 2 frames to the GIF stream. Since GIF frames are individually LZW-compressed, file size scales roughly linearly with total frame count. A 12-frame extraction at 3 bounces produces 66 frames - over 5× the data of a single bounce (22 frames). The compression ratio per frame stays relatively constant because each frame's pixel distribution is independent.
The GIF specification stores delay in hundredths of a second as a 16-bit unsigned integer. A value of 0 or 1 (0-10 ms) is interpreted inconsistently across renderers. Most browsers and image viewers clamp delays below 20 ms to either 20 ms or 100 ms as a legacy anti-abuse measure (to prevent CPU-hogging animations). Setting delay to 20-50 ms ensures consistent cross-platform playback.
Technically yes, but practically the result is poor. A 30-second video with 15 extracted frames means each frame is 2 seconds apart - the motion looks like a slideshow, not a fluid boomerang. The effect works best with 0.5-3 second clips where consecutive frames show continuous, small motion. Trim your video to the interesting segment before uploading.
Yes. GIF file size is roughly proportional to width × height × frame count. Halving the width (and proportionally the height) reduces pixel count by 75%, which translates to approximately 60-70% file size reduction after LZW compression. A 480 px wide GIF at 20 frames might be 3 MB; the same content at 240 px could be under 800 KB.