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.