inkproof – Tattoo LAB

Stroke-order data and modifications

The app draws each character stroke by stroke. That geometry comes from Make Me a Hanzi (graphics.txt), which is derived from the Arphic PL UKai and Arphic PL KaitiM GB typefaces, Copyright © 1999 Arphic Technology Co., Ltd., and distributed under the Arphic Public License.

The Arphic Public License, section 2, requires that modifications be documented and made freely available to third parties under the same licence. This page is that designated place.

What we changed, and when

All changes were made on 2026-08-14 by this project.

Change Why
Selection — only the glyphs the app’s character database needs are kept (2,806 of 2,810 glyph forms; 姍, 燁, 鏗 and 驁 have no source data) The full dataset is 29 MB; the app ships 3.5 MB
Coordinate flip — the source is font space (1024 wide, y pointing up, baseline at 0). Every coordinate is transformed with y' = 900 - y So the app never has to think about two coordinate systems
Path normalisation — the SVG subset (absolute and relative M/L/H/V/Q/C/S/Z) is rewritten to absolute M/L/Q/C/Z only Lets the app keep one small, deterministic parser
Medians converted from point lists to the same absolute path syntax as the outlines Same reason
Storage — each character is stored as {"o": [outlines], "m": [medians]}, raw-deflate compressed, in a SQLite table Size

No glyph outline is redrawn, reshaped or re-ordered. The stroke shapes and the stroke order are Arphic’s; the transformations above are mechanical.

The script that performs them

The complete build script is build_strokes.py. Running it against graphics.txt reproduces the data the app ships, byte for byte.

The modified data remains under the Arphic Public License.