Free text to ASCII art generator
Text to ASCII art — words set in large letters
Type a word and it comes back as a banner: each letter drawn several rows tall out of other characters, wrapped at the spaces to whatever column width you name. There is nothing to pay and nothing to join, and the glyph tables travel inside the page, so not a character of what you type is sent anywhere. Six typefaces run from a seven-row hash alphabet down to a three-row seven-segment one, and four of them emit nothing outside the printable ASCII range of 0x20 to 0x7E — the two that use block characters say so, and every result is counted in lines, columns, characters and UTF-8 bytes so you know before you paste whether it will survive.
- 100% free
- No signup
- 6 typefaces
- 4 are pure ASCII
- Wraps to any width
7 of 200 characters. Every face here is uppercase only, the way terminal banners have always been, so lowercase is folded up rather than dropped. Press Enter to force a new banner line where you want one.
Press Ctrl+V anywhere on the page to drop in the word you want set in large letters — no need to click the field first.
The 5 x 7 matrix at one column per cell. Narrowest of the tall faces, and the one that fits the most words on an 80-column line.
Blank columns the two letters already carry are closed up until exactly one clear column is left, measured across all rows at once so nothing slides under its neighbor on a single row. Takes 14% off a full alphabet, and the letters still never touch.
Where the text wraps to a second banner line. 80 is the terminal default and the GitHub diff view; 72 is what a git commit body is conventionally kept under.
Exactly what is drawn above, and the only form that is byte-for-byte what you see.
7 × 41 characters
One banner line · printable ASCII only
#### ### # # #### # ##### ####
# # # ## ## # # # # # #
# # # # # # # # # # # #
### ##### # # #### # #### ####
# # # # # # # # # #
# # # # # # # # # #
#### # # # # # ##### ##### # #Exactly 7 lines, the longest 41 columns, 288 characters, 288 bytes as UTF-8. Every one of those bytes is between 0x20 and 0x7E, so this arrives intact in a commit message, a motd, a Dockerfile or a terminal still running in Latin-1.
How to turn a word into a banner
Whether it survives the paste is settled by the line width, not by the font.
Type the words, then pick the height you have room for
The field takes up to 200 characters and press Enter forces a new banner line where you want one. Then choose among six faces by how many rows the destination can spare: seven rows is the full alphabet and reads across a room, four rows is the same letterforms with two matrix rows squeezed into each text row, and three rows is a seven-segment face that fits inside a git commit message. Lowercase is folded to capitals as you type, because a banner alphabet has one case rather than two.
Set the line width to the one the destination really has
This is the input people skip and then wonder why the letters arrive in pieces. 80 columns is the terminal default and the width GitHub renders a diff at; a commit message body is conventionally kept under 72; a fenced block in a README is as wide as the reader's window and nothing more. Words are wrapped at the spaces between them and each wrapped band gets a blank row, so nothing is ever cut through the middle of a stroke. If a single word cannot fit at all the page says which word and how many columns it needs, rather than silently cropping it.
Wrap it for where it is going, then copy
The last control decides what surrounds the art, and it changes the layout rather than just the copied string: a hash comment costs two columns on every line and a double-slash comment three, so the letters are laid out that much narrower before they are drawn. Markdown gets a fenced block, because without the fence Markdown collapses the runs of spaces and the letters fall apart on the way. The block-comment form is checked for an asterisk followed by a slash inside the art itself, which would end the comment early and turn the rest of your banner into code.
Technical specifications
| Typefaces | 6. Four are the same 5 x 7 stroke matrix rendered differently — hash at one column per cell, hash at two, a dot matrix that draws its background as periods, and a solid block — plus a half-block face that pairs the seven matrix rows into four text rows, and a three-row seven-segment alphabet built from a separate table |
|---|---|
| Characters it can set | 62 glyphs: A-Z, 0-9 and 26 marks including the brackets, the slashes, the ampersand and the percent sign. The three-row face carries 55 of the 62 and has no [ ] # @ & $ %. Uppercase only, with lowercase folded up rather than dropped |
| Faces guaranteed to stay inside ASCII | 4 of 6 emit nothing outside 0x20 to 0x7E. The solid block face uses U+2588 and the half-block face adds U+2580 and U+2584, each three bytes in UTF-8. HELLO at the default settings is 207 characters and 207 bytes in the hash face, 408 characters and 700 bytes in solid block, and 233 characters and 449 bytes in half block |
| Letters on an 80-column line | 13 in the single-width hash and dot faces, 6 in the three double-width faces, and 16 to 27 in the three-row face depending on how wide the letters are. Measured kerned, which is the default |
| Letter fitting | 2 modes. Spaced gives every letter its full box plus a gap; kerned closes the blank columns down to exactly one clear column and takes 14% off a full A-Z, 23% in the three-row face. Smushing, figlet's third mode, is deliberately absent — these faces are solid ink and merging two of them produces a shape that is neither letter |
| Line width and wrapping | 20 to 200 columns, default 80. Wraps between words, never inside one, with a blank row between bands. A comment prefix is subtracted before the letters are placed: 2 columns for the hash form, 3 for the double-slash form, 0 for a Markdown fence |
| Input limit | 200 characters, which is already about 1,200 columns of art before it wraps. Longer input is refused with the count rather than truncated at a point you cannot see |
| What leaves the tab | Nothing. The glyph tables ship with the page and the composition is a few hundred string operations, so there is no request to make and no result to wait for |
Frequently asked questions
Why does my banner fall apart when I paste it into a chat message?
Almost always because the message is being rendered in a proportional font rather than a monospaced one. Banner letters are built from a fixed grid of character cells, so they only hold their shape where every character is the same width — the moment an i is narrower than an m, the columns stop lining up and the letters shear. In Slack, Discord and most chat clients the fix is to wrap the message in a triple-backtick code block, which is what the Markdown option here produces. The second cause is trailing spaces: several clients strip them, so a banner that relies on them to keep its rectangle arrives ragged on the right. That is why trailing spaces are trimmed by default here, and why the dot-matrix face draws its background as periods instead of leaving it blank.
Is the block-character output actually ASCII?
No, and that is worth knowing before you paste it into something old. ASCII is 128 code points and its printable range is 0x20 to 0x7E — the letters, digits and punctuation on a US keyboard, one byte each. The full block used by the solid and half-block faces is U+2588, a Unicode character that costs three bytes in UTF-8 and renders as a question mark or a box anywhere the encoding is not UTF-8. Four of the six faces here are checked to emit nothing outside 0x20 to 0x7E; the other two are labeled, and the panel under every result reports the exact code points and how many extra bytes they cost. HELLO drawn in the solid block face is 408 characters but 700 bytes — the same picture at 1.7 times the storage — while in the hash face 207 characters is exactly 207 bytes.
Why is there no lowercase?
Because a banner alphabet is one case, and every character in it is drawn on the same grid. Real lowercase needs descenders — the tails on g, j, p, q and y — which means either two more rows on every letter in the alphabet or a g that sits on the baseline and stops being a g. Terminal banner programs have made the same choice since the 1970s. What this page does is fold your lowercase up to capitals rather than dropping it, and say so under the result, so a name typed in mixed case still comes back complete.
Why do 5 and S look identical in the three-row face?
Because they light the same segments, exactly as they do on a calculator or a microwave clock. The three-row face is a seven-segment alphabet, and that construction has always had a small set of characters it cannot separate — it is also why B is drawn as a lowercase b and D as a lowercase d, since the uppercase forms would be indistinguishable from 8 and 0. The page derives the clash from the glyph table rather than from a list somebody typed, so it warns only when one of those characters is actually in your text. If the banner has to be read back character by character, a serial number or a registration, use one of the seven-row faces instead.
Can I paste one of these into a source file?
Yes, and the wrapper options exist so you do not have to add the comment markers by hand. The hash form covers shell, Python, Ruby, YAML and Dockerfiles; the double-slash form covers C, Java, JavaScript, Go and Rust. Prefer a line comment to a block comment where you have the choice, for one specific reason: a block comment can be closed early by the art itself. The three-row face draws a literal asterisk and a literal slash, so a banner containing both in the wrong order ends the comment where it appears and leaves the remaining lines to be parsed as code. This page checks for that and refuses to pretend it did not happen.
Why do the letters look narrow, and what does double width fix?
A monospaced character cell is roughly twice as tall as it is wide, so a letter plotted one cell per grid square comes out at about half the proportion it was drawn at. The 5 x 7 matrix behind four of these faces is meant to read as a five-wide, seven-tall letter; at one column per cell it occupies five columns and seven rows, which on screen is a tall thin letter. The double-width faces draw two columns per cell, which puts the shape back at roughly its intended proportion at the cost of twice the columns — six letters on an 80-column line instead of thirteen. It is the same correction the ASCII pages that start from a photograph have to make, in the opposite direction.
How wide should I make it?
Pick the width from the destination, not from how the banner looks on this page. 80 columns is the terminal default and what a GitHub diff view renders at; 72 is the conventional ceiling for the body of a git commit message; a printed sheet at 7pt monospace holds roughly 128 columns across A4 with normal margins. Whatever you choose, the wrap happens at the spaces between words and each band is separated by a blank row, so a two-word phrase becomes two stacked banners rather than one banner cut through the middle. The face is the bigger lever than the width: the same word runs 82 columns in the double-width faces, 41 in the single-width hash face and 27 in the three-row segment one.
About banner alphabets, and what the word ASCII is doing in the name
A banner face is not a picture of text — it is a second alphabet, where every character is a small rectangle of characters and the letter is drawn in ink and paper cells. The format most of them are distributed in is the FIGfont, the .flf file that the figlet program has read since 1991, and it carries three ideas worth knowing even if you never open one. Each glyph has its own width, so an I is narrower than an M. Each carries a hardblank, a character that prints as a space but counts as ink, which is how a font says where its letters may and may not be pushed together. And fitting is a mode rather than a fact: full width leaves every glyph its box, kerning closes up the blank columns the two neighbors already have, and smushing goes one column further and merges the two characters that land on each other. This page implements the first two and refuses the third, because smushing only works on fonts drawn from strokes — every face here is solid ink, and one hash merged with the next hash is still one hash, so an M smushed into a P is a shape that is neither. The letterforms themselves are two tables written for this site rather than a library of FIGfonts, which is why there are six faces here and not three hundred: each .flf in circulation carries its own author and its own terms in the header, and six faces whose provenance is one line long is a better trade than a font menu nobody can account for.
The word ASCII in the name is where most generators quietly stop being accurate. ASCII is 128 code points, of which 0x20 to 0x7E are printable, and every one of them is a single byte in every encoding you are likely to meet. A full block is U+2588 — Unicode, three bytes in UTF-8, and a question mark or an empty box anywhere the encoding is something else. It reads better on a screen than a grid of hashes does, which is exactly why so many tools default to it and still call the output ASCII art, and it is the reason a banner that looked right in a browser turns to rubble in a login message, a terminal running an older code page or a field with a byte limit. So the faces here are sorted by that line rather than by looks, and the result panel names the code points and the extra bytes when you cross it. The other thing worth measuring before you paste is the shape of the cell: a monospaced character is roughly twice as tall as it is wide, so a letter plotted one cell per grid square arrives at about half the proportion it was drawn at. The double-width faces put that back by drawing two columns per cell, which is the same aspect correction that converting a photo to ASCII has to apply in the opposite direction, and the reason a picture pushed through an ASCII art generator comes back stretched if nobody applies it. Those two pages start from an image and use character density as shading; this one starts from a string and draws letterforms, which is why the controls share almost nothing.
There is a second life for a banner alphabet that has nothing to do with terminals, and it is the reason this page sits on a craft site. A 5 x 7 ink-and-paper matrix is a counted chart: one ink cell is one full cross, one bead, one square of single crochet, one 1 x 1 plate. Set a name at seven rows and you have the grid for a sampler border, already in the proportion that fabric wants, and you can count the columns straight off the screen. Two things change when the cells become objects rather than characters. Spacing stops being cosmetic, because a kerned pair that reads perfectly at 11 pixels can put two letters one stitch apart on 14-count aida, which is close enough that the floss of one crowds the other — set the width you actually want and use spaced fitting for anything that will be stitched. And the paper cells are not free either: on a Perler bead pegboard the background of a letter is beads you have to buy and place, so a word that is 41 columns wide is 41 pegs per row whether or not the letter is there. For lettering meant for cloth from the start, the cross stitch text generator gives you the alphabet with the stitch positions rather than the characters, and a hex grid is the right paper if the letters are going into peyote or brick-stitch beadwork, where the rows are offset by half a bead and a square grid will lie to you about the shape. If the chart you are matching a color against is written in Anchor numbers, the Anchor to DMC conversion is the step between it and a shade you can buy.
Product and company names shown here are the trademarks of their respective owners. Photo2Pattern is an independent tool and is not affiliated with, sponsored by or endorsed by any of them.
Where the word you typed goes
Nothing you type here leaves the tab. The arithmetic runs in JavaScript on your own machine — there is no server to send it to, no account to sign in to and nothing stored between visits. Close the tab and nothing of it remains.
The one thing that does leave this page is the copy itself. Copy puts the banner on your system clipboard, which is shared with every other application on the machine and with any clipboard manager keeping a history — worth a thought if the word you set is a name, a handle or something not announced yet. Download writes the same text to a .txt file and nothing else; neither the word nor the settings are kept between visits, so reloading gives you the default word back rather than the last one you typed.