Two-pass palette · in browser

Video to GIF The GIF you wanted. Without the dither.

Most "video to GIF" converters use a single-pass encode that picks 256 colors out of a hat — and you see the result in the bands and dither across every frame. Morph runs FFmpeg's two-pass palettegen + paletteuse in your browser tab. The first pass studies the whole clip and builds an optimal 256-color palette; the second encodes against it. Cleaner GIFs, often half the size, all locally rendered.

Drop a file here
MP4 → GIF
Choose a file
Reads and writes inside this tab. Nothing is sent anywhere.

What it actually does

01
PALETTE

FFmpeg palettegen + paletteuse — the proper two-pass.

The first pass scans the video and builds a 256-color palette tuned to the actual content. The second pass encodes against that palette with Bayer dithering. Result: half the file size of single-pass GIFs, visibly cleaner output.

02
TRIM

Set in/out before encode

GIF size grows fast with duration. Trim the segment you want before conversion.

03
SIZE

480px / 15fps default

Sweet spot for social. Adjust up to 1080px and 30fps.

04
LOCAL

FFmpeg.wasm in your tab

Files never upload. Output saves locally.

How it works

  1. Open morph.cool/video-to-gif. No install.
  2. Drop the MP4, WebM, or MOV. Set in/out points if you want a segment.
  3. Adjust width and fps if needed. Hit convert.
  4. Pass 1 generates the palette. Pass 2 encodes against it. Both run locally.
  5. The GIF saves to your downloads. Drop it into Slack, Twitter, or wherever.
2 passPalette
0Upload
50% smallervs single-pass

Why two-pass beats every "fast GIF maker" online

Single-pass GIF converters pick 256 colors arbitrarily — usually a uniform sample of RGB space — and the encoder dithers to fake the rest. The result looks bandy and often weighs more than it needs to. Two-pass studies the actual content: a video of a sunset gets a sunset-tuned palette; a video of a logo animation gets a brand-tuned palette. Same FFmpeg, smarter use. Morph runs both passes in your browser tab.

Frequently asked

What's two-pass palette and why does it matter?

GIFs only have 256 colors. A naive encoder picks them poorly and you get bands and dither. Two-pass palette analyzes the video first, builds an optimal 256-color palette, then encodes against it — visibly cleaner output, often half the file size.

Frame rate and size?

Default 480px wide at 15fps — the sweet spot for social GIFs. Both adjustable. Maximum 30fps and 1080px width.

Does it support trimming?

Yes. Set in/out points before conversion to GIF only the segment you want. Useful since GIF file size grows fast with duration.

Where does the video go?

Nowhere. The whole pipeline runs in your browser tab via FFmpeg.wasm. The video, the palette pass, the encode pass, and the output GIF all stay local.

Loop or one-shot?

Looping by default — that is the GIF convention. Choose one-shot if needed for embeds where loop control matters.

WebP output instead?

Animated WebP is on the roadmap — smaller and supports more colors. GIF remains for compatibility.

Convert to GIF
Convert to GIF
Nothing leaves your device · Free for what you make, credits for what we run