ANSI Art Converter & Generator (Image to .ANS)

Upload image, generate ANSI art, download .ans file

🖼

Drop image here or click to select

PNG, JPG, GIF (animated), WebP

Advanced Settings Changes appear in the Live Preview →
Image
Colors & Characters
Tuning
Transparency
Custom palette
Live Preview updates instantly
Tip: Best results with comic-style images

The ANSI Art Converter produces the best results with images that already have strong outlines, flat color areas, and high contrast — comic illustrations, vector art, logos, pixel art, and cartoon-style graphics work particularly well. Photographs can be converted too, but the output shines brightest with stylized source material.

See it in action: The Midgard MUD login screen was created with this converter.

What is ANSI Art?

ANSI art is a form of digital art that uses ANSI escape codes — special character sequences controlling text color, background color, and cursor position in terminal emulators. It originated in the BBS (Bulletin Board System) era of the 1980s and 1990s, when artists created stunning images using nothing but block characters (█▓▒░) and 16-color palettes on text-mode displays.

Unlike ASCII art, which relies solely on printable characters, ANSI art uses escape sequences for color and Unicode block characters for pixel-like rendering. Modern ANSI art supports True-Color (24-bit, 16.7 million colors) and remains popular in the demoscene, retro computing, MUD (Multi User Dungeon) communities, and terminal customization.

How to Convert an Image to ANSI Art

  1. Upload your imageDrag and drop a PNG, JPG, GIF (animated too), or WebP file onto the upload area, or click to browse.
  2. Choose a presetPick from High Detail, Retro, Comic, Pixel (quarter-blocks), or Minimal.
  3. Fine-tune (optional)Adjust width, colors, dithering, brightness, transparency, and custom palette in Advanced Settings.
  4. Download or copySave the .ans file, copy the ANSI codes, or export all GIF frames as a ZIP.

Features

6 Color Modes True-Color 24-bit, VGA 256, xterm 256, 16-color ANSI, Retro/Demoscene, Comic/Pop Art
Block Characters Half-blocks (▄), quarter-blocks (▘▝▖▗) for pixel art, or full shading set (█▓▒░)
7 Dithering Modes Floyd-Steinberg, Atkinson, Sierra, Stucki, Jarvis, Bayer 4×4/8×8 — or none
Transparency Alpha threshold, trim borders, smart partial-block edges for clean silhouettes
Animated GIFs Frame-by-frame preview, play/pause, speed control, ZIP export of all frames
Custom Palettes Paste hex colors or auto-generate an optimized palette from your image
100% Private No upload — all processing runs locally in your browser using Canvas API
Fine Control Brightness, saturation, contrast, width, resampling algorithm and background
14 Languages English, Deutsch, Français, Español, 日本語, 中文, العربية, हिन्दी, বাংলা, Português, Русский, 한국어, Polski, Türkçe

Where to Use ANSI Art

  • MUDs & MUD clients — login screens, room art, maps, NPC portraits
  • Terminal emulators — colored text art for shell prompts, MOTD, scripts
  • BBS systems — classic bulletin board art and splash screens
  • Demoscene — retro art competitions and productions
  • Discord & chat — ANSI-colored code blocks for decorative text
  • READMEs & docs — eye-catching terminal-rendered graphics

FAQ

What is an .ans file?

