pngtoolskit.org
PNG and image utilities, in the browser
Say hi →

Image to Braille Art

2×4 dots per character · dithering · copy as text

Braille characters are the highest-resolution text art available in Unicode. Each one is a 2×4 grid of independently addressable dots, so a single character carries eight pixels where an ASCII character carries one brightness level — four times the vertical detail of conventional ASCII art, in the same number of columns.

Drop an image here

PNG, JPG, WebP, SVG — multiple files allowed

    no files
    Ready.

    Why dithering matters more here than in ASCII art

    ASCII art has a built-in grey scale: @ is dark, . is light, and a good ramp gives you ten or more levels per character. Braille has none of that — a dot is either raised or it is not. Every pixel is forced to pure black or pure white, which is a one-bit quantisation of an eight-bit image.

    Straight thresholding at one bit produces posterised blobs: any gradient collapses into a hard edge wherever it crosses the threshold, and a whole face can become a silhouette. Floyd–Steinberg dithering fixes this by pushing each pixel's rounding error onto its neighbours, so a mid-grey region becomes a stipple of roughly half-on dots that reads as mid-grey from a distance. Leave it on for photographs. Turn it off for line art, logos and text, where the crisp edges are the whole point and a dither just adds noise.

    Picking a width

    The width is in characters, and each character is two dots wide, so 80 columns samples the image at 160 pixels across. That is a good default: it fits an 80-column terminal, a Discord message and most code comments. The height follows automatically from the aspect ratio — because braille cells are two dots wide by four tall while a terminal cell is roughly twice as tall as it is wide, the two distortions cancel and the picture comes out with correct proportions.

    Beyond about 120 columns you are past the width of most places you would paste this, and the lines wrap into unreadability. Below about 30 the subject stops being recognisable. If the result is muddy, try raising the threshold before increasing the width — often the image is simply too dark rather than too small.

    FAQ

    Will this render properly where I paste it?

    Anywhere with a font covering the Braille Patterns block (U+2800–U+28FF), which includes DejaVu Sans Mono, Menlo, Consolas, Cascadia Code and the default fonts on Discord, GitHub and most terminals. In a font that lacks the block you get replacement boxes instead. Monospace is essential — in a proportional font the columns will not line up.

    Why do some lines look like they have gaps?

    U+2800 is the blank braille pattern, and although it is a real character it renders as whitespace. A blank area of the image genuinely produces a run of them. Some editors trim trailing whitespace on save, which can eat the ends of lines — paste into a plain text field if that is happening.

    Is this readable by someone using a screen reader or a braille display?

    No, and it is worth being clear about that. These are the Unicode dot patterns, not braille text — a screen reader will announce meaningless letter sequences, and a refreshable display will show a jumble of dots. It is a visual effect that borrows the characters, nothing more.

    Can I get plain ASCII instead?

    Yes — PNG to ASCII art has several character ramps, including a block-shading one that sits between ASCII and braille in detail.