new_portrait.shv1.1

MAKE YOUR PORTRAIT

Everything runs in your browser. Nothing is uploaded.

Or start from an example

free to use

~ $ readme_portrait --in you.png --out assets/portrait.svg

Your Face, Typed Into Your README.

~/studio $ ./portrait.sh --live

The Studio.

Drag the frame on the source image, pick a contrast mode and watch every stage of the pipeline update.

Source 1.0

—

Drag the frame · scroll or +/− to zoom · arrow keys move it.

Options 1.1

Options
Cells
Contrast
Colour
Terminal

portrait.svg — Preview

example
— Download .svg

Pipeline

—
1 crop—
2 lumaITU-R 601
3 contrastequalize
4 cells110×62

README.md

  1. Upload the file to assets/portrait.svg in username/username.
  2. Paste the code into README.md.
  3. Commit. It types itself out on your profile.
Hand it to an AI coding agent
~/src $ npm test

Built Like Software, Not A Filter.

Pillow parity

The JavaScript port reproduces the reference Python/Pillow script cell for cell: 6,820 of 6,820 characters and colours, and a byte-identical SVG. Local contrast matches OpenCV's CLAHE on 99.98% of pixels.

Works inside <img>

GitHub strips inline SVG and blocks scripts and fonts in README images. The typing is pure SMIL, and every line is pinned with textLength so macOS, Windows and Linux line up.

Never blank

Rows are visible by default and the delay lives in keyTimes. Email previews, social cards and screenshots always show the full portrait.

100%cell match with the reference
~145 KBdefault file, 110×62 cells
0image bytes sent anywhere
MITopen source, no tracking
~ $ man readme_portrait

Questions, Answered.

Why not paste the <svg> straight into the README?

GitHub strips inline SVG from Markdown. It has to be a file loaded with <img>, where scripts and web fonts are blocked and only SMIL animation runs.

Is my photo uploaded?

No. Pixels are read and converted in your browser. The only network call is the GitHub API lookup when you type a username.

Global or local contrast?

Global equalisation gives bold silhouettes. Local (CLAHE) keeps detail inside faces when the background is bright or busy. Try both on your image; the pipeline window shows the difference.

It looks blank in an email preview.

It should not: every line is visible by default and the animation only hides lines briefly while it plays. Turn the animation off for a fully static file.

Where do the example images come from?

Public-domain works from Wikimedia Commons. Sources are listed in CREDITS.md.