Free pixel art converter
A pixel art converter that lets you choose the colors
This converter takes the palette from you rather than handing you one. Seed the list, click colors out of the picture itself, type hex values, switch entries out without losing them, pin the ones that must survive and cap the total — then read how many cells each color actually won and which entries the picture never reached for. It costs nothing, asks for no account, and the image is decoded in this tab. The conversion behind it is the same one the rest of the site runs, so a list settled here gives the same result on any chart page.
- 100% free
- No signup
- Up to 64 colors
- Sample from the image
- Cell count per color
Press Ctrl+V anywhere on the page to drop in an image from your clipboard — no need to click the field first.
16 to 200. Rows come from the shape of the file, so this is the only dimension you set.
Every cell takes its own nearest color. Flat areas stay flat and the color count stays low — the right choice for anything worked by hand.
The list — 16 entries, 16 in the match
Up to 64 entries. Every edit re-runs the conversion, so the cell counts beside each color are always for the list as it stands now.
0 lifts the cap
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
- won no cells
How to build a palette and find out what it cost
Start from a list, add what the picture brought, then read the spend — that last panel is the one nobody else shows you.
Start from a list, not from nothing
Four seeds are offered and all four are quoted rather than invented: PICO-8's sixteen, six evenly spaced grays, the twelve lowest Perler codes P01 to P12, and a two-entry ink-and-paper pair. Take whichever is closest to the result you want and edit from there — an empty list is legal, but building sixteen colors from a blank field takes longer than deleting four from a seed.
Add the colors the picture already contains
Click anywhere in the source thumbnail and that exact pixel joins the list. This is the fastest route to a palette that holds together, because colors sampled from one image were photographed or drawn under one light and therefore already agree about their shadows. Anything you cannot reach with a pointer — a color you want but the image does not have — goes in as a hex, three digits or six, with or without the hash.
Read the spend, then cut
Beside every entry is the number of cells it won and its share. Entries that won nothing are the ones to argue with: they are being carried and never seen. Set a cap when you want the list smaller than that argument would make it, pin the entries that have to survive whatever their count, and the picture is converted a second time so the freed cells find their own next-nearest color rather than being handed to a neighbor in the list.
Technical specifications
| Palette size | 1 to 64 entries, each an sRGB hex you set, sample or edit in place |
|---|---|
| Seeds | 4, all quoted from the palette modules rather than composed here: PICO-8 (16), six evenly spaced grays, Perler P01–P12, and a two-entry ink-and-paper pair |
| Adding a color | Click the source thumbnail to take the pixel under the pointer, or type 3 or 6 hex digits with or without the hash. Duplicates of a hex already on the list are not added twice |
| Per-entry controls | Off (excluded from the match but kept in the list), Keep (exempt from the cap), and remove. Editing a hex re-runs the conversion on the next keystroke |
| The cap | Ranks entries by the cells they won in a first full conversion, keeps the pinned ones plus the top of the rest, then converts the whole image again against the survivors |
| Grid | 16 to 200 cells across, with the depth set by the picture's own proportions |
| Exports | Flat PNG at 10 px a cell, marked chart PNG at 24 px, and the spend as CSV — mark, hex, cells and share for every entry that won one |
| Runs on a server | Nothing. The image is decoded and matched in this tab and never sent anywhere |
Frequently asked questions
Why did one of my colors end up with zero cells?
Because another entry on your list sits between it and everything in the picture. Nearest-color matching is a competition and only one entry can win a cell, so a color that is close to a color you already have will never be the closest to anything — this is most common when two entries were sampled a few pixels apart from the same gradient. Delete it, or move it far enough away that it owns a region of its own. A zero is a fact about your list, not about the image.
What does the cap actually drop?
The entries that won the fewest cells in a first full conversion, skipping any you pinned. That ranking matters: dropping by position in the list would delete whichever color you happened to add last, which has nothing to do with whether the picture needs it. After the drop the whole image is converted again against what survived, so the cells that belonged to a removed color are re-matched properly. That second pass is why the counts move when a cap is applied rather than simply redistributing.
What does pinning a color do?
It exempts that entry from the cap, so it stays in the match however few cells it wins. It is for the colors that carry meaning rather than area — the single red of a logo, the highlight in an eye, the one warm tone in an otherwise cold picture. Those are exactly the entries a count-based cap removes first, because being small is the whole point of them. Pinning does not force cells onto a color; it only stops the cap taking it away.
Can I hold two colors that are almost identical?
Yes, and the list will tell you it was pointless. Two entries a few units apart in sRGB split whatever region they both sit near, so you get two rows in the spend table with roughly half the cells each and a picture that looks the same as it did with one. The matching runs in Oklab, which is close enough to perceptual that two entries you cannot tell apart on screen will also be near-indistinguishable to the search — if you want both to survive, move one until you can see the difference in the swatches.
How many colors should a hand-built palette have?
Between eight and twenty-four for most artwork, and the number matters far less than the spacing. A well-spread twelve beats a badly spread thirty-two, because the thirty-two will have spent half its entries on one crowded part of the range and left the rest of the picture with nothing near it. The spend column is the check: if your top three entries hold more than about 70% of the cells between them, the list is unbalanced rather than too short.
Does the hex I type come back out of the PNG unchanged?
Yes. Cells are filled with the exact value on the list, not with a blend or an approximation of it, so a pixel in the exported PNG samples back to the hex you typed. That is not true of the averaging step before it — the mean color of a cell is computed in linear light and can be any value at all — but that mean is only ever used to decide which of your entries wins. What is painted is always one of yours.
Where do I go if I want a palette chosen for me?
The front page, which does the same conversion against eight fixed palettes and needs no decisions from you. This page exists for the opposite case: you already know what colors the result has to be, either because you are matching an existing piece of art or because you own a specific set of physical materials and cannot buy more of them.
About palettes as lists you argue with
A palette is a budget. Every entry you add is a color that has to be bought, mixed, stocked or drawn from, and the useful question is never “is this color nice” but “what does the picture do with it once it is on the list”. Almost no converter answers that. They take a color count, run a clustering algorithm, and hand back a result with no account of how the colors were spent — which is fine when the palette is disposable and useless the moment it is not. Somebody matching an existing sprite sheet, or working from the beads and floss already in a drawer, does not want a palette generated; they want the one they have, evaluated. That is the whole difference between this page and the palette generator, which pulls a list out of a picture, and reducing colors in an image, which decides for you how many there should be.
Two failure modes show up in the spend column within a minute of using it, and both are invisible in every tool that only returns a picture. The first is the dead entry: a color that never wins a cell because a neighbor on the list is always closer. It costs nothing on screen and everything in the physical world, where it is a bag of beads ordered and never opened. The second is the crowded end: three or four entries fighting over the same narrow band while a whole third of the picture has nothing near it, which shows up as three rows with a few hundred cells each and one row with forty percent. Neither is a bug in the matching. Both are the list being wrong in a way that a side-by-side preview will not show you, because the preview looks fine — it is the invoice that is wrong.
The cap is the page’s answer to the third failure, which is having too many colors rather than the wrong ones. It ranks entries by the cells they won and drops the tail, and then — this is the part that matters — converts the picture a second time against what is left. A cap implemented by simply deleting rows would reassign every orphaned cell to whichever color happened to be nearby in the list, which is not the same thing as its next-nearest color and produces visible blotches where the dropped color used to live. Pinning exists because the ranking is by area and some colors earn their place by importance instead: the eye highlight, the single red. If you would rather work the other way round, taking a fixed set of physical colors and seeing what a picture makes of them, that is the Perler bead page and the 8-bit converter, where the list is not yours to edit at all — or the front page, which offers eight of them and asks you to decide nothing.
Product and company names shown here are the trademarks of their respective owners. Photo2Pattern is an independent tool and is not affiliated with, sponsored by or endorsed by any of them.
Where the image and the palette live
Your picture is opened by JavaScript running in the tab you are reading this in. It is never uploaded, never sent to a server and never stored anywhere — there is no upload step to undo, because there is no upload. Close the tab and nothing of it remains.
The palette is state in this tab and nothing more — it is not saved, not synced and not attached to anything, so closing the page loses the list along with the picture. Copy the hex values out, or take the CSV, if you want the list to outlive the session.