Show HN: Human-Readable QR Codes

dimview1 pts0 comments

QartText

Kind

URL<br>Phone<br>Wi-Fi

URL

Phone number

Network name

Password

Security

WPA/WPA2/WPA3<br>WEP<br>None (open)

Hidden network

Generate

Options

Error correction

L: 7% recovery, most room for artwork<br>M: 15% recovery (default)<br>Q: 25% recovery<br>H: 30% recovery, least room

Maximum lines

1: never wrap

Clearance

1: tight<br>1&frac12;: 1 clear ring, 1 stippled<br>2 (default)<br>2&frac12;: 2 clear rings, 1 stippled<br>3&frac12;: 3 clear rings, 1 stippled<br>5: generous

Text override

Pick one

Twelve treatments of the same code: fonts across, extent and inversion down.<br>Whitespace is what makes the text readable, so raise Clearance if a variant<br>is fighting the noise around it. A half step clears its outermost ring only<br>partly, stippling it, which softens the edge and costs fewer forced modules than<br>a whole ring. Symbol size is chosen automatically; each card shows how wide that<br>code needs to be printed.

Selected

fixed: function patterns and modules carrying the payload itself

free: click any of these to flip it, and the solver rebuilds the rest

Placement

auto

Each nudge re-solves from scratch. Watch the fidelity figure:<br>sliding the text so a period meets an alignment square, or a stroke meets the<br>timing line, costs nothing and can gain you modules.

Module size 8 px

Export dark<br>Export light

Scanners expect dark modules on a clearly lighter background. This pairing is<br>inverted or too low in contrast, and is likely to fail to read.

Download PNG<br>Download SVG<br>Undo edits

Exports contain only the two colors above, never the grays, which mark editable modules in the preview only.

Keep It On Your Device

QartText needs no network once it has loaded. It does all the work in your<br>browser and never sends anything anywhere. Add it to your home screen or dock and<br>it opens like any other app, works with no signal at all, and drops the address bar.

Install

Technical Details

A QR code&rsquo;s Reed–Solomon code is linear over GF(256), the block<br>interleaving is a permutation, and the mask is a fixed XOR. Composed, the map<br>from data bits to module colors is affine over GF(2).

The payload (a URL, a tel: number, a WIFI:<br>descriptor) occupies the first few hundred bits. Everything after the<br>four-bit terminator is padding, which decoders never read, so those bits are free<br>variables. Writing one column per free bit and one row per module we want to<br>control gives a linear system; Gauss–Jordan elimination over GF(2) solves it.<br>The answer is a genuine codeword that both carries the payload and paints the<br>picture.

Nothing is overwritten and no damage is introduced, so the full error-correction<br>budget survives for real-world wear. This is Russ Cox&rsquo;s<br>QArt construction, with the artwork<br>being type rather than an image. Cox bought his free bits by appending junk to the<br>URL; taking them from the padding instead leaves the payload byte-for-byte intact.

Where a module carries a bit of the payload itself, it cannot be moved, and those<br>few pixels come out wherever the payload puts them. The app reports the count as<br>fidelity and picks the symbol size and position that minimize it,<br>always protecting the letterforms first.

payload modules recovery never code free

Related Articles