Turning a handwriting photo into an installable font
draw-your-font takes one or more photos of an alphabet written in pen and builds a font you can install. The image work runs on your machine: adaptive thresholding, ink blob detection, potrace vectorization and placement of every glyph in shared metrics. Claude labels the letters when you use the Claude Code skill; otherwise the CLI relies on the writing order you give it. Output is TTF, with WOFF, WOFF2 and CSS on request, and the font belongs to whoever wrote the letters, commercial use included.
Per-character height bands and a grid the threshold erases
- Each character has its own vertical band in a 1000-unit em square: caps reach 700, x-height sits at 480, descenders drop to -220. A
ghangs below the baseline and anostays at x-height. - Tracing is potrace, the engine inside FontForge and Inkscape, loaded as an npm module. Node 18 or later is enough on macOS, Linux or Windows, with no FontForge, ImageMagick or potrace binary to install.
- In the skill, Claude reads a contact sheet where every ink blob has a number, writes the blob-to-character map to
labels.json, then reviews the preview. It never edits a path. - The A4 grid from the
templatecommand prints in light grey, which the threshold step wipes out. Its boxes follow the charset order, so a filled-in page builds without any recognition step. - Refinements rebuild from the stored crops without a new photo:
--smooth(0 to 2) rounds the curves and--weight(-2 to 2) sets stroke thickness.--deltaand--captune detection for a faint pen or a shadowed page. - The demo on the project site processes the photo inside the browser tab, but only exports TTF.
Spanish accents only, and nothing after 0.1.0
The only extended charset is Spanish. The template ships minimal (79 characters: both cases, digits and 17 punctuation marks and symbols) and spanish, which adds 15. The height table in src/metrics.js knows those accents and no others. Anything it lacks gets the cap-height band, so a lowercase ç grows to capital height with its cedilla above the baseline, and lowercase Cyrillic comes out at capital height too. The template command also ignores --chars. An issue opened on 10 September 2026 includes a patch adding a french set and the missing bands.
Without Claude, the CLI recognizes nothing. It hands the characters from --chars or the chosen charset to the ink blobs in the order it finds them, and warns when the counts differ. Exact labels on a freeform photo mean writing labels.json by hand or going through the skill. A label longer than one character, a ligature for instance, is skipped by build.
The README pitches it against Calligraphr. Its FAQ explains why the tool is free when Calligraphr charges $8 a month: that service pays for servers and a browser editor, while here your own machine does the work and the agent is the editor.
Version 0.1.0 is the only one published. It reached npm on 22 July 2026, the day the repository was created, and GitHub has no release or tag. The last commit is dated 5 August 2026. None of the six open issues has a reply, including the two that came with a patch. Kerning, ligatures and letter randomization are planned for a v2, with no date given.
