How to use the Pixel Art Converter
- Drop an image onto the box, click to browse, or paste. A sample sunset is loaded so you can try settings first; your own file is processed in the browser and never uploaded.
- Set the size. Under Size by, choose Width in pixels to say how many pixels wide the result should be, or Block size to say how many source pixels become one art pixel.
- Choose a Palette. Auto colors picks the best set of colors for your image (set how many with Colors). The presets lock you to a classic hardware palette, and Custom… accepts any list of HEX codes.
- Choose Dithering and fine-tune Contrast, Saturation, Dark outline and Show pixel grid until the preview looks right. Show original compares it with the source.
- Export. Download 1× PNG gives one file pixel per art pixel; Download upscaled PNG enlarges it by the factor you pick with crisp edges. Copy HEX list and Palette .gpl save the colors that were actually used.
Why the 1× file matters
Pixel art lives on a grid where every square is a deliberate decision. The 1× file is that grid at its true size — a 64 × 48 image is 64 × 48 pixels — and it is what game engines, sprite editors and tilemap tools expect. Import an upscaled copy into a game and every sprite is suddenly eight times too big, with 64 identical pixels per art pixel wasting memory.
For posting, the opposite applies: social sites shrink and recompress images, and a tiny file gets smeared. Upscale before you upload, and always by a whole number. At ×2, ×4 or ×8 every art pixel becomes a clean square of 4, 16 or 64 screen pixels. At 150%, each art pixel needs 1.5 screen pixels, which is impossible, so the scaler alternates columns two and one pixel wide and the grid looks wobbly.
A worked example: Instagram displays posts up to 1080 pixels wide. A 64-pixel sprite fits 1080 ÷ 64 = 16.875 times, so the largest clean scale is ×16, giving 1024 px. A 48-pixel sprite fits 22.5 times; the nearest factor in the menu, ×20, gives 960 px. Pick the factor from the menu next to the download button; the upscaled size box shows the result before you save.
The palettes built into the converter
| Palette | Colors | What it is |
|---|---|---|
| PICO-8 | 16 | The fixed palette of the PICO-8 fantasy console |
| Game Boy green | 4 | #0F380F #306230 #8BAC0F #9BBC0F — the greenish shades widely used to imitate the original 1989 Game Boy screen |
| Game Boy (NSO) | 4 | #214231 #426B29 #6C9421 #8CAD28 — the shades of the Game Boy app on Nintendo Switch Online |
| CGA full | 16 | IBM’s Color Graphics Adapter set, including the famous brown #AA5500 |
| CGA mode 4, palette 1 | 4 | Black, cyan #55FFFF, magenta #FF55FF and white — the four-color 320 × 200 mode many early PC games used |
| Grayscale 4 / 8 | 4 / 8 | Evenly spaced grays, for example #000000 #555555 #AAAAAA #FFFFFF |
| 1-bit | 2 | Pure black and white |
The PICO-8 colors are #000000 #1D2B53 #7E2553 #008751 #AB5236 #5F574F #C2C3C7 #FFF1E8 #FF004D #FFA300 #FFEC27 #00E436 #29ADFF #83769C #FF77A8 #FFCCAA. The original Game Boy screen never had official RGB values — it was a green-tinted LCD — so the green palette is a convention rather than a spec.
The Game Boy, grayscale and 1-bit palettes are treated as tonal ramps: the converter matches by brightness, so your darkest shadows land on the darkest shade and the brightest highlights on the lightest one, whatever the original colors were. The other palettes match each pixel to the visually closest color using the CIELAB color space, which judges distance the way the eye does rather than by raw RGB numbers.
Floyd–Steinberg or Bayer dithering
Dithering mixes two palette colors in a pattern to suggest a third one that the palette lacks. The two methods do it very differently.
Floyd–Steinberg is error diffusion. After a pixel is rounded to the nearest palette color, the rounding error is passed on to its neighbors: 7/16 to the pixel on the right, 3/16 below-left, 5/16 directly below and 1/16 below-right. The converter scans alternate rows in opposite directions to avoid diagonal streaks. The result looks organic and handles gradients and photos well, but it is noisy, and in animation the speckles crawl from frame to frame.
Bayer 4 × 4 is ordered dithering. Each pixel gets a fixed threshold from this matrix before rounding:
0 8 2 10
12 4 14 6
3 11 1 9
15 7 13 5
The values are spread so that neighboring cells are as different as possible, which produces the regular cross-hatch texture of 1990s games. Because the pattern never moves, Bayer dithering is the better choice for sprites that animate or tiles that repeat. Dither strength scales the effect for both methods.
Tips from practice
Start smaller than you think. Classic sprites are 16 × 16 or 32 × 32, and full scenes rarely need more than 128 pixels across. If the result looks like a blurry photo, halve the width — pixel art reads through bold shapes, not detail.
Push contrast and saturation first. Averaging blocks of pixels dulls colors and flattens values. The default boost of +10 contrast and +20 saturation compensates; raise it further for hazy photos.
Outline sprites on transparent backgrounds. With a transparent PNG, Dark outline draws a one-pixel border just outside the shape in the darkest palette color, the classic sprite look. On photos it darkens strong edges instead, which is subtler.
Treat the result as a first draft. Converters cannot know which pixel is the eye of a character. Load the 1× PNG into Aseprite, Pixelorama or Piskel and clean up stray pixels by hand; import the .gpl file so you paint with exactly the same colors. The Pixel Grid & Sprite Sheet Generator helps lay out the frames afterwards.
Build a palette from your own art. If you have a painting whose colors you love, run it through the Image to Palette Extractor, paste the HEX codes into Custom…, and convert other images into the same color world.