ASCII art works because text can stand in for an image. There is no hidden picture in those characters, only an illusion created by choosing symbol after symbol so that the overall pattern of light and dark resembles the original. It is a genuinely old trick, and it still does something no icon or emoji can: it fits inside a plain text box.
How the conversion works
Characters are arranged in a deliberate order of visual density, running from a single light mark at one end to a solid block at the other. The tool measures how light or dark each region of your image is and picks the nearest character from that ramp. Bright areas end up sparse and open. Dark areas end up dense, using symbols like @, # or M. The picture emerges from the pattern across many characters rather than from any one of them.
Width is the control that matters
Setting the width is the single decision that changes the result most. A narrow setting gives a small, blocky image that reads well in a terminal or a narrow comment. A wide setting gives something far more detailed and recognisable, and needs a lot of room to display. Most people start around 70 to 100 characters and adjust from there.
Expect the result to look stretched vertically. Character cells are taller than they are wide, so an equal number of rows and columns covers more height than width. Some people reduce the width to compensate and others accept it, since a slightly tall result still reads correctly.
Choosing a source image
Strong contrast matters more than detail. A face lit from one side converts well because there is a clear range between the lit and shadow areas. A misty landscape with soft greys converts poorly, because there is little tonal range to map onto characters and the result turns into noise. Simple subjects also work better than busy ones, since the character ramp cannot represent every edge.
Where the output is actually useful
Terminal banners, README files, code comments, and messages in platforms without image support. It also works well as a quick test of whether an image is genuinely recognisable, because if the picture is not legible as sparse text it will probably not be legible as a small thumbnail either.
Why plain text still matters
The technique has survived because text is the only thing that appears everywhere without exception. Email, source code, terminals, commit messages and any platform without image support all accept text and nothing else. A README containing a rendered diagram needs the reader to have a working connection and a renderer. The same README with a picture drawn in characters always works, including over ssh and inside a diff view.
It also survives being copied, which images do not. Paste an ASCII picture into a message and it arrives intact. Paste a screenshot and it arrives as a broken placeholder pointing at a server you may not control.
The limitations are equally clear. There are far fewer shades available than in a real image, no colour at all, and the character shapes are rigid. That is why the best results are simple high-contrast subjects rather than photographs where subtlety is the point.
Related reading
Guides that pair with this