Braille dot art generator
Give it a picture and you get back text made of braille dots. Every character carries a 2 by 4 grid of dots, so a 40-character line holds 80 pixels across, which is why dot art looks so much finer than ASCII art at the same width. The converter runs entirely in your browser and your image is never uploaded.
Make dot art
Start from a built-in shape or upload your own image. Width sets the characters per line; threshold decides how dark a pixel has to be before it becomes a dot. Turn on dithering for photos and soft shading.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀⠀⠀⣀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀ ⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀ ⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀ ⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀ ⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀ ⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀ ⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀ ⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀ ⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀ ⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀ ⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
819 characters, 20 lines, counts as 1619 on X
How one braille character stores eight pixels
The Unicode Braille Patterns block starts at U+2800 and holds all 256 combinations of eight dots. Each dot owns one bit, so the code point is U+2800 plus the values of the raised dots added together. The rows below are worked out by the same function the generator uses.
| Pattern | Dots raised | Bit values | Code point | Glyph |
|---|---|---|---|---|
The empty cell, used for blank areas | none | 0x00 | U+2800 | ⠀ |
A single top-left dot | 1 | 0x01 = 0x01 | U+2801 | ⠁ |
Top row only | 1, 4 | 0x01 + 0x08 = 0x09 | U+2809 | ⠉ |
Whole left column | 1, 2, 3, 7 | 0x01 + 0x02 + 0x04 + 0x40 = 0x47 | U+2847 | ⡇ |
Whole right column | 4, 5, 6, 8 | 0x08 + 0x10 + 0x20 + 0x80 = 0xB8 | U+28B8 | ⢸ |
The two dots added for 8-dot braille | 7, 8 | 0x40 + 0x80 = 0xC0 | U+28C0 | ⣀ |
Every dot raised, a solid block | 1, 2, 3, 4, 5, 6, 7, 8 | 0x01 + 0x02 + 0x04 + 0x08 + 0x10 + 0x20 + 0x40 + 0x80 = 0xFF | U+28FF | ⣿ |
Ready-made pieces, drawn by this page
Our server drew these with the converter when the page was built, from the same shapes as the sample buttons, at 24 characters wide so they fit a phone screen. Tap one to copy it. The shaded ball is dithered; the others are a straight threshold.
Will it fit? Character limits for dot art
Braille does not count the same way everywhere. X weighs every character outside the early Unicode scripts (Latin, Greek, Cyrillic, Arabic and a few punctuation ranges) as two, and braille falls in that group, so a 280-character post holds only about 140 cells. The last column is how many lines of 20-character-wide art each limit allows once line breaks are counted.
| Where | Limit | Each braille cell counts as | Lines at 20 wide |
|---|---|---|---|
| X post | 280 | 2, per the open-source twitter-text rules | 6 |
| Discord message | 2,000 | 1 | 95 |
| Instagram bio | 150 | 1 | 7 |
| TikTok bio | 80 | 1 | 3 |
Limits as published in October 2026. X Premium accounts can post much longer text, Discord Nitro raises messages to 4,000, and apps change these numbers without notice, so treat the table as a guide.
Why a piece shifts when you paste it
Braille art holds its shape better than ASCII art in most apps, and the reason is specific: type designers almost always give every glyph in the braille block the same advance width, so a line of pure braille behaves like monospaced text even inside a proportional font such as the one Instagram or iMessage uses. Trouble starts when something that is not braille sneaks into a line. An ordinary space is narrower than a braille cell in almost every proportional font, so a row containing spaces drifts left. Fallback fonts cause the other common failure. When an app's own font has no braille glyphs, the system borrows them from another font with a different width, and the whole piece stretches or squeezes, which is why the same art can look taller on one phone than on another.
The blank cell problem
U+2800, the pattern with no dots, is meant to look empty, but it is not a whitespace character, and that is what makes it useful as a spacer. Apps do not all agree on what to do with it. Some trim it from the start and end of a message as if it were whitespace, which deletes the empty margin of your art and shifts every line after it; certain fonts have been reported to draw it with no width at all. The generator gives you two ways round this. Swapping blanks for ⠄, a single low dot, keeps every cell the same width and costs you a faint dotted background. Swapping them for ordinary spaces reads cleanest but only lines up in a monospace font, so keep that option for code blocks on Discord or GitHub.
Making art that survives a phone screen
Narrow beats detailed. A phone held upright shows somewhere around 30 to 40 braille cells per line at the default text size, and a line wider than the chat bubble wraps, cutting the picture in half and pushing its right side down a row. Staying at 30 characters or fewer avoids that on most phones. High-contrast sources convert best: a logo, a silhouette or a cartoon with thick outlines still reads at 24 characters, while a photo of a face usually needs 50 or more, plus dithering, before anyone recognises it. Crop tightly before you upload, because every empty margin spends characters you could have used on detail.
What a screen reader does with dot art
To assistive technology every cell is a separate character with its own Unicode name, such as BRAILLE PATTERN DOTS-1458. Screen readers vary in how they handle that: some read out each pattern's dot numbers, some skip the characters, and a 24 by 12 piece contains 288 of them. Either way, a listener gets no picture. If you post dot art where blind or low-vision people may come across it, put a short caption first, something like "dot art of a cat", so the listener knows what it is and can move past it. Where the platform allows it, posting the art as an image with alt text is kinder still.
Dot art is not braille writing
Braille as a reading system is built on six-dot cells, where dots 1 and 2 together are the letter B and many patterns stand for contractions defined by each language's braille code. Dot art borrows the Unicode characters and ignores all of that. It treats each cell as a tiny bitmap, and the bottom dots 7 and 8 that it relies on come from eight-dot computer braille. Send a piece to a braille display and the reader feels a run of meaningless patterns. That is fine for decoration, but do not use a dot art tool to produce text you want a braille reader to understand; a real braille translator does that job, and our braille symbols set lists the individual characters.
Threshold, invert and dithering in practice
Threshold is the control that matters most. At 50 percent, any pixel darker than mid grey becomes a dot; lower it to keep only bold outlines from a busy image, raise it to pull in faint detail. Invert swaps which side counts as ink. That matters because dot art is often viewed on a dark chat theme, where the raised dots appear light, so a picture that looks right on a white background reads as a negative in dark mode. Floyd-Steinberg dithering pushes each pixel's rounding error onto its neighbours, turning a grey area into scattered dots at the right density instead of a solid block or nothing at all. Use it for the shaded ball or any photo, and leave it off for flat logos, where it only adds speckle.
Dot art questions
How do I turn a picture into dot art?
Upload the image to the generator at the top of this page, choose a width, then move the threshold until the shape is clear. Copy the result and paste it wherever you want it. Nothing leaves your device, because the conversion runs on a canvas inside your browser.
Why does my dot art look broken on Discord or X?
Usually one of three causes: lines wider than the chat window are wrapping, blank cells are being trimmed, or a fallback font is drawing braille at a different width. Try 30 characters wide or less and swap blank cells for ⠄. On Discord, putting the art in a code block also forces a monospace font.
What is the ⠀ character and why can I not see it?
It is U+2800, the braille pattern with no dots raised. Unicode classes it as a symbol rather than whitespace, so it keeps its space where an ordinary space might be collapsed. That is why dot art uses it for empty areas and why some people use it as a blank-looking name.
Why does X say my dot art is too long?
X counts each braille character as two toward its 280 limit, following the weighting in its open-source counting library, so one post holds roughly 140 braille cells. A piece 20 characters wide fits six lines. The generator shows that X count next to the ordinary character count so you can check before posting.
Is braille dot art accessible to screen reader users?
Not by itself. Screen readers treat each cell as a separate braille character, so the picture turns into a long string of pattern names or silence. Add a one-line caption that says what the art shows, and where you can, share it as an image with alt text instead.
Can I put dot art in an Instagram or TikTok bio?
Only small pieces. An Instagram bio allows 150 characters and a TikTok bio about 80, line breaks included, so art 20 characters wide gets seven lines on Instagram and three on TikTok. A single row of braille shapes used as a divider often works better than a full picture there.
