Colour Palette Extractor
Get the dominant colours out of an animation or an image, ordered by how much of the picture each one takes up. Click a swatch to copy its hex, or download the palette as a GPL or PAL file that Aseprite and Krita import directly — or as CSS custom properties. Transparent pixels are left out, so a sticker's palette is its colours and not the colour of nothing.
The quantiser is the same one the GIF export uses, so this is exactly the palette an exported GIF would get. Entries that no pixel falls into are dropped, so you may get fewer.
How to extract a colour palette
- 1
Open your file
A GIF, an animated WebP, a PNG, a JPG — anything your browser can read as an image. Animations are sampled across the whole thing, not just the start.
- 2
Choose how many colours
Eight for a quick scheme, sixteen or thirty-two for pixel art, sixty-four when you want the detail. Entries no pixel falls into are dropped, so you may get fewer than you asked for.
- 3
Read the result
Each swatch shows its hex code and what share of the image it covers, biggest first. Clicking one copies the code.
- 4
Take it with you
Download as GPL for Aseprite and Krita, PAL for older tools, CSS to paste into a stylesheet, JSON if you want the percentages, or a plain list of hex codes.
What makes it different
Transparency does not count as a colour
Pixels that are see-through are skipped before anything is measured. Most extractors count them, which is why a sticker with a transparent background comes out with black or grey as its dominant colour — the colour of nothing.
It is the palette your GIF would get
The quantiser is the same one this site's GIF export uses. So the palette you see is not an approximation of the animation's colours: it is exactly the set a GIF exported from here would be reduced to.
Ordered by how much of the picture each colour covers
An unordered palette is a list of colours. Sorted by share, with a percentage on each swatch, it tells you which ones actually carry the image and which are trim.
Formats that pixel-art tools already read
GPL and PAL import straight into Aseprite and Krita, no conversion step. That is the point: the palette should land in the program you are drawing in.
Animations are sampled all the way through
Frames are taken spread across the animation rather than from the beginning, so one that opens on a fade to black does not come out as a palette of blacks.
Supported formats
In: animated GIF, animated WebP, APNG and animated AVIF, plus any still image your browser can decode — PNG, JPG, WebP, AVIF and usually SVG and BMP. Out: GPL (GIMP, Aseprite, Krita), JASC-PAL, CSS custom properties, JSON with the percentages, or a plain hex list.
Frequently asked questions
- Why did I get fewer colours than I asked for?
- Because the quantiser always returns a full palette, and entries that no pixel actually falls into are dropped. An image with six flat colours has six, whatever number you ask for.
- Which format do I want?
- GPL if you are going to draw in Aseprite or Krita: both import it directly. CSS if it is for a website. JSON if you want to keep the percentages, which no palette format carries. The hex list if you just need to paste the codes somewhere.
- Does it look at every pixel?
- No, and it does not need to. Pixels are sampled — roughly a hundred thousand of them, spread over up to twenty-four frames. A 44-frame animation is seven million pixels; the palette comes out the same and the result is instant.
- Why is the dominant colour not the one I expected?
- Dominance is measured by area, not by how much a colour draws the eye. A big flat background wins over a small bright subject even though your eye goes to the subject. The percentages let you see that.
- Is my file uploaded?
- No. It is decoded and measured by your own browser, and nothing is sent anywhere.
- Can I use this on a photograph?
- Yes, and it works well for building a scheme from one. Photographs have thousands of distinct colours, so the number you pick matters more: eight gives you a mood, thirty-two gives you the detail.