Free · no sign-up · nothing uploaded
Image to ASCII Art
Drop a photo or logo and get copy-paste-ready ASCII in monochrome, ANSI-256 or truecolor — width-tuned to fit a code comment, a README block or a Discord message. Every pixel is sampled in your browser; the file never leaves it.
Convert an image
› 100% local · no upload · no account
No image handy?
ascii-art.txt
waiting for an image
Your browser blocked the clipboard — the text below is selected, press Ctrl/Cmd + C to copy it.
Output is exactly width × rows cells; the copy text, the download and the ANSI stream are all built from the same pixel grid.
How it works
Three steps, no uploads — every pixel stays on your device.
Drag a file onto the dashed zone, tap it to open your picker, or paste from the clipboard. It is read with a local object URL, never sent anywhere.
The image is drawn to an offscreen canvas width characters wide, one pixel per cell. Height follows the aspect ratio with the 0.5 character-cell correction, so nothing is stretched.
A single getImageData pass gives each cell's average colour and luminance, which maps onto your chosen ramp — then copy, save the .txt, or grab the HTML.
Built to look right, not just to convert
The details that separate a recognisable portrait from a grey smear.
Monospace glyphs are about twice as tall as they are wide, so rows are halved — a 2:1 photo at 100 columns comes out 25 rows tall.
Luminance is stretched between the 2nd and 98th percentile of the sampled cells, so dark, hazy or low-contrast shots still spread across the full ramp.
Adjacent cells of the same colour merge into one span, keeping the HTML small enough for a README. The live char count tells you the size before you copy.
Each pixel snaps to its nearest xterm-256 index and is previewed in the exact RGB that palette shows, so the Discord copy matches the preview.
The sampling canvas is filled white first, so PNG logos with alpha give clean silhouettes instead of black boxes.
Nothing is fetched while converting — no uploads, no keys, no rate limits. The page keeps working with the network switched off.
FAQ
Is my image uploaded or stored?
No. The file is read locally with a browser object URL and drawn to a canvas on your machine. There is no endpoint to send it to and no history — reload the page and it is gone.
Which formats are supported?
Anything your browser can rasterise: PNG, JPEG, WebP, GIF (first frame only), BMP and AVIF on browsers that decode it. SVG, HEIC, TIFF and PDF are rejected with a clear message, because the canvas cannot draw them.
What are the size limits?
Up to 25 MB per file. Images larger than 800 px on the long edge are pre-scaled before sampling, and anything over 12000 px is refused — the grid is at most 200 columns wide, so extra pixels would be discarded anyway.
The result looks washed out or almost blank.
Try the Detailed ramp, raise the width, or pick a higher-contrast crop. Very light logos and fully transparent areas composite onto white, so they legitimately come out as spaces.
ANSI 256 or Truecolor — which should I use?
ANSI 256 embeds ESC[38;5;Nm colour codes and pastes into terminals, IRC and Discord (wrap it in a fenced ansi block). Truecolor emits span elements with 24-bit hex colours for README files and HTML pages, and unlocks the Copy HTML button.
Copy did nothing — the clipboard was blocked.
Some embeds and older Safari builds refuse clipboard writes without HTTPS or a user gesture. The tool then reveals an auto-selected textarea so you can finish with Ctrl/Cmd + C, and only claims success when the copy really happened.
Can I animate it or convert a whole folder?
No — animated GIFs and WebP use their first frame, and there is no batch mode. Convert one image at a time, then tweak width and style until it fits the target.