/Tutorials Web demo All tutorials ← Site

How to convert an image into pixel art with a locked palette

Most “image to pixel art” converters do two things badly: they downscale by throwing pixels away, and they leave you with 4,000 colours pretending to be pixel art. Here is how to get a clean result with a palette you actually chose.

Phluxel · Windows · palette locking is in the free edition

The steps

Step 1

Import the image

File ▸ Import Image, or just drag the file onto the window. PNG, JPG, WEBP, BMP and animated GIF all work. The import dialog previews the result live, so you are not guessing.

Step 2

Pick the target size

Choose one of the presets (16, 32, 64, 128) or type a size. The aspect ratio is kept for you, and the import only ever scales down — upscaling is a different job and belongs in Field ▸ Resize.

Step 3

Turn on Smooth downscale

Without it, a 2000 px photo reduced to 64 px is nearest-neighbour sampling: it grabs one pixel out of every thousand and throws the rest away, which is why naive downscales look noisy and lose thin lines. Smooth downscale averages each source block instead, so detail survives as tone.

Step 4

Lock it to a palette

Tick Lock to palette and either pick a colour count (8, 16, 32, 64) or load a palette file. Phluxel reads Lospec .hex directly, plus GIMP .gpl and JASC/Paint.NET .pal, so you can point it at any palette from the Lospec palette list and the image snaps to it.

Step 5

Clean up the edges

If the source had a transparent background, averaging leaves a halo of half-transparent pixels around the subject. Hard edges forces every pixel to fully opaque or fully transparent, which is what you want for a sprite.

Step 6

Export, or keep going

Export straight back out as a PNG, or leave it on the canvas and animate it — the effect rules work on imported art exactly the same as on art you painted by hand.

The order matters

Phluxel applies these in a fixed order, and it is worth knowing why:

OrderStageWhy here
1ResampleAverage the source down to the target grid
2Hard edgesBefore quantising, so half-transparent edge pixels do not eat slots in the palette budget
3QuantiseMap what is left onto the chosen palette
Animations use one shared palette. If you import an animated GIF, every frame is quantised against the same palette rather than getting its own. Per-frame palettes are why converted GIFs so often shimmer.

Already imported it at full size?

Use Field ▸ Pixelate. It runs the same pipeline on a field that is already open, with the same options — target size, smooth downscale, palette lock, hard edges. There is also a Keep current size mode if you only want the colour reduction and not the resize, which is handy for tidying up a scene that a simulation has filled with thousands of in-between shades.

Per-cell data cannot be averaged. If you have painted rules or tags onto cells, shrinking the field maps them by nearest neighbour rather than blending them, and some are necessarily dropped. Phluxel warns you when that is about to happen.

Where to get palettes

The Lospec palette list is the obvious place — thousands of palettes, all downloadable as .hex, which Phluxel reads as-is. Once a palette is loaded it stays locked across every export in that session, including animations and sprite sheets, so a whole set of assets comes out consistent.

Try it without installing anything

Phluxel runs in the browser as a demo, and the free desktop edition has every feature with a watermark on exports.

Open the browser demo Download free (Windows) Wishlist on Steam

More Phluxel tutorials

How to animate rain over pixel artPaint it once, then one rule animates it. How to animate falling snow in pixel artPaint it once, then one rule animates it. How to animate pixel art fire from a still drawingPaint it once, then one rule animates it.