From pixels to characters
An ASCII art generator does not "draw" your image. It samples it. The converter shrinks the picture to a small grid — one cell per output character — then measures the brightness of each cell and swaps it for a character that has a similar visual weight. A dark cell becomes a dense glyph like @ or #; a bright cell becomes a light glyph like . or a space. Read the whole grid at once and your eye reassembles the original shape.
The brightness ramp
The ordered set of characters from dark to light is called the ramp, or charset. A common one is @%#*+=-:. running from heaviest to lightest. The number of characters in the ramp sets how many brightness levels you can show: a ten-character ramp gives ten shades, a two-character ramp like 10 gives hard black-and-white. Choosing the ramp is the single biggest control over how your output reads.
Width, height and the aspect fix
Terminal characters are taller than they are wide — roughly twice as tall. If a converter mapped one character per pixel one-to-one, the result would look vertically stretched. ASCIIForge compensates by sampling fewer rows than columns (about 0.55 rows per column), so a circle stays a circle instead of becoming an egg. Output width is the main quality dial: 80–120 characters suits most images, wider captures more detail but is harder to share.
Contrast and brightness
Before mapping, each cell's brightness can be nudged. Raising contrast pushes mid-tones toward pure black or white, which sharpens edges and stops the output turning into grey mush. A small brightness shift rescues photos that are slightly under- or over-exposed. Invert swaps dark and light — useful when you plan to display the art as light text on a dark background.
Tips for cleaner output
- Start with a high-contrast image and a clear subject.
- Keep width between 80 and 120 characters for sharing.
- Nudge contrast up before widening the output.
- Use a fenced code block when pasting into chat or Markdown so spacing survives.