Proof model

ASCII characters have shape, not just brightness.

The renderer compares 6D character vectors so contours survive the translation into text.

Sample

Character cells are measured.

Vector

Six regions describe the shape.

Match

Contours choose the character.

Render

ASCII preserves edges.

0×0 characters 0.0ms render time Frame: 0

Scene

Contrast Enhancement

Cell Size

Quality

How It Works

6D Shape Vectors

Each ASCII character is represented as a 6D vector capturing how it fills its cell. Six sampling circles in a staggered 2×3 grid measure density at different positions.

Nearest Neighbor Matching

For each cell in the image, we sample a 6D vector and find the character whose pre-computed shape vector is closest in Euclidean distance.

Global Contrast

Normalizes the sampling vector to [0,1], applies an exponent to crunch darker values, then denormalizes. Exaggerates shape differences for better character picks.

Directional Contrast

External sampling circles detect edges by reaching into neighboring cells. When a neighbor is lighter, it pushes the internal value down, sharpening boundaries.