Free 8-bit image converter
8-bit image converter using the machines’ own palettes
Six fixed palettes, none of them invented here: PICO-8’s sixteen, the IBM CGA sixteen, the Game Boy’s four shades in green and in gray, the Commodore 64’s sixteen, and an even four-step grayscale. Each one is listed in full with its index, its hex and the source it was taken from, and the two that came off machines which never emitted RGB are labeled as decodes rather than as colors. No charge, no account, and the picture is read on the machine you are reading this on.
- 100% free
- No signup
- 6 machine palettes
- Sources named per palette
- Native widths built in
Press Ctrl+V anywhere on the page to drop in a screenshot you have already copied — no need to click the field first.
PICO-8 drew 128 × 128 in the console's only screen mode. .
Ordered is the default because it is what the era actually used: a fixed threshold matrix costs no memory, and eight-bit machines had none to spare for an error buffer. Adds a fixed crosshatch instead of scattering error. Regular and predictable, which reads as deliberate texture rather than noise.
PICO-8 — all 16
Specified: these numbers are the palette.
PICO-8 manual, standard 16-color palette
- Black0 · #000000
- Dark blue1 · #1d2b53
- Dark purple2 · #7e2553
- Dark green3 · #008751
- Brown4 · #ab5236
- Dark gray5 · #5f574f
- Light gray6 · #c2c3c7
- White7 · #fff1e8
- Red8 · #ff004d
- Orange9 · #ffa300
- Yellow10 · #ffec27
- Green11 · #00e436
- Blue12 · #29adff
- Lavender13 · #83769c
- Pink14 · #ff77a8
- Light peach15 · #ffccaa
How to render a picture through a machine's palette
Pick the machine before anything else — it decides more about the result than the width and the dithering together.
Pick the machine before you pick anything else
Six palettes are offered and the choice changes the result more than any other control does. Each card shows how many colors the set holds and whether the numbers are specified or decoded, and selecting one lists the whole palette underneath with the index, the name and the hex of every entry. The index is not decoration: on all of these machines a color is addressed by its position in the palette, which is why "color 12" means something concrete on a PICO-8 and nothing at all on a photograph.
Set the width to something the machine would recognize
The slider runs 32 to 256 pixels across and each palette carries the width its machine actually drew at — 128 for PICO-8, 160 by 144 for a Game Boy, 160 by 200 for a C64 in multicolor bitmap. Matching it is one click. It is not compulsory and a wider grid is often what you want for a poster, but a picture at the machine's own width is the honest comparison: it is the amount of detail the hardware had to work with.
Leave the dithering ordered unless it fights the picture
Ordered Bayer is the default here and off is the default on the rest of the site, because a fixed threshold matrix is what these machines used — error diffusion needs a buffer of the row below, and memory was the thing they had least of. The regular crosshatch it produces is period-correct rather than a compromise. Switch to Floyd-Steinberg when a smooth gradient is banding badly, or to none when the source is already flat-colored artwork with edges you want kept hard.
Technical specifications
| Palettes | 6 fixed sets, 60 colors in total: PICO-8 (16), IBM CGA (16), Game Boy DMG (4), Game Boy as four grays (4), Commodore 64 (16) and an even 4-step grayscale |
|---|---|
| How exact each one is | 4 specified as sRGB by their own documentation, 2 decoded from hardware that never emitted RGB. Every card says which, and the source line names whose numbers they are |
| Native widths offered | PICO-8 128×128; Game Boy 160×144; CGA 160×100 in the text-cell mode where all sixteen coexist; C64 160×200 in multicolor bitmap |
| Grid | 32 to 256 pixels across; the row count follows the proportions of the file |
| Dithering | Ordered Bayer 4×4 by default — the period-correct choice, since error diffusion needs a row buffer these machines could not spare. Floyd–Steinberg, Atkinson and none are also available |
| Hardware constraints applied | None. Any palette color goes in any pixel, which the C64 and CGA never permitted — stated under every result rather than left for you to discover |
| Files it hands back | PNG at 6 px per source pixel at most, plus the usage as CSV carrying the palette index, the color name, the hex, the pixel count and the share |
| Runs on a server | Nothing. The picture is decoded and matched inside this tab |
Frequently asked questions
Are these the machines' real colors?
Two of the six are, and the page labels which. PICO-8 and CGA are marked as specified: PICO-8's manual gives its sixteen colors as sRGB values, and CGA drove four TTL lines with sixteen defined combinations, so in both cases the numbers are the definition and nothing can be more accurate. The Game Boy and the C64 are marked as decodes, because neither machine emitted RGB at all — a DMG is a reflective green panel with no backlight, and a C64 put out an analogue composite signal that has to be measured before it becomes numbers. Every table for those two is somebody's reading, and the readings visibly disagree.
Why is there no NES palette here?
For the same reason the C64 one is flagged: the NES generated a composite signal rather than RGB, so an NES palette is always a decode — and unlike the C64 there is no single decode with enough standing to publish under the machine's own name. Emulators ship visibly different greens and it is not obvious which is closer to a television from 1985. Rather than pick one and print it as if it were a specification, this site ships none. The C64 entry is here because Pepto's VIC-II decode is widely reproduced and can be named as one measurement among several, which is a claim that can be checked.
Could I actually display this on the hardware?
Almost certainly not, and the page says so under the chart rather than letting you find out. This converter assigns any palette color to any pixel, which is a freedom the C64 and CGA never had: a C64 in multicolor bitmap allows three colors per 4x8 cell plus one background shared by the entire screen, and in high resolution two per 8x8 cell. Color clash in C64 artwork is that constraint, not a style. CGA is stranger still — its famous 320x200 graphics mode gave four colors from a fixed pair of palettes, and all sixteen you see here appear together only in text and in the 160x100 mode that draws with half-block characters.
Why does the Game Boy palette have only four entries?
Because the DMG stored two bits per pixel and had nothing to spend a third on. Four shades is the whole vocabulary, which is why Game Boy art leans so hard on outline and pattern — with three usable tones plus a background there is no room to model a form with light, so shape has to do the work. The grayscale variant here is the same four levels without the green, which is how later hardware and most emulators present it, and it is marked as specified because evenly spaced grays are a convention rather than a claim about a physical panel.
My photograph came out as three colors. Is that broken?
No, that is a low-contrast source meeting a small fixed palette. Nearest-color matching moves every cell to whichever of the sixteen is closest, and a photograph shot in flat light occupies a narrow band of the color space, so most of it lands on the same two or three entries. The usage table tells you exactly this: if three rows hold nearly all of the pixels, the picture has nothing in it for the other thirteen to describe. Raise the contrast of the source before you bring it here, or pick a picture with a strong subject and a plain background.
What does the color usage list give me that the image does not?
The count of pixels on each palette index, which is what you need if the picture is going anywhere but a screen. It is how you find out that the whole result rests on four of the sixteen, which matters if you are about to reproduce it with something you have to buy — and the CSV carries the index, the name, the hex, the pixel count and the share so it can be sorted or checked off. It is also the quickest way to compare two palettes on the same picture without looking at either.
About why these sixteen colors and not some other sixteen
Every palette on this page is a record of what a particular piece of hardware could afford. CGA’s sixteen are not a design: they are four TTL lines — red, green, blue and an intensity bit — giving sixteen combinations, which is why the set is so symmetrical and why it has two of nearly everything. The one asymmetry is the famous one. Color 6 should have been a dark yellow by the bit pattern, and IBM wired the card to pull its green line down instead, producing brown; without that single deviation the palette has no useful earth tone at all and every 1980s PC game would have had a different color scheme. The Game Boy’s four shades are the same kind of artefact from the other end: two bits per pixel was what the memory allowed, and an entire visual style — heavy outlines, pattern instead of modelling — follows from having three usable tones and no fourth to shade with.
The difference between a specified palette and a decoded one is the thing this page exists to keep straight, and it is exactly the same problem as embroidery floss. A PICO-8 color is a number in a manual, so the hex here is the color and there is nothing to be uncertain about. A C64 color is not a number anywhere: the VIC-II produced an analogue composite signal, and turning that into RGB means measuring a chip, choosing a decoder model and picking values for things the hardware left to the television. Several people have done it and their results differ visibly — the palette here is Philip Timmermann’s, which is the most reproduced, presented as one measurement rather than as the machine’s colors. The Game Boy is worse still, because a DMG panel was reflective and unlit, so its apparent color changed with the lamp in the room. What the site does about that is the same everywhere: name whose numbers these are and say which kind they are, the way the DMC color chart does for a thread nobody publishes screen values for.
What this page deliberately does not do is enforce the hardware. A real C64 could not put any of these sixteen anywhere it liked — multicolor bitmap allows three per 4×8 cell plus a screen-wide background, and high resolution allows two per 8×8 — so an image converted here is a picture in the C64’s colors, not a picture a C64 could have displayed. Building the attribute constraint in would make this a C64 art tool rather than a converter, which is a different and much narrower thing, so the constraint is printed under the result instead and the choice is left with you. If you want the palette to be yours rather than a machine’s, that is the palette-building converter; if you want fewer tones without a machine attached to them, posterizing flattens each channel to a set number of levels instead of snapping to a list; and if you simply want the picture on a grid with good defaults, that is the front page.
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 picture is decoded
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 palettes themselves ship inside the page as plain data, so no request is made when you switch machines either — the whole set of 6 arrives with the HTML and the page works through them with nothing to fetch.