Transform any image into classic ASCII character art. Adjust density, contrast, and resolution. Export as PNG or SVG instantly.
ASCII art replaces every block of pixels with the character whose printed density most closely matches it. A dark region becomes an at sign or a hash; a bright one becomes a full stop or a space. The result is a photograph you could send over a teletype, and the constraint is what makes it interesting: you are reproducing an image using only the ninety five characters that fit in seven bits.
The conversion runs in four steps, and each one has a decision in it.
First the image is divided into a grid of cells. Because monospace characters are taller than they are wide, roughly two to one on most fonts, the cells have to be taller than they are wide too, or the output comes out stretched. Getting this aspect ratio wrong is the single most common reason homemade ASCII converters produce squashed faces.
Second, each cell is reduced to a single brightness value, usually a luminance-weighted average rather than a plain mean, because the eye reads green as considerably brighter than blue.
Third, that brightness is mapped onto a ramp of characters ordered by ink coverage. A common ramp runs from space through full stop, colon, dash, equals, plus, asterisk, hash and at sign. Short ramps give punchy, graphic output. Long ramps of seventy characters give smoother gradients but rely on the viewer seeing the whole grid at once.
Fourth, the characters are drawn back out, either as text you can copy or as an image you can print.
An ASCII ramp has perhaps ten usefully distinct density steps. A photograph has 256 per channel. You are throwing away more than ninety five percent of the tonal information, so the small amount you keep has to be the right part.
Push contrast hard before conversion. A well exposed photograph, which sits mostly in the midtones, converts into a uniform grey mush of asterisks and plus signs because everything lands in the middle of the ramp. Crush the shadows, lift the highlights, and the subject separates from the background.
Simple subjects convert better than complex ones. A portrait against a plain background, a single object, a strong silhouette: these survive. A busy street scene turns into noise, because there is no cell size at which the important edges stay coherent.
Resolution works differently here than in most effects. More characters means more detail but smaller type, and there is a point past which the output stops reading as text at all and becomes a texture. That point is usually where the piece is most interesting.
Bitgrain also converts to Braille patterns, which is a genuinely different technique with a useful property.
The Unicode Braille block encodes every combination of eight dots in a two by four grid, which means a single Braille character can represent eight independently addressable pixels. Compared with a standard ASCII ramp, where one character encodes one brightness value, Braille gives you eight times the effective spatial resolution in the same number of characters.
The trade is that Braille output is strictly one bit. There are no intermediate densities, only dot present or dot absent, so the image has to be dithered first. Combining Braille output with Floyd-Steinberg or Atkinson dithering gives detailed, high resolution character art that still fits in a text file.
Classic ASCII art is monochrome, but the characters can carry colour sampled from the original image. Coloured ASCII reads more like a mosaic than like text, and it works well when the source has strong flat colour areas.
Bitgrain exports ASCII output three ways. As plain text, when you want something that lives in a README, a terminal banner, a signature block or a commit message. As PNG, when you want the rendered grid as an image. As SVG, when the characters need to scale, because the SVG carries real glyphs rather than a rasterised picture of them.
The conversion happens entirely in your browser using Canvas, so nothing is uploaded, and because the mapping from brightness to character is a fixed deterministic function, the same photograph with the same settings always produces the same text.
Monospace characters are about twice as tall as they are wide, so the sampling grid has to use non-square cells. If the converter samples square cells, faces come out compressed vertically.
Ten to twelve characters gives punchy graphic output. Sixty or seventy gives smoother gradients but needs a larger grid to read properly. Start short and lengthen it only if the image looks banded.
Unicode Braille characters encode eight dots each in a two by four grid, so one character carries eight pixels rather than one brightness value. That is eight times the spatial resolution for the same character count, at the cost of being strictly black and white.
Yes. ASCII output can be exported as plain text for terminals, READMEs and messages, or rendered to PNG and SVG when you need it as artwork.