Skip to content

Convert APNG to GIF

An animated PNG is a GIF with better colour that half the internet treats as a still. Turn it into a GIF that actually moves where you post it, every frame kept. Nothing is stored.

  • Never stored
  • No queue, no waiting
  • No signup, no watermark

How it works

1

Add your animated PNGs

They are usually named .png, sometimes .apng; both are accepted. A plain PNG works too and comes out as a one-frame GIF.

2

Convert

Every frame is read with its own timing and written into a GIF with a palette built from the picture — 256 colours, or fewer for a smaller file.

3

Download

Singly or as a ZIP. The row says how many frames came through.

What an APNG is

APNG is an ordinary PNG with three extra chunk types — acTL announcing the animation, fcTL before each frame with its size, position, delay and how to dispose of the previous frame, and fdAT holding the frame's pixels — inserted so that a viewer that does not know them sees a normal still PNG. That backward compatibility was the point in 2004 and is the problem today: software that only checks the header files it under "picture" and never looks further.

Each frame is composed as the file instructs — frames may cover only part of the canvas and blend over or replace what was there — into a full picture, then quantised to a palette and written to the GIF with the same delay. The quantiser builds its 256 colours from the frame itself and dithers; flat artwork and pixel-art stickers, which is most of what APNGs are, come through essentially unchanged. Delays below 20 ms are raised to 100 ms, as browsers do for GIFs in any case.

Transparency becomes the one-bit kind: a pixel is shown or it is not. An APNG sticker with a soft shadow gets a crisp edge instead, cut at half opacity. That is a limit of GIF rather than of the conversion, and the only way round it is a format with real alpha — WebP, where the destination plays it.

When you want something else

ffmpeg reads APNG and writes a GIF with a two-pass palette: ffmpeg -i in.png -vf "split[a][b];[a]palettegen[p];[b][p]paletteuse" out.gif. It also offers dithering choices this page does not, which matter on gradients.

If the destination plays APNG — every current browser does, and so do iMessage and most sticker platforms — keep the APNG. It has real transparency and full colour, and the GIF is a compatibility copy that is larger and worse.

Frequently asked questions

How do I know my PNG is animated?

Open it in Chrome, Firefox or Safari: all three play APNG, so if it moves there and not where you posted it, it is an APNG and this is the page. The row here also says how many frames it found.

Does the GIF keep the timing?

Yes. Each frame carries its own delay in both formats and it is copied across, so a 12-frame bounce stays a 12-frame bounce at the same speed.

Why does the GIF look grainier?

An APNG frame has 16 million colours and smooth transparency; a GIF frame has 256 and none. The palette is built from the picture and dithered, which is where the grain comes from. Flat artwork — the usual content of an APNG — barely shows it.

What about a PNG that is not animated?

It converts to a single-frame GIF and the row says so. For a still you almost certainly want to keep the PNG, or use PNG to WebP for a smaller one.

Are my files stored anywhere?

No — nothing is stored at any point.

Why does Discord or Slack show my sticker as a still?

Many upload forms recognise the PNG header, treat the file as a still picture and keep only the first frame. The same services play GIFs in full. Converting is the reliable fix; the alternative is a WebP, where supported.

Good to know: A GIF holds 256 colours per frame and no partial transparency, so soft edges become hard ones and gradients band a little. Reading the frames of an APNG needs a recent Chrome, Edge or Opera; elsewhere the first frame is written as a still and the row says so.

Put this tool on your website

Free for any blog, class page or help article. Paste one snippet and your visitors can use it right on your page.