This converts an image to ASCII by brightness, not by edge detection or any smarter image analysis: each pixel is converted to grayscale, and its brightness picks a character from a fixed density ramp (from a space for the darkest values up through .:-=+*#%@ for the brightest). It's the classic, straightforward approach to ASCII art, and it works well for anything with a clear light/dark subject against a distinguishable background — the same category of image that photographs well in plain black-and-white.
What's fixed right now
The output width is fixed at 96 characters and the character ramp is fixed to a single grayscale set — there's currently no width slider, no alternate character sets (block characters, binary, a custom ramp), and no text-to-ASCII (figlet-style banner) mode. Every image goes through the same 96-character-wide, single-ramp conversion.
Getting a readable result
Because the mapping is based purely on brightness, images with strong contrast between subject and background convert most clearly — a portrait against a plain wall, a logo on white, a high-contrast object photo. Busy, low-contrast, or very colorful images (where hue carries more information than brightness) tend to convert into a muddier block of mid-range characters, since ASCII density mapping only has luminance to work with.
Common uses
- Turning a logo or simple graphic into a text-based signature for a GitHub README
- Creating a retro/terminal-style banner from a high-contrast photo
- Quick text-art conversion for CLI tool splash screens
FAQ
Can I adjust the output width or character set?
Not currently — every conversion uses a fixed 96-character width and a single grayscale character ramp.
Is there a text-to-ASCII (banner/figlet) mode?
Not yet — the current version only converts uploaded images, not typed text.
Does it preserve color?
No — the conversion is grayscale-only; brightness maps to character density, and color information isn't used.
Is there a file size limit?
Very large images are still processed, but since the output is always downsampled to 96 characters wide, extra source resolution beyond that doesn't add detail to the result.