Pure-JavaScript encoder and decoder, spec v0.3 (byte-identical to the Python reference for uncompressed symbols). Type below — the symbol updates live.
PNG files are decoded fully inside JavaScript (no canvas),
so this also works when the page is opened directly from disk
(file://). Photographs work too: uneven lighting, camera
noise, blur, JPEG artefacts, glare, arbitrary in-plane rotation and
moderate perspective are absorbed automatically (bullseye sweep,
homography + correction-surface fit, RS erasure decoding). Very
small prints (a few pixels per cell) and extreme angles are still
the job of the Python hexatess decode camera pipeline.