oLoveTools
Video & stills → GIF

Turn a Video or a Pile of Images Into a GIF, Right in the Browser

Pull frames from a video or line up stills, edit the timeline, and encode a GIF with a global palette and inter-frame compression — all in your browser.

Frames stay editable before you encodeOne palette across the whole loopNothing is uploaded, nothing is downloaded

Drop a video or a set of images

MP4, WebM, MOV, MKV, AVI — or PNG, JPG, WebP, AVIF, GIF, BMP and HEIC stills.

Dropping a file starts nothing: you choose the settings and press the button.

How it works

1

Drop it in

A video or a pile of stills. Nothing is uploaded and nothing starts running on its own.

2

Choose the range

Set the in and out points and the frame rate, then pull the frames — or grab them one at a time by hand.

3

Edit the timeline

Delete frames, reverse them, hold one longer, and dial in colours and dithering.

4

Encode and check

Hold Alt over the preview to compare the GIF against the source, then download it or send it on.

One palette for the whole clip

The colours are chosen by median cut across every frame at once, so nothing shifts hue halfway through the loop.

Only what moved gets written

Pixels a frame shares with the one before it are inherited instead of re-encoded. On a screen recording that is most of the file.

Dithering that kills banding

Serpentine Floyd–Steinberg diffusion, with the strength on a slider, so gradients stay smooth even at 64 colours.

An editable timeline

Delete frames, reverse the run, make it a palindrome, hold a single frame longer. Undo costs nothing: it stores ids, not bitmaps.

Encoded across your cores

The animation is split over a pool of web workers, so the tab stays usable and the progress bar tracks real frames.

Nothing leaves the tab

The decoder, the palette and the compressor are all JavaScript running on your machine. No upload, no model fetched from a CDN.

Chained with the suite

Hand the frame on screen straight to crop, compress or the background remover without downloading it first.

video to gif

A real GIF encoder, not a canvas dump

Frames are read straight from the decoded video with a high-quality resize, never round-tripped through a JPEG. The palette is built by median cut over the whole animation, the pixels are mapped with serpentine Floyd–Steinberg dithering, and everything a frame shares with the one before it is written as transparent and inherited. The work is split across a pool of web workers, so the page stays responsive and the progress bar tracks real frames.

Frames stay editable before you encode
One palette across the whole loop
Nothing is uploaded, nothing is downloaded

For bug reports, demos and reaction loops

Record a bug once and cut it down to the four seconds that matter. Turn a design walkthrough into something that autoplays inside a pull request. Or line up a handful of stills and time them by hand. The timeline stays editable until you press encode.

Nothing is uploaded, and nothing is downloaded either

Every step runs in this tab: the video decoder is the browser's own, the quantiser and the LZW compressor are JavaScript loaded with the page, and the result is a Blob that never leaves your machine. There is no server to send files to and no model or codec fetched from a CDN. The trade-off is honest: everything is bounded by your RAM, so a 4K clip has to be trimmed and scaled down before it will encode.

Frequently Asked Questions

QIs there a file size limit?+

Not a fixed one, but there is a real one: the frames live in your tab's memory. A 480 px, 4-second GIF at 12 fps is around 50 MB of working data and encodes in a couple of seconds; a 4K clip will exhaust the tab long before it finishes. Trim the range and lower the working size — that is what those controls are for.

QWhy is my GIF still so big?+

GIF is a format from 1987: 256 colours and no motion compensation. Cut the width first, then the frame rate, then the palette. Leaving “reuse unchanged pixels” on is usually worth more than all three — on a screen recording it removes most of the file.

QWhy is the frame rate not exactly what I picked?+

GIF stores each delay in hundredths of a second, so only rates of the form 100/n exist. Asking for 12 fps really means 8 hundredths per frame, which is 12.5. The panel shows the rate you will actually get, not the one you asked for.

QWhich formats can I feed it?+

Any video the browser can play — MP4/H.264, WebM, MOV and often MKV — plus PNG, JPG, WebP, AVIF, GIF, BMP and iPhone HEIC for stills. An animated GIF dropped in as a still contributes its first frame only.

QDoes anything get uploaded?+

No. There is no upload step and no external request: the encoder ships with the page and runs in web workers inside this tab.

QCan I keep transparency?+

Yes, with the “keep transparency” switch. GIF supports exactly one fully transparent colour, so soft edges become hard ones. It cannot be combined with pixel reuse, because both need that same transparent slot.

Related searches

