How an image becomes text
The picture is shrunk so that one pixel corresponds to one character, then each pixel's brightness is looked up on a ramp of characters ordered from dense to sparse. A dark pixel gets @, a bright one gets a space, and everything in between lands somewhere along the ramp.
Character cells are roughly twice as tall as they are wide, so the height is halved to compensate. Without that correction every ASCII rendering comes out stretched vertically — which is why so many of them do.
Choosing a width and a character set
Width is the real quality control: more columns means more detail and a bigger block of text. Around 80–100 works for viewing in a terminal or a comment; 150 and up is for saving as an image.
The detailed ramp has 70 brightness levels and gives the smoothest gradients. Block shading uses Unicode blocks rather than ASCII proper, which looks solid but will not paste everywhere. Turn on invert when the art will sit on a dark background, or the whole image reads as a negative.
What works as a source
High-contrast images with a clear subject convert well; busy or low-contrast photos turn to mush. Portraits, logos and silhouettes are reliable. If a picture looks unclear when squinting at it, it will not survive the conversion — that squint is a fair preview of what the algorithm sees.
Frequently asked questions
Why does my art look wrong when I paste it somewhere?
It needs a monospace font. In a proportional font every character has a different width and the image collapses. Wrap it in a code block, or use the PNG export, which bakes in the correct spacing.
Are my images uploaded?
No. Your picture is sampled locally and turned into characters here in the page.
Something wrong with this tool, or an idea for it? Tell us