TrueType & Variable Font Builder
Turn glyph outlines or a grid font into a verified TTF, including variable weight fonts.
Try an example: Variable starter font with Light and Bold masters · Static font with a ligature and an open license · Grid font traced into outlines
How it works
Paste a Lumina font project (glyph outlines with Light and Bold masters, kerning, ligatures) or a Grid Font Builder project and get an installable TrueType font. Variable fonts get fvar, gvar, avar, STAT and HVAR tables. The font is read back and every outline, character mapping, checksum and master is verified.
- Glyph outlines use the UFO point model: line, cubic curve (two off-curve points), quadratic qcurve and off-curve points, closed contours, y up from the baseline. Cubic segments are split into the fewest quadratic pieces (up to 16) that stay within the curve tolerance in every master, measured at 31 points per piece; coordinates are then rounded to whole font units.
- The writer produces sfnt 1.0 TrueType with head, hhea, maxp 1.0, OS/2 version 4, name, cmap formats 4 and 12, post 3.0, hmtx, glyf and loca, GDEF glyph classes, GPOS pair kerning (lookup type 2, format 1) and GSUB ligatures (lookup type 4). Table checksums and head.checkSumAdjustment follow the OpenType specification. A .notdef box is added when the project has none.
- With two or more masters the font becomes variable: fvar axes and named instances, gvar deltas for every point plus the four phantom points (advance changes), HVAR advance deltas, GDEF item variations for kerning, STAT axis values and avar when an axis map is given. Every non-default master must sit at the minimum or maximum of one axis and must be point-compatible with the default master.
- Grid Font Builder projects are traced: each brick contributes its edges, shared edges cancel, and the remaining edges are linked into merged contours (outer clockwise, counters counter-clockwise), with an 8 × 8 grid filling the em square above the baseline.
- Verification parses the written file with Lumina's own reader: table and whole-font checksums, glyph count, every character mapping, every outline point, advances and side bearings, kerning pairs, ligatures, and for variable fonts every master and named instance through gvar, HVAR and kerning variations. Automated tests additionally load the fonts with FreeType (fontconfig) and Chrome.
Fonts you build belong to you; add your own license text. The builder writes no hinting instructions, so small sizes on Windows can look softer than hinted fonts. WOFF2, CFF outlines, composite glyphs, mark positioning and contextual features are not written.
Sources
Part of Lumina
-
Lumina Photo editor & image toolkit
Bring out what you saw. A free photo studio, right in your browser.
Related tools
- Font File Inspector & Glyph Coverage – Read TTF, OTF and WOFF names, tables, metrics, axes, kerning and Unicode coverage.
- Letterform Mask Comparison – Compare two binary text masks by letterform overlap and aspect ratio.
How to use the TrueType & Variable Font Builder
Turn Lumina glyph outlines or a Grid Font Builder project into an installable TTF or variable TTF, with every table read back and verified.
What it is for
You drew letters in Lumina's Font Foundry or bricked them in Grid Font Builder and now want a real font file you can install, use on a website or hand to a designer. The builder takes the project JSON and writes a TrueType font: outlines, character map, metrics, kerning, optional ligatures and, when the project has a Light and a Bold master, a variable font with a weight axis.
It is the same engine Type Lab uses, so a project exported in the app and sent through the API gives a byte-identical file for the same date. It does not design letters for you, add hinting, or convert existing commercial fonts.
Worked example
We ran the first example, the original Lumina Starter project (H, I, L, O, T, V and a space, each in a Light and a Bold master), with Font type set to Variable font (all masters).
- File: LuminaStarter-Light-VF.ttf, 2432 bytes, 8 glyphs (a
.notdefbox is added), 7 characters, 7 kerning pairs. - 16 tables, including
fvar,gvar,HVAR,STAT,GPOSandGDEF. - Named instances: Light 300, Regular 400, Medium 500, SemiBold 600 and Bold 700.
- The O's curves are cubic in the project: 8 cubic segments became 20 quadratic pieces, with a largest deviation of 0.829 font units before rounding.
- Every read-back check passed.
The second example builds a static font with an open license text and an L_T ligature: LuminaStarterStatic-Regular.ttf, 1940 bytes, 9 glyphs and 6 kerning pairs (the zero-value pair is dropped). A Grid Font Builder project called "Brick Sans" with H, I, O and space became a 1072-byte font with 5 glyphs.
How to read the result
- Download gives the
.ttf. API and MCP results also carryfontBase64for fonts up to 256 KB, plus thesha256of the file. - Read-back checks parse the written file again: table checksums, the whole-font checksum adjustment, glyph count, every character lookup, every outline point, advances and side bearings, kerning and ligatures. For variable fonts it also checks that each master is reproduced through
gvar,HVARand the kerning variations, and that intermediate instances match linear interpolation. - Variation axes and named instances lists the locations a font menu will show.
- Font tables shows each table's size and checksum, useful when you compare builds.
- Warnings point out a missing license text, missing space character or glyphs that no character reaches.
Tips and common mistakes
- A variable font needs point-compatible masters: same contours, same point count and the same on/off-curve pattern. The error names the first glyph and contour to fix; a static font of either master still builds.
- Non-default masters must sit at the minimum or maximum of one axis. Put the default master first.
- Leave Creation date empty for reproducible files; fill it in for a release so font managers show a real date.
- Lower the project's
tolerancefor smoother curves (more points), raise it for smaller files. - Add a license in the project; the font belongs to you, but users only know what they may do if you say so.
- Test small sizes on Windows: there is no hinting.
FAQ
Is the output a real, installable font?
Yes. It is a standard sfnt TrueType file. Our tests load it with FreeType and Chrome and measure that rendered widths match the advances and kerning.
Can I upload an existing OTF or TTF?
Not here. Font Foundry in Lumina can open a TrueType file for editing as a project; this tool builds from project JSON.
Why does a cubic curve change slightly?
TrueType outlines are quadratic. Each cubic is split until every piece stays within the tolerance, then coordinates are rounded to whole units.
Does it write WOFF2 or OTF with CFF outlines?
No. It writes TrueType outlines only; compress to WOFF2 with your build tools if you serve the font on the web.
Guide last updated:
For scripts and AI agents
- JSON API:
POST https://luminafontbuilder.usefulweb.app/api/v1/calculate(same calculation as this page) - Interface description: OpenAPI 3.1 · AI guide: llms.txt
- MCP server (Streamable HTTP):
https://luminafontbuilder.usefulweb.app/mcp· tool namelumina_font_builder
Example request
curl -s -X POST https://luminafontbuilder.usefulweb.app/api/v1/calculate \
-H 'content-type: application/json' \
-d '{…see OpenAPI examples…}'