Skip to content

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

Merged
ricardofrantz merged 3 commits into
mainfrom
warp/v0.1
Oct 28, 2026
Merged

ricardofrantz merged 3 commits into
mainfrom
warp/v0.1

Conversation

@ricardofrantz

@ricardofrantz ricardofrantz commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

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

View guided diff

Port the approved sketch 0.2 engine (pen model, glyph tables) to
Python, add the new glyphs (ASCII, Latin-1, marks, Greek, maths),
union the sweeps with skia-pathops and fit cubic outlines. Six static
styles: machine-made Warp Regular, Italic, Bold, Bold Italic and
machine-made Warp Display Regular, Italic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHtj1XPp34FFs8LVpY1PRF
Add pytest (node test against the sketch engine), the proof sheets,
the outline fidelity report and the OCR readability gate. Fix the
open A counter, Greek small caps, feature order, names and widths
found by Fontspector and the proofs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHtj1XPp34FFs8LVpY1PRF
Add warp/BRIEF.md (name check, metrics, styles), STATUS.md,
CHANGELOG.md and RELEASE-NOTES-0.1.md; .github/workflows/warp.yml and
a warp job in release.yml; package_release.sh packs Warp. List Warp in
README, STATUS, CHANGELOG and LICENSING. Site: a Warp page after the
sketch page (ivory, hairline rules, small capitals) with a style
switch, a paragraph from a paper, Greek, figures and small caps and
the glyph map; Warp on the home and download pages and in the nav.
Lighter @, italic ß on the baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHtj1XPp34FFs8LVpY1PRF
@coderabbitai

coderabbitai Bot commented Oct 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Central YAML; Path: .coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6b450e07-2167-4b67-9d53-c40d3002ba23

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-ai

cubic-dev-ai Bot commented Oct 27, 2026

Copy link
Copy Markdown

This PR has 8,804 reviewable changed lines after ignored/generated files are excluded, above this repository's 5,000-changed-line automatic review limit. The raw diff is 22,281 lines before ignored/generated files are excluded.

Most of the diff comes from:

  • warp/loom/sketch.py (~1,484 changed lines)
  • warp/loom/extended.py (~1,011 changed lines)
  • warp/reference/warp-sketch-0.2.js (~808 changed lines)
  • proofs/warp/sketch-compare.json (~761 changed lines)
  • warp/loom/engine.py (~535 changed lines)

Comment @cubic-dev-ai review this to review it anyway. If the largest files are generated or fixture data, add them to your ignored files in review settings or reviews.ignore.files in cubic.yaml. Later automatic reviews cover only subsequent changes. Request a full review to revisit earlier changes. You can also raise this limit in review settings.

@ricardofrantz
ricardofrantz merged commit 7a8b6b2 into main Oct 28, 2026
3 checks passed
@ricardofrantz
ricardofrantz deleted the warp/v0.1 branch October 28, 2026 08:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants