ASCII characters are not pixels: a deep dive into ASCII rendering

Overall reaction

  • Thread is overwhelmingly positive about the article’s depth, visuals, and interactivity.
  • Several readers say the incremental refinement (“see flaw → fix it”) was especially satisfying.
  • A few note that at max settings the final contrast/edge enhancements can look “mushy” on some examples.

Quality vs performance trade-offs

  • The described approach is praised as a smart compromise: fast enough for 60 FPS on mobile, but still high quality.
  • Multiple comments note that “best possible” quality would be slower: brute‑force bitmap comparison of all glyphs, k‑means to derive optimal tile sets, or full per‑cell bitmap matching (e.g. 8×8 + popcnt).
  • SIMD/GPU acceleration and large precomputed lookup tables (via quantization) are discussed as ways to push further.

Shape sampling and circles vs grids

  • The key innovation—using sampled shape vectors rather than pure brightness—is widely admired.
  • There’s debate over the circular sampling scheme: some argue a simple 2×3 or 3×3 grid might suffice; others point out circles make overlapping, staggering, and symmetry-handling easier.
  • It’s noted that characters rarely touch cell edges, so circular sampling may better match actual glyph footprints.

Contrast, gamma, and distance metrics

  • Raising normalized components to an exponent to “boost contrast” is explained as leveraging how powers affect values in (0,1).
  • Some question whether this is actually contrast enhancement or merely gamma correction.
  • One commenter observes that, with normalized vectors, Euclidean distance ranking is equivalent (up to a monotone transform) to cosine distance, so it can be implemented as a matrix multiply and omit the sqrt.

Fonts, charsets, Unicode, and color

  • Limiting to a small ASCII set is seen as visually cohesive and “retro”; others suggest extended ASCII, braille blocks, or full Unicode for higher effective resolution.
  • There’s interest in proportional fonts, font weights, and color: but color adds multiple dimensions (FG/BG, color space choice) and complicates search.

Existing libraries and new implementations

  • aalib, libcaca, chafa, a decision‑tree C library, and other tools are mentioned; chafa is praised for Unicode/color but considered weaker for pure ASCII edges compared to this work.
  • The blog’s code is MIT‑licensed; no standalone library yet, but several readers report ports (including very fast implementations and a Python CLI with color and contrast options).

AI and meta-discussion

  • Some argue current LLMs couldn’t originate such a nuanced, performant method; others claim they can, given guidance.
  • Use of an AI‑generated Saturn image sparks a side‑discussion about “AI slop,” dataset regurgitation, and future norms around synthetic media.