01 measure the cell
Your column count sets the grid. Each cell is collapsed into one perceptual luminance value, so a saturated red and a pale blue of the same apparent brightness land on the same rung.
A space and four pieces of punctuation. The minimal ramp keeps the same number of steps as the block charset but spends none of them on solid fills — every glyph is plain 7-bit ASCII surrounded by empty paper. The output reads as a sketch rather than as a photograph.
.:*#
rendering minimal portrait…
Semaphore reduces each cell of the image to a single brightness figure and then answers one question: which of five characters is closest? With only five answers available, most of the tonal information in the source is deliberately dropped.
Your column count sets the grid. Each cell is collapsed into one perceptual luminance value, so a saturated red and a pale blue of the same apparent brightness land on the same rung.
That value picks a slot: darkest stays a space, then ., then :, then *, and the brightest cells become #. Anything between two slots is rounded, not blended.
Because a period and a colon cover only a fraction of their cell, the ramp writes far less ink than a block or braille render. The whitespace is doing as much work as the marks.
That rounding is the reason minimal holds up when there is not much room. A sixty-eight step ramp needs many characters before its shades read as shading; give it forty columns and consecutive glyphs differ by an amount the eye cannot separate, so the picture turns into speckle. Five widely spaced steps still produce visible edges at the same size, because the jump from . to * is large enough to survive being tiny.
Avatars, favicons rewritten as text, monogram-style logos, a one-line signature, a badge in a comment header — anything that has to stay legible inside a few hundred characters. Try 40–80 columns, push contrast up until the subject separates cleanly from the background, and switch invert on when the subject is light on a dark field. Simple silhouettes and hard-edged marks respond best.
Faces, fabric and anything with soft gradients need mid-tones this ramp does not have: the detailed ramp carries sixty-eight shades, and braille packs eight dots into every cell for the sharpest result Semaphore can reach. If you want the same five steps but a filled, pixel-like surface instead of sparse punctuation, use blocks.
Ten shades of punctuation. The look most people mean by ASCII art.
Sixty-eight shades of punctuation and letters. The photographic ramp.
Four fills and a space. The same step count, painted rather than sketched.
A space, a zero, a one. The code-rain look.
Eight dots per character. The highest detail Semaphore can reach.
READMEs, splash screens, comment headers and other plain-text homes. Two worked examples: the README banner guide and the SSH MOTD guide.
Open the converter with the minimal ramp preselected, drop an image, and pull the column count down until the shape is all that is left. The conversion runs in your own tab and the bytes never leave it.
Open the minimal ASCII converter