โ† All Tools

Convert Image to Pixel Art โ€” Free & Online

Turn photos, logos, and characters into retro pixel art with 6 classic palettes: GameBoy, PICO-8, NES, C64, Sweetie 16, AAP-64. Server-side Pillow processing + Floyd-Steinberg dithering โ€” significantly higher quality than Canvas-based tools.

GameBoy ยท PICO-8 ยท NESFloyd-Steinberg ditheringUp to 15 MB uploadPython Pillow backend
๐ŸŽจ

Drop an image here or

JPEG, PNG, WebP, BMP, GIF โ€” up to 15 MB

Why ImgTools?

๐ŸŽจ
6 retro palettes

GameBoy 4-color, PICO-8 16-color, NES 54-color, C64 16-color, Sweetie 16, AAP-64 โ€” covers chunky 8-bit to polished 16-bit style.

โšก
Fast processing

Python Pillow backend runs in ~100-500ms for 1-2MB images. Floyd-Steinberg dithering reproduces smooth gradients with limited palettes.

๐Ÿ”ฌ
High quality

Full pipeline: LANCZOS downsample โ†’ palette quantize โ†’ dithering โ†’ NEAREST upscale for crisp pixels. Far superior to plain Canvas JS.

What is pixel art and why use a server-side tool?

Pixel art is an art form made of visible square pixels, born from the hardware constraints of 1980s-90s game consoles โ€” Game Boy had only 4 shades of green, NES was limited to a 54-color hardware palette, the Commodore 64 had 16 colors. Today indie devs and graphic designers still love this style for its retro charm and minimalism โ€” every pixel placed deliberately, nothing wasted.

Many browser-side tools use Canvas API to pixelate images (basic downsample + nearest-neighbor upscale). Results are typically poor: colors blur because of naive quantization, gradients band heavily without dithering. ImgTools Pixel Art runs server-side with Python Pillow โ€” a full pipeline including LANCZOS downsample to preserve detail, quantization against a fixed palette (or K-means auto), Floyd-Steinberg dithering to distribute quantization error across neighboring pixels, then NEAREST upscale for crisp output. Results rival Aseprite or Pyxel Edit exports.

Rich palette presets: 4-color Game Boy for minimalist icons, 16-color PICO-8 (the most popular indie game palette), 54-color NES hardware palette for authentic Famicom-era recreations, 16-color Commodore 64 for ultra-retro feel, 16-color modern Sweetie 16, and 64-color AAP-64 for more complex art. You can also pick Auto to let the tool extract an optimal 32-color palette from your image using median-cut.

  • โœ“6 retro palette presets: GameBoy (4 greens), PICO-8 (16 indie standard), NES (54 hardware), C64 (16 Commodore), Sweetie 16 (modern), AAP-64 (artist-friendly)
  • โœ“Auto mode: extracts an optimal 32-color palette from your image via median-cut
  • โœ“2026 Floyd-Steinberg dithering โ€” reproduce gradients and photos with limited palettes without harsh banding
  • โœ“Custom grid size 8-256 pixels (longest edge): 32 for chunky 8-bit, 64 medium, 128 detailed
  • โœ“Scale ร—1 to ร—8: upscale via NEAREST to preserve crisp pixel edges, ready for display or print
  • โœ“Backend runs Pillow + numpy โ€” faster than Canvas JS and significantly better results
  • โœ“Supports JPEG, PNG, WebP, BMP, GIF โ€” up to 15 MB per image
  • โœ“Preserves PNG alpha channel โ€” transparent pixel art works for game asset overlays

How to use

  1. 1

    Drop or pick a JPEG, PNG, WebP, BMP or GIF image (up to 15 MB).

  2. 2

    Pick a retro palette: GameBoy, PICO-8, NES, C64, Sweetie 16, AAP-64 โ€” or Auto for 32-color median-cut.

  3. 3

    Adjust grid size (32-256 px) and scale (ร—1 to ร—8) for the retro look you want.

  4. 4

    Enable Floyd-Steinberg dithering to preserve gradients with few colors.

  5. 5

    Click Create Pixel Art โ€” server processes and streams back a PNG for preview/download.

When to use Pixel Art Converter?

Indie game dev

Turn concept art into pixel sprites for Unity/Godot/Phaser. PICO-8 or AAP-64 palettes suit indie 2D games best.

Discord/Twitch avatars

Chunky 64ร—64 retro avatars for Discord themed servers, Twitch emotes, Steam profiles โ€” GameBoy or NES palette for nostalgic vibes.

Pixelated NFT art

10000-piece NFT series in the style of CryptoPunks or Pixelmon โ€” pixelate existing characters with 24-32px grid and 16-32 color palette.

8-bit UI icons

Icons for retro game UI, achievement badges, inventory items. Scale ร—4 gets you crisp 128ร—128 icons from a 32px grid.

