Add machine-made Warp 0.1: a Modern serif for science, drawn by a pen

Merged
RI
8h ago
+22253-28

Summary

machine-made Warp 0.1, the fourth machine-made typeface, built from the approved sketch 0.2.

  • Six static fonts. machine-made Warp Regular, Italic, Bold and Bold Italic (text, opsz 10), and machine-made Warp Display Regular and Italic (titles, opsz 60). TTF, OTF and WOFF2 in fonts/warp/. The variable font (wght and opsz) is planned for 0.3: pen sweeps are not point-compatible across masters.
  • The loom (warp/loom/): a line-by-line Python port of the sketch engine (warp/reference/warp-sketch-0.2.js): level superellipse nib, pressure per node, smootherstep, contrast 9, bracket 0.2, teardrops. The sweep is unioned with skia-pathops and fitted with cubic curves (median 76 points per glyph, extrema on curve, no segment under 4 units).
  • Bold is a true bold: stem +59 %, hairline +30 %, serifs as long as the Regular's, skeleton 6 % wider.
  • Glyph set: 429 glyphs, 306 characters. ASCII, Latin-1 (accents drawn by the pen, composites), Œ œ Ÿ, basic Greek (24 + 24 + ς; Γ Δ Θ Λ Ξ Π Σ Φ Ψ Ω drawn, look-alikes referenced), 37 maths symbols, ffi ffl, four figure styles, small capitals (Latin and Greek), combining marks.
  • Features: ccmp, liga, onum (proportional old-style, as in the sketch), lnum, pnum, tnum (default lining tabular), smcp, c2sc, class kerning from the sketch's table (Latin, Greek, figures), mark, mkmk. The MATH table is planned for 0.2.
  • Name: "Warp" alone is taken by display faces (Intellecta Design, MyFonts 2007; Google's Tilt Warp). The fonts ship only as "machine-made Warp" and "machine-made Warp Display". See warp/BRIEF.md.
  • Repo integration: warp/ (BRIEF, STATUS, CHANGELOG, RELEASE-NOTES-0.1, OFL with RFN "machine-made", tools, tests), proofs/warp/, .github/workflows/warp.yml, a warp job in release.yml for warp-v* (existing-tag logic kept), package_release.sh, README, STATUS, CHANGELOG, LICENSING.
  • Site: a Warp page in the look of the sketch page (ivory, hairline rules, small capitals, one ink blue) with a style switch, a paragraph from a paper, Greek, figures and small caps, the glyph map from the cmap, and a download button to releases/tag/warp-v0.1.0. Warp is on the home and download pages and in the nav.

Checks (local run, 2026-10-27)

  • pytest: 44 passed. One test runs the sketch engine in node and compares advances and ink bounds with the port (within 0.02 unit).
  • Byte-reproducible build: two builds give identical files (serial and parallel).
  • Fontspector 1.9.0, universal profile: 0 FAIL, 0 ERROR on 6 TTF and 6 OTF. Accepted WARNs: PostScript names over 27 characters (Display); unreachable capital marks and denominators in the OTF (used only in composites).
  • Outline fidelity (proofs/warp/fidelity.json): every glyph of the compiled TTF against an independent fill of its pen sweep at 16–128 ppem. Largest difference 4.7 % of the ink, mean about 1.4 %. Limit 5 %.
  • Sketch comparison (proofs/warp/sketch-compare.json): mean IoU 0.95 (Regular, Italic, Display), 0.94 (Display Italic).
  • OCR gate (Tesseract 5.3.4, 10/12/14 px): Regular CER 2.3 %, Italic 1.9 %; DejaVu Serif 0.1 % and 0 %. The gate (reference plus 3 points) passes. Warp reads a little worse than DejaVu Serif at 10 px: Tesseract takes the open loop of g for a comma, f for t, fi and fl for h and H. Optical sizes 9 to 12 give the same numbers.
  • Site: builds; no console errors, no failed or external requests, no horizontal scroll at 360 px; all six Warp styles load.

Review

Please look at these proofs first:

  • proofs/warp/warp-sketch-vs-font-regular.png (and -italic, -bold, -bolditalic, -display, -displayitalic): the sketch engine in red, the font in blue, dark where they agree.
  • proofs/warp/warp-paragraph.png: a paragraph from a paper at 9–12 pt, regular with italic, and bold.
  • proofs/warp/warp-equations.png: equations set by the sketch's maths setter with the font's glyphs.
  • proofs/warp/warp-styles.png: Regular, Italic, Bold, Bold Italic, Display, Display Italic.
  • Also: warp-greek.png, warp-accents.png, warp-kerning.png, warp-smallcaps-figures.png, warp-charset-*.png.

Deliberate deviations from the sketch (details in warp/STATUS.md):

  • The crossbar of A (roman and italic), Æ and ∀ now reaches the hairline; in the sketch it stops a few units short and the counter is open.
  • × < > share the advance of + with the other operators, so they line up in tables.
  • The sketch engine has a wedge head serif that it never draws (it reads p.lc, which is never set); the font keeps the flat serifs the sketch shows.
  • Italic capitals other than A C G M N O Q V W are slanted roman with unbracketed serifs.
  • Two optical sizes (10 and 60) instead of a continuous opsz.

Open items: 0.2 MATH table, OCR at 10 px (g, f, ligatures, word space), Ξ is light, more kerning, Latin Extended-A and Greek accents, hinting. 0.3 variable font. Not merged and not tagged: merging needs the founder's OK for this PR; then release with Actions → release → Run workflow, tag warp-v0.1.0, and a new site-v*.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UHtj1XPp34FFs8LVpY1PRF