AsciiLoom

AsciiLoom is a local-first browser studio and CLI that turns images into README-safe ASCII, paste-ready Markdown, and accessible SVG for GitHub.

Open project ↗
Cover image for AsciiLoom

AsciiLoom turns an image into ASCII art that renders cleanly in a GitHub README. The browser studio and the command-line tool share the same strict TypeScript conversion core, and in the browser the image never leaves the tab.

The problem

Most terminal-oriented ASCII packages are built around ANSI colors and console layout. A README has different constraints:

AsciiLoom addresses these constraints with a pipeline designed for READMEs from the start, rather than adapting a terminal renderer after the fact.

Product goals

Main capabilities

Conversion pipeline

The image is oriented and resized for the character cell’s aspect ratio, oversampled above the final grid, composited against the selected background, and converted from linearized sRGB to perceptual luminance. Cell averages are mapped to CIE L* lightness so ramp levels are spent evenly on visible tones. Percentile auto-levels, local detail recovery, gamma, contrast and brightness complete the tone controls.

Styles and presets

Three outputs

Usage

The studio runs without installation at asciiloom.aliyilmaz.co. The CLI is published on npm as asciiloom:

npm install --global asciiloom
asciiloom ./photo.jpg --preset readme --output ./ascii-photo.md

To generate text, Markdown and SVG together:

asciiloom ./logo.png --preset logo --format all --output ./docs/logo-ascii

Architecture

The conversion core has no DOM, Canvas, Node or Sharp dependency; it accepts raw RGB/RGBA pixel data. That keeps browser and CLI results aligned and the unit tests fast. In the browser, conversion runs in a dedicated worker. The CLI decodes images with Sharp, validates every destination before processing pixels, and writes each file with an atomic rename. The web interface builds as a static site with no runtime framework and is deployed on Cloudflare Workers.

Verification

The release gate runs strict TypeScript checks, coverage thresholds, an end-to-end Chromium test and a 390-pixel mobile layout check. It also installs the real npm package into an empty project and confirms that the installed CLI reproduces every committed text, Markdown and SVG example byte for byte.

Limits

← All projects