Artistic typography

Pixelate quote images, blog titles, themed banners for retro gaming content โ€” distinct visual identity for your brand.

Memes and stickers

Pixelate viral meme images into Telegram/Discord stickers at 512ร—512 PNG. Sweetie 16 palette for vibrant chunky cuteness.

How Pixel Art Converter works under the hood

The processing pipeline has 4 stages: (1) Downsample the input to your chosen grid size using LANCZOS3 โ€” a high-quality resize algorithm that preserves detail before reducing resolution. (2) Color quantization: reduce the palette to N colors. For presets, we use Pillow's Image.quantize(palette=...) with a fixed palette. For Auto mode, we use the median-cut algorithm to cluster the most common colors in your image. (3) Optional Floyd-Steinberg dithering โ€” distributes quantization error to neighboring unprocessed pixels, creating the illusion of smooth gradients by alternating pixels of different colors. (4) Upscale the result with NEAREST neighbor to keep each pixel a sharp square, never blurred.

The backend runs FastAPI + Pillow on Python 3.10, deployed via Nginx Proxy Manager at the dedicated pixelart-api.phanmemtonghop.com subdomain. One image (1-2MB) typically takes 100-500ms to process (plus network latency). Worker has an optional HQ mode using the Pyxelate library โ€” Bayesian Gaussian Mixture palette auto-detection, better than median-cut but 3-5ร— slower. Currently only fast mode is enabled; HQ will activate when high-quality batch processing is needed.

Compared to client-side Canvas API: Canvas lacks precise quantization (only ditherGL or lightweight JS libs with poor quality), no LANCZOS downsample (only bilinear, which is soft), no Floyd-Steinberg (you'd have to implement it manually in WebGL). Server-side Pillow has been optimized for 20+ years and is the gold standard for Python image processing โ€” results clearly outperform Canvas-based tools like pixelit.co or onlinepixelart when compared side by side.

Frequently asked questions about Pixel Art Converter

Why upload to a server when other pixel art tools run in-browser?

For quality. Canvas API in browsers lacks strong palette quantization, LANCZOS resize, and proper dithering โ€” results come out soft, heavily banded, color-shifted. Server Pillow handles the full pipeline and produces noticeably better output. In exchange, your image is temporarily uploaded over HTTPS, processed in memory, and the result streamed back โ€” the server doesn't persist anything (no disk writes).

What's the right grid size?

Depends on purpose: 16-32 px for chunky retro icons/avatars (GameBoy or NES sprites), 64-96 px for moderate detail (indie RPG characters), 128-256 px for scenes or complex art (Octopath Traveler HD-2D style). Try a few values โ€” smaller grid = more retro but loses detail faster.

What's Floyd-Steinberg dithering? Should I enable it?

Dithering recreates gradients by alternating pixels of different colors, even with tiny palettes. Floyd-Steinberg distributes quantization error to neighboring pixels using a 4-cell matrix. Turn it ON when your image has gradients (skies, skin tones, lighting) โ€” smooths color transitions instead of harsh banding. Turn it OFF for flat-color images (logos, icons, sprites) โ€” dithering just adds noise where none is needed.

Differences between the palettes: GameBoy/PICO-8/NES/C64/Sweetie16/AAP-64?

GameBoy (4 greens, mono-retro), PICO-8 (16 bright colors, indie standard since 2020s), NES (54 hardware palette โ€” recreates Mario/Zelda), C64 (16 old Commodore colors), Sweetie 16 (16 modern bright colors), AAP-64 (64 balanced colors for complex art). Pick by style: 8-bit retro โ†’ GameBoy/NES, modern indie โ†’ PICO-8/Sweetie, detailed โ†’ AAP-64, or Auto if undecided.

Is my image stored on the server?

No. The server receives the image into memory (RAM), processes it with Pillow, and streams the PNG back via HTTPS response. No disk writes, no database, no logging of image content. The worker handles one request at a time; after response the image is garbage collected. Full HTTPS through Cloudflare โ€” safe for uploading sensitive images.

What's the max file size?

15 MB per image. Larger files return HTTP 413 Request Too Large. If your 4K photo is >15MB, use ImgTools Compress first to get it down to ~10MB โ€” pixel art quality isn't much affected since the tool will downsample to a small grid anyway.

Does it pixelate transparent PNG?

Yes. The tool preserves the alpha channel โ€” PNG with transparent background retains transparency when exported as pixel art. Useful for game sprite assets and UI icons that need to overlay different backgrounds.

Can I use results commercially?

Yes. ImgTools claims no copyright or attribution โ€” you can use your pixel art outputs for any purpose: selling stickers, NFTs, game assets, merch, shop logos, etc. Note: if your original image has third-party copyright (anime characters, company logos), make sure you have derivative rights before commercializing.