Premium apps Part of Flipline

Retro Dither & Machine Palette Converter

Dither images to 1-bit, CGA, EGA, C64-, NES- or handheld-style palettes.

More options

Try an example: Handheld LCD greens with a 4 × 4 Bayer pattern · C64-style multicolour cells · 1-bit Atkinson at 160 px

More about this tool

How it works

Resample a photo to a machine-style resolution, then quantise it with ordered (Bayer, blue noise) or error-diffusion dithering (Floyd–Steinberg, Atkinson, Jarvis, Stucki, Burkes, Sierra). Optional attribute cells imitate C64 and NES colour limits. Download a crisp PNG and a reusable recipe.

  • Decode, auto-orient and convert to sRGB (4 MB, 2 MP). Area-resample to the working grid in linear light; machine resolutions crop, pad (black) or stretch to their logical size. Transparent pixels are composited over black.
  • Brightness, contrast, gamma and saturation use the Retro Lab development step. Palettes: CGA/EGA from RGBI and rgbRGB signal bits, the NES-style set decoded from the 2C02 composite levels on NESdev, C64 from Pepto’s VIC-II measurements; handheld greens are an authored interpretation.
  • Ordered dithering adds a threshold bias (Bayer 2/4/8, or a 32 × 32 void-and-cluster map) scaled by the palette’s mean nearest-colour spacing. Error diffusion uses the published kernels, optionally serpentine; Atkinson drops a quarter of the error. Matching uses sRGB, redmean-weighted RGB or linear-light distance.
  • Attribute cells pick colours per cell greedily (largest error reduction first); NES and C64 multicolour share the most frequent colour as background. Wide-pixel modes double pixels horizontally. Integer output scaling repeats pixels.

Machine palettes are colour values only. The cell modes approximate colour limits; they do not produce files for real hardware.

Sources

Part of Flipline

  • Flipline Drawing, storyboards & animation

    A few drawings. A little life. Make a flipbook in your browser.

    Open Flipline

How to use the Retro Dither & Machine Palette Converter

Dither a photo to 1-bit, CGA, EGA, C64-, NES- or handheld-style palettes, compare ordered and error-diffusion patterns and read the colour usage.

What it is for

This tool turns an ordinary photo into the kind of picture an old computer or handheld could have shown. It shrinks the image to a small working grid, then maps every pixel to a limited palette and uses dithering to fake the missing shades. You get a crisp PNG, a table of which palette colours were used and a recipe file that Flipline's Retro Lab can open again.

It is useful for game jams, posters, album art, slides that need a retro look, and for learning how different dithering algorithms behave. It is not a converter for real hardware: the result is an ordinary PNG, not a C64 or NES file, and the machine palettes are colour values only.

Worked example

I uploaded a 1600 × 1068 px JPEG of an alpine lake and chose Machine resolution "NES-style 256 × 240", Retro palette "NES-style composite colours", Attribute cells "16 × 16 areas, shared background plus three", Dithering method "Ordered Bayer 4 × 4" and Output scale 2.

The tool answered "512 × 480 px, 13 of 54 palette colours used." The image was cropped to the 256 × 240 grid (the default fit is a centred crop) and then doubled. The usage table started with #4e4e4e (18,773 pixels) and #626262 (10,694 pixels): the dark grey mountains and the water. The sky came out as #6b9cff and #c4d7ff, and the forest as #1f4600. Only 13 of the 54 colours appear, because each 16 × 16 block may use the shared background plus three colours of its own.

For comparison, the same photo with "1-bit bitmap 512 × 342", the "1-bit black and white" palette and "Atkinson" gave 95,076 black and 80,028 white pixels. With a custom 320 px width, the CGA cyan/magenta palette, Floyd–Steinberg and "Weighted RGB (redmean)" matching, black dominated with 32,694 pixels, while magenta was used for only 4,449.

How to read the result

  • Download dithered PNG is the finished image at output size. Scaling repeats pixels exactly, so you can enlarge it without blur.
  • Palette usage counts pixels on the logical grid before scaling, sorted from most to least used. A palette colour that never appears is not listed.
  • Palette colours used / Palette size shows how much of the palette the image really needs. A low number with cells switched on is normal: the cells are the limit.
  • Download Retro FX recipe stores every setting, but no image. The Open this look in Retro Lab link opens the same settings in Flipline, where you can add a CRT or print effect.

Tips and common mistakes

  • Ordered patterns (Bayer, blue noise) stay still when you animate or edit the picture. Error diffusion (Floyd–Steinberg, Atkinson, Jarvis, Stucki, Burkes, Sierra) looks more natural but changes everywhere when one pixel changes.
  • Atkinson passes on only six eighths of the error, so highlights and shadows clip. That is the high-contrast look of early bitmap screens, not a bug.
  • If the image looks too bright or too dark with a dark palette, try Colour matching "Linear light". It keeps the physical brightness: a 50 % sRGB grey becomes about 22 % white dots instead of 50 %.
  • Lower Dither strength for flat, poster-like areas; 0 % gives plain nearest-colour mapping.
  • Raise Contrast before dithering small grids. Fine detail disappears first at 160 or 256 px.
  • Machine resolutions crop by default. Choose "Fit with padding" to keep the whole picture with black bars.

FAQ

Are these the exact colours of the original machines?

CGA and EGA colours are computed from their signal bits, the NES-style set is decoded from the documented composite levels and the C64 set uses Pepto's published measurements. Real screens varied, and the handheld greens are our own interpretation.

Why does the C64 multicolour result look wider?

C64 multicolour pixels are twice as wide as they are tall. The tool works on a 160 × 200 grid and doubles every pixel horizontally.

Can I use my own palette?

Yes. Choose "Custom palette" and paste up to 256 HEX colours, or a GIMP GPL or JASC-PAL file with up to 32 colours.

Does transparency survive?

No. Transparent areas are placed on black and the PNG is opaque. Use the Pixel Art Image Converter for sprites with transparency.

Guide last updated:

For scripts and AI agents

  • JSON API: POST https://fliplineditherlab.usefulweb.app/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://fliplineditherlab.usefulweb.app/mcp · tool name flipline_dither_lab
Example request
curl -s -X POST https://fliplineditherlab.usefulweb.app/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{…see OpenAPI examples…}'
Feedback · ideas & bug reports welcome