Chris Collins

Tools · graphics

Pixel and bitmap editor

Draw sprites, tiles, and screens with real hardware palettes — Amiga, C64, NES, Game Boy, ZX Spectrum, Atari 2600, PICO-8, and 1-bit OLEDs — then export C arrays, bitplanes, CHR tiles, sprite data, PNG, or animated GIF.

Added

How to use it

Pick a preset first: it sets the canvas size, the palette, the pixel shape, and the best export for that hardware. Everything is paletted — you paint with palette indices — and colour 0 is the background (transparent for sprite presets).

  • Drawing: pencil (B), eraser (E), line (L), rectangle ®, ellipse (O), flood fill (G), colour picker (I), and select (M). Left button paints the primary colour, right button the secondary; X swaps them and [ ] step through the palette. Fill shapes makes rectangles and ellipses solid; Mirror draws symmetrically.

  • Selection: drag to select, drag inside to move, arrow keys nudge (Shift for 8 px), ⌘/Ctrl C, X, V copy, cut, and paste, Delete clears, Esc drops it. Flip (⇧H, ⇧V) and rotate (⇧R) work on the selection, or on the whole frame when nothing is selected.

  • View: + and − (or ⌘/Ctrl + wheel) zoom, 0 fits, # toggles the pixel grid; the tile grid shows 8×8, 16×16, or C64 sprite boundaries. Pixel aspect shows C64 multicolour and Amiga hires pixels at their true shape.

  • Animation: add, duplicate, reorder, and delete frames; , and . step between them; Onion skin shows the previous frame; the preview plays at the chosen fps, or tiles the current frame 3×3 to check that a tile repeats seamlessly.

  • Import: bring in a PNG or JPG — it is quantised to the current palette with optional Floyd–Steinberg or ordered dithering — or paste a C array / XBM / hex bytes to turn a 1-bit bitmap back into pixels.

  • Palettes: fixed hardware palettes; NES and Atari palettes chosen from the console’s master palette; Amiga colours with 4-bit R, G, B sliders and 1–5 bitplanes; custom palettes with import and export (GIMP .gpl, JASC .pal, hex).

  • Your work is saved in this browser automatically; Save downloads a project file you can Open later.

Export Layout Suits

C array — 1bpp rows

1 bit per pixel, rows padded to bytes, MSB = leftmost

Adafruit GFX drawBitmap, most mono LCD libraries

XBM

1 bit per pixel, LSB = leftmost

U8g2 drawXBM, X11

C array — SSD1306 pages

8-row pages, one byte per column, bit 0 = top

SSD1306 / SH1106 OLEDs written directly, Nokia 5110

C array — RGB565

16 bits per pixel, optional byte swap

TFT_eSPI pushImage, LVGL, ILI9341 / ST7789 TFTs

C array — indices

One byte per pixel plus the palette

Your own renderer, PICO-8 style engines

Amiga bitplanes

16-bit words per plane, interleaved or not

Blitter bobs and screens (Devpac / vasm dc.w, or C)

Amiga hardware sprite

POS, CTL, then DATA/DATB per line, then 0,0

16-pixel 3-colour hardware sprites (chip RAM)

Amiga palette

COLORxx moves for a copper list

Setting the palette from the copper

C64 sprites

63 bytes + padding per sprite; multicolour uses bit pairs

VIC-II sprites: BASIC DATA, ACME, KickAssembler

NES CHR

16 bytes per 8×8 tile: plane 0 then plane 1

Pattern tables (.chr download)

Game Boy 2bpp

16 bytes per tile: low byte then high byte per row

RGBDS db, GBDK

ZX Spectrum

Bitmap bytes (row-major or screen order) + attributes

Spectrum screens and sprites; clashes are flagged

Atari 2600

One byte per line per 8-pixel player, colour table

DASM .byte %… kernels (bottom-to-top by default)

PNG, sprite sheet, GIF

Scaled, with the pixel aspect applied

Anything else

The Atari 2600 and VGA palettes are close approximations; every other palette is the standard published one.

⛶ Full screen (or F) gives the drawing the whole screen — the browser’s full screen where it is allowed, otherwise a full-window layer (iPhone) — and Fit zooms to it; ◫ Panels hides the palette column and the export panel. Escape leaves.

Sharing

Share link copies a URL that opens this tool exactly as configured. The whole document — size, palette, every frame — and the export format, packed into ?s=. Sprites and tiles make short links.

Runs entirely in your browser; nothing you type leaves this page.