Photo as text. Text as art.
Blocks, light, dense, binary, or custom character sets. Mono or color, paper or ink background. Download as PNG for a poster, or copy as plain text for a README. Nothing uploads. For real ASCII art, learn jp2a or aalib.
Turn a photo into ASCII art
Convert a photo into text characters, and take it away as a PNG image or as plain text you can paste anywhere.
What you can change
- Blocks
- Light
- Dense
- Binary
- Type my own set
- Invert tones
- Characters across
- One ink
- From photo
- Page
How it works
- 01Drop in a photo, or open one of the samples.
- 02Pick a character set or type your own, set how many characters run across the image, then choose one ink or colour taken from the photo, and a page colour behind it.
- 03Download it at full resolution. Nothing is uploaded — the work happens in this browser tab.
Loading the typewriter…
Turn a photo into ASCII art
Convert a photo into text characters, and take it away as a PNG image or as plain text you can paste anywhere.
What you can change
- Blocks
- Light
- Dense
- Binary
- Type my own set
- Invert tones
- Characters across
- One ink
- From photo
- Page
How it works
- 01Drop in a photo, or open one of the samples.
- 02Pick a character set or type your own, set how many characters run across the image, then choose one ink or colour taken from the photo, and a page colour behind it.
- 03Download it at full resolution. Nothing is uploaded — the work happens in this browser tab.
Loading the typewriter…
Six places text-as-image still works
- 01 for code
A photo as ASCII at the top of a README
GitHub READMEs love ASCII headers. Run a logo or hero photo through here at 80 columns, copy the text, paste into a code-fenced block in your README. Renders in monospace everywhere — terminal, web, IDE. Cross-platform branding, zero PNG.
- 02 for terminals
A welcome banner for your dotfiles
Open a terminal and see your face in ASCII. Convert a portrait at 60 columns with the Light charset, paste the text into your .zshrc as a fortune-on-startup banner. The terminal greets you with you. Strange, but it's something.
- 03 for blogs
A retro-feel blog post hero
Tech blogs that lean retro embed ASCII art instead of stock photos. Render a hero image at 100 columns with Block charset (unicode shading), download the PNG, drop into the post's hero slot. Reads as 'I made this' rather than 'I downloaded this'.
- 04 for stickers
Print an ASCII portrait on a sticker
Run a portrait through Light charset at 100 columns, color mode on, download the PNG. Print on sticker paper. Hand out at a meetup. Tech crowd loves it.
- 05 for prints
A poster that's text up close, photo from far
Classic printmaking trick: from across the room the ASCII reads as a portrait. Up close it's letters and symbols. Block charset at 200 columns, ink-on-paper, print at A2. Frame, hang, watch viewers walk closer to figure it out.
- 06 for nostalgia
A photo that looks like a 1985 BBS upload
Pre-web internet ran on ASCII art. Forums, bulletin boards, login banners — all text. Convert a photo to ASCII Binary charset (just 0s and 1s) and you've got an authentic-feeling artifact. Caption it 'received: 02:14 EST 1985'. Post on social.
Frequently asked
Does the photo upload anywhere? +
No. The conversion runs in your browser — pixel sampling, character mapping, canvas rendering, all client-side. Your photo never touches our servers — we don't run an image pipeline at all.
Blocks, light, dense, or binary — which charset to pick? +
Light (10 chars) is the classic ASCII look — clean, readable, fits 80-column terminals. Dense (70 chars) gives you near-photographic detail at high resolutions. Block (unicode shading) is best for portraits because the characters fill space more evenly. Binary (0/1) is the bulletin-board nostalgia option.
Why is the PNG huge but the text small? +
The text version is just N×M characters — small. The PNG renders each character at a chosen pixel size, so a 200-column ASCII at 12px characters becomes a 1500-pixel-wide image. Drop columns down or the rendered character size if you need a smaller PNG.
How does the character mapping work? +
We resize the photo down to a tiny grid (one cell per character), measure the average brightness of each cell, and pick a character based on that brightness. Dark cells get dense characters (like @ or #); light cells get sparse ones (like . or space). Reverse with the Invert toggle for light backgrounds.
Can I use my own characters? +
Yes — toggle Custom and type any string. Order matters: dark to light, left to right. Try ' .o0@' for a quick custom 5-char set, or ' ░▒▓█' for unicode block shading. Empty space at the start makes light areas blank.
Why doesn't my portrait look like a face? +
ASCII art shows brightness, not detail. Faces with strong tonal contrast (clear shadows on the cheek, lips, hair) read well. Flat-lit selfies often come out muddy. Tip: bump the original through Photo Filters (Punchy preset) before converting.
now what?
A few ways to use an ASCII piece
next →
Add Text to Photo
Sign the ASCII in a handwritten layer.
Opennext →
Shape Crop
Crop the ASCII to a circle for an avatar.
Opennext →
Polaroid Maker
Frame the ASCII in a paper Polaroid.
Opennext →
Photo Mosaic
Same averaging idea, but as coloured tiles instead of characters.
Opennext →
Drop Shadow
Float the ASCII over paper for a portfolio mockup.
Opennext →
Duotone Effect
Recolour with a two-colour palette before exporting.
OpenThe rest of this shelf
Photo Filters
Eight looks plus the original — vintage to cinematic.
OpenFilm Grain
Tri-X, Kodak Gold, Lomo — pick a roll, see the grain.
OpenHalftone Effect
Comic dots, risograph red, punk-zine textures.
OpenPencil Sketch
Photo to graphite drawing in two clicks.
OpenTilt-Shift Effect
Make real cities look like tabletop dioramas.
OpenLight Leak
Sunset, lomo red, golden hour — bleed light into corners.
OpenTry jp2a or chafa for the real CLI thing.
Real terminal-rendered ASCII art runs through tools like jp2a (one image at a time) or chafa (with full unicode + truecolor). For ASCII video, libcaca and aalib are the ancestors. We give you the JPG output; for live terminal viewing, install those.