An .ans file is a plain text file containing ANSI escape codes that produce colored text art when displayed in a compatible terminal or viewer. The format uses escape sequences like ESC[38;2;R;G;Bm for 24-bit foreground colors and Unicode block characters to create pixel-like images. You can view .ans files in terminal emulators, MUD clients (Mudlet, CMUD), BBS software, or specialized viewers like PabloDraw and Moebius.

What is the difference between ANSI art and ASCII art?

ASCII art uses only printable ASCII characters (letters, numbers, symbols) to form images — it's monochrome and relies on character density for shading. ANSI art adds color through escape codes and uses Unicode block characters (█▓▒░▄) for pixel-like rendering. ANSI art can display millions of colors and achieves much higher visual fidelity than pure ASCII art.

Is the converter free? Is my data safe?

Yes, the ANSI Art Converter is completely free. Your images are never uploaded — all processing happens locally in your browser using the HTML5 Canvas API. No data leaves your device.

Which color modes should I choose?

True-Color (24-bit) gives the best quality with 16.7 million colors — ideal for photo-realistic results. VGA 256 and xterm 256 are compatible with more terminals. 16-color ANSI works everywhere but is limited. Retro mode uses classic demoscene block shading. Comic mode applies bilateral filtering for a Pop Art look with vivid colors.

Can I use ANSI art in a MUD?

Yes! ANSI art is widely used in MUDs (Multi User Dungeons) for login screens, room illustrations, maps, and NPC portraits. Most MUD clients (Mudlet, TinTin++, CMUD) support ANSI escape codes natively. For best results, use True-Color mode and a width of 78 characters (the standard MUD terminal width).

What are quarter-blocks and when should I use them?

Quarter-blocks (▘▝▖▗▚▞▙▟▛▜) divide each text cell into 2×2 sub-pixels instead of the 1×2 used by half-blocks. That doubles the horizontal resolution at the same width, which is ideal for pixel art or very small images. The trade-off: quarter-blocks only work well with True-Color because each cell uses exactly two colors — no shading palette is applied.

How does GIF export work?

When you upload an animated GIF, the converter parses every frame and lets you preview the animation. Clicking 'Export all frames' generates a ZIP archive with one .ans file per frame plus a frames.txt metadata file listing the original delay. You can then play back the animation in a MUD, terminal, or BBS client using your own timing loop.

Can I save the ANSI art as a PNG image?

Yes. Use the 'Download PNG' button to export the rendered ANSI art as a raster PNG at 1×, 2×, or 4× scale. Each ANSI cell is drawn as an 8×16-pixel block (at 1×) with a Courier monospace font. Transparent cells from alpha mode stay transparent in the PNG — useful for stickers, Discord emoji, overlays, or website graphics. The 4× version is high-resolution and suitable for print or retina displays.

What is OKLAB color matching and when should I use it?

OKLAB is a perceptually uniform color space (Björn Ottosson, 2020) where numerical distances match how humans perceive color differences. In this converter, OKLAB matching noticeably improves results with limited palettes (16 colors, custom palettes) — especially for skin tones, green-to-blue gradients, and dark midtones. It has no visible effect in True-Color mode and is 10–20% slower than RGB matching. RGB is the default because it's fast and good enough for most cases.

How do I convert transparent PNGs or sprites?

Open Advanced Settings → Transparency, switch Alpha Mode from 'Opaque' to 'Transparent'. Transparent pixels now become empty space in the output (ESC[49m = terminal's default background). Enable 'Smart partial-block edges' for clean silhouettes — the converter picks ▘▝▖▗▀▄▌▐ at alpha edges instead of full half-blocks. 'Trim transparent borders' crops empty margins. Essential for logos, NPC portraits, sprites, icons and anything with non-rectangular shape.

Which dithering algorithm should I choose?

Floyd-Steinberg is the best default — smooth gradients, low overhead. Atkinson (Mac-era classic) has higher contrast and fewer grey midtones. Sierra Lite is sharper with similar cost. Stucki and Jarvis-Judice-Ninke spread the error over a larger kernel — sharpest, but ~3× slower. Bayer 4×4 and 8×8 make a visible grid pattern — perfect for retro CRT and demoscene looks. 'None' gives flat posterized areas. Dithering has no effect in True-Color mode (no palette to snap to).

How do I create a custom color palette?

Two options. 'From image (auto)' runs k-means clustering on your uploaded image and extracts 16 representative colors — great for keeping a photo's natural palette on a retro color budget. 'Custom hex list' lets you paste any palette as hex codes (#rgb or #rrggbb, separated by spaces, commas or newlines). Copy palettes from lospec.com/palette-list, Coolors, or your own designs. Click 'Apply palette' to activate. 8–32 colors usually give the best balance between fidelity and style.

Which terminals and clients display ANSI art correctly?

For True-Color 24-bit: Windows Terminal, iTerm2, Alacritty, Kitty, WezTerm, recent Konsole and GNOME Terminal. For MUD clients: Mudlet (full 24-bit), TinTin++ (24-bit with ANSI256), MUSHclient, CMUD. For xterm 256: virtually every modern terminal. For 16 colors: every terminal ever made. Block characters (▄ ▀ █ ▘▝▖▗) need a Unicode-capable font — default fonts on macOS, Linux and Windows 10+ all support them. If blocks look wrong, switch your terminal font to 'DejaVu Sans Mono' or 'Cascadia Code'.

Can I post ANSI art on Discord?

Discord supports ANSI colors inside a code block with the 'ansi' tag. Wrap your copied ANSI in triple backticks with ansi as the language. Discord only supports the classic 16-color codes — not 24-bit True-Color or xterm 256. For Discord, pick '16 colors' color mode and the 'Minimal' preset. Alternative: export as PNG and upload that as a regular image — no color restrictions and much higher fidelity.

Why do some settings make no visible difference?

Several options only kick in when their precondition is met — otherwise they are silently bypassed. In True-Color mode, 'Block chars (█▓▒░▄)' look identical to 'Half-blocks (▄)' because the half-block ▄ already reproduces every pixel pair with zero color error; shade characters can't do better, so the renderer keeps ▄. For the same reason, Dithering and Color matching (OKLAB vs RGB) have no effect in True-Color — there's no palette to snap to. 'Smart partial-block edges' only acts when Alpha Mode is 'Transparent' and a cell has one half transparent. Quarter-blocks only work with True-Color or a custom palette — the option auto-falls back to half-blocks in 16/256-color modes. Dithering is also skipped in Retro and when Block chars render shade tiles directly. Rule of thumb: if toggling a setting shows no change, check that you're in a mode that actually uses it.