video to gifgif makerimages to gifmp4 to gifgif compressoranimated giffree gif convertergif editor
Part of the oLoveTools suite
oLoveTools

Free, private, and customizable client-side GIF creator tools.

A real GIF encoder, not a canvas dump

Frames are read straight from the decoded video with a high-quality resize, never round-tripped through a JPEG. The palette is built by median cut over the whole animation, the pixels are mapped with serpentine Floyd–Steinberg dithering, and everything a frame shares with the one before it is written as transparent and inherited. The work is split across a pool of web workers, so the page stays responsive and the progress bar tracks real frames.

For bug reports, demos and reaction loops

Record a bug once and cut it down to the four seconds that matter. Turn a design walkthrough into something that autoplays inside a pull request. Or line up a handful of stills and time them by hand. The timeline stays editable until you press encode.

Nothing is uploaded, and nothing is downloaded either

Every step runs in this tab: the video decoder is the browser's own, the quantiser and the LZW compressor are JavaScript loaded with the page, and the result is a Blob that never leaves your machine. There is no server to send files to and no model or codec fetched from a CDN. The trade-off is honest: everything is bounded by your RAM, so a 4K clip has to be trimmed and scaled down before it will encode.

video to gifgif makerimages to gifmp4 to gifgif compressoranimated giffree gif convertergif editor

Frequently Asked Questions

Is there a file size limit?

Not a fixed one, but there is a real one: the frames live in your tab's memory. A 480 px, 4-second GIF at 12 fps is around 50 MB of working data and encodes in a couple of seconds; a 4K clip will exhaust the tab long before it finishes. Trim the range and lower the working size — that is what those controls are for.

Why is my GIF still so big?

GIF is a format from 1987: 256 colours and no motion compensation. Cut the width first, then the frame rate, then the palette. Leaving “reuse unchanged pixels” on is usually worth more than all three — on a screen recording it removes most of the file.

Why is the frame rate not exactly what I picked?

GIF stores each delay in hundredths of a second, so only rates of the form 100/n exist. Asking for 12 fps really means 8 hundredths per frame, which is 12.5. The panel shows the rate you will actually get, not the one you asked for.

Which formats can I feed it?

Any video the browser can play — MP4/H.264, WebM, MOV and often MKV — plus PNG, JPG, WebP, AVIF, GIF, BMP and iPhone HEIC for stills. An animated GIF dropped in as a still contributes its first frame only.

Does anything get uploaded?

No. There is no upload step and no external request: the encoder ships with the page and runs in web workers inside this tab.

Can I keep transparency?

Yes, with the “keep transparency” switch. GIF supports exactly one fully transparent colour, so soft edges become hard ones. It cannot be combined with pixel reuse, because both need that same transparent slot.

© 2026 oLoveToolsAbout

GIFBolt | Free Online Video to GIF and Image to GIF Converter

Convert video or image sequences into animated GIFs in your browser: editable frame timeline, global palette, Floyd–Steinberg dithering and inter-frame compression. Nothing is uploaded.

Frequently Asked Questions

Is there a file size limit?

Not a fixed one, but there is a real one: the frames live in your tab's memory. A 480 px, 4-second GIF at 12 fps is around 50 MB of working data and encodes in a couple of seconds; a 4K clip will exhaust the tab long before it finishes. Trim the range and lower the working size — that is what those controls are for.

Why is my GIF still so big?

GIF is a format from 1987: 256 colours and no motion compensation. Cut the width first, then the frame rate, then the palette. Leaving “reuse unchanged pixels” on is usually worth more than all three — on a screen recording it removes most of the file.

Why is the frame rate not exactly what I picked?

GIF stores each delay in hundredths of a second, so only rates of the form 100/n exist. Asking for 12 fps really means 8 hundredths per frame, which is 12.5. The panel shows the rate you will actually get, not the one you asked for.

Which formats can I feed it?

Any video the browser can play — MP4/H.264, WebM, MOV and often MKV — plus PNG, JPG, WebP, AVIF, GIF, BMP and iPhone HEIC for stills. An animated GIF dropped in as a still contributes its first frame only.

Does anything get uploaded?

No. There is no upload step and no external request: the encoder ships with the page and runs in web workers inside this tab.

Can I keep transparency?

Yes, with the “keep transparency” switch. GIF supports exactly one fully transparent colour, so soft edges become hard ones. It cannot be combined with pixel reuse, because both need that same transparent slot.

Related searches

video to gif, gif maker, images to gif, mp4 to gif, gif compressor, animated gif, free gif converter, gif editor