devlog.

Project · Wordmark generator

Glyphsmith

Glyphsmith draws logos. Give it a word, a tagline, an accent colour and a shape for the project's own motif, and it hands back an SVG wordmark and a square icon — set in an alphabet that is not a font. Every letter is a hand-drawn stroked path on a 100-unit grid, so nothing it generates carries a third-party licence. It drew its own logo too, through the same public API any other project would use.

79
Glyphs — letters, digits, punctuation, currency, maths, arrows
24/79
Inherited unchanged, from marks already shipping
14/14
Marks reproduce byte for byte
0
Third-party fonts, anywhere in it

Counted straight from the repository as committed: glyphsmith coverage for the alphabet split, python3 gallery/verify.py for the reproduction check.

The Glyphsmith wordmark: nine finished letters and, where the I would be, the letter shown as its own construction — ghosted ink, a hairline centreline, and a ring at each terminal — over a metrics comb the width of the word, closed by an ember full stop.
Where the I of GLYPHSMITH would sit, the letter is shown as its own construction instead: the ink it will be stroked into, ghosted back; the centreline, which is the only thing this repository actually stores; and a ring at each terminal, where the round cap lands. Nine finished letters and one drawing, in the same word.

What it does

The grid

A centreline, not an outline

What a glyph file stores is not the letter's outline — it is the centreline, the path a pen travels, stroked at 26 units with round caps and round joins on a 100-unit cap grid. A stroke that wide sticks out 13 either side of its centreline, so every endpoint is inset by 13 from the edge it should touch.

'I': (26, ["M13 13 V87"]),
'H': (66, ["M13 13 V87", "M53 13 V87", "M13 50 H53"]),
'O': (64, ["M32 13 A19 37 0 1 0 32 87 A19 37 0 1 0 32 13"]),
glyphsmith/alphabet.py — three of the seventy-nine

Only five path commands appear anywhere: M, L, H, V, A. No cubics. A letter that needs a curve you cannot draw with a straight edge and an ellipse is not in this alphabet's vocabulary.

The generator

Word, tagline, accent, motif

Every mark in the family is the same composition: a panel, the wordmark set in the house alphabet, an accent-coloured full stop closing it, and a tagline underneath. The one part that was ever project-specific is the motif — a shape that can stand in a letter's own place inside the word (TerminalGB's block cursor works this way, because a block cursor hides the glyph beneath it and that is what a terminal actually shows), run in a band under the word, or stand before it.

The layout is done in glyph units and converted once, which is what keeps a mark's proportions identical whether it is drawn 1200 units wide or 1400.

Mark(
    word="ATLASGB",
    tagline="A MEMORY MAP WITH EVIDENCE",
    accent="dmg",
    motif=RegionBar(),
    scale=1.42, cap_y=84, tagline_y=306, band_y=262,
)
gallery/specs.py — AtlasGB's whole specification, the shape aside

The proof

It drew its own logo

brand/make.py imports glyphsmith from outside the package and calls Mark exactly the way any other project would — there is no hand-drawn artwork anywhere in this repository, including its own front page.

  • Its motif replaces the I in GLYPHSMITH with the letter's own construction: ghosted ink, a hairline centreline, and a ring on each terminal
  • Under it runs the word's own metrics comb — a rule the width of the mark with a tick where each letter's advance ends. Every other band in the family stands for something outside the mark: RAM regions, scenes, a skyline. This one stands for the mark itself
  • The icon is the letter G and the accent full stop, set by the same call that sets the wordmark
  • A test asserts the wordmark's letters are the shared alphabet's letters, so the logo cannot quietly acquire private letterforms

The licence

No font, anywhere

No font is embedded, subset or traced in this repository, and none was consulted to draw the letters. Seven projects were each already carrying a private copy of this alphabet, unchanged, character for character — a licensed font at this point would have meant clearing the same licence eight times over, or admitting a font had quietly been informing marks that were supposed to be original artwork.

The code and the letterforms are Apache-2.0: fork them, extend them, ship commercial marks drawn with them. The name Glyphsmith, and the seven project names and wordmarks in the gallery below, are not licensed for reuse — NOTICE draws that line.

The alphabet, at 79

A second pass took the alphabet from 63 glyphs to 79: the rest of ASCII completion (` ^ ~ | { }), four currency marks ($ £ ¥), a true minus built to the same 64-unit width as + and = plus a multiply sign, and all four arrows. None of the settled 63 moved, and all 14 marks already in the wild still reproduce byte for byte.

The complete Glyphsmith alphabet: A to Z, 0 to 9, the punctuation, currency, maths and arrow symbols, with the glyphs drawn for Glyphsmith picked out in ember against the inherited letters in white.
specimen/alphabet.svg — drawn by glyphsmith specimen

What this alphabet has drawn

Seven marks existed before Glyphsmith did, each set by its own private copy of the same generator. All seven come out byte for byte identical to what their own repositories ship.

TerminalGB wordmark: a solid block cursor stands where the I would be, closed by a green full stop.
TerminalGB — a Game Boy and Game Boy Color emulator. The motif is a block cursor, standing where the I would be.
AgentGB wordmark: the wordmark over a D-pad and a button.
AgentGB — a network that plays the game from the screen alone. The motif is a D-pad and a button, under the word.
AtlasGB wordmark: the wordmark over a four-segment region bar.
AtlasGB — memory maps with the evidence attached. The motif is four RAM regions, drawn as a bar.
PixelGB wordmark: a sheet stitched from four pieces stands before the wordmark.
PixelGB — every map photographed from a running cartridge. The motif is a sheet stitched from four pieces, before the word.
GBSelfTest wordmark: a tick stands before the wordmark.
GBSelfTest — a cartridge that tests the machine it's running on. The motif is a tick, before the word.
AsciiWorldEngine wordmark: a setback tower stands where the second I would be, over a cyan skyline.
AsciiWorldEngine — a walkable city in a terminal. The motif is a setback tower over the second I, with a skyline running beneath the word.
ShowReel wordmark: a lens iris stands where the O would be, over an amber timeline of overlapping scenes.
ShowReel — describe a film and render it. The motif is a lens iris over the O, with a timeline of overlapping scenes beneath.
Glyphsmith icon: the letter G and an ember full stop. TerminalGB icon: a block cursor. AsciiWorldEngine icon: a setback tower. ShowReel icon: a lens iris. AtlasGB icon: a stacked region bar. AgentGB icon: a D-pad. GBSelfTest icon: a tick. PixelGB icon: a stitched sheet of four pieces.
At icon size the motif is the whole mark. Left to right: Glyphsmith, TerminalGB, AsciiWorldEngine, ShowReel, AtlasGB, AgentGB, GBSelfTest, PixelGB.

Where each motif sits

MarkMotifWhere it sits
TerminalGBa solid block cursorin the word, over the I
AsciiWorldEnginea setback tower, and a skylinein the word, over the second I, and beneath
ShowReela lens iris, and a timelinein the word, over the O, and beneath
AtlasGBfour RAM regions as a barbeneath the word
AgentGBa D-pad and a buttonbeneath the word
GBSelfTesta tick, at the letters' cap heightbefore the word
PixelGBa sheet stitched from four piecesbefore the word
Glyphsmitha letter shown as its skeleton, and the word's own metricsin the word, over the I, and beneath

Three of these replace a letter rather than decorate the word. The idea is the same each time: the motif stands where a glyph would, on the glyph's own grid, because it is saying something the letter cannot.

Ten icons, in the same hand

The construction

A centreline on the letters' own grid

play, check, cross, warning, folder, doc, clock, home, chevron, terminal — ten everyday marks, each a centreline on the same 0–100 cap grid a letter lives on, stroked at the same 26 with the same round caps and joins. Beside a word set in this alphabet, an icon reads as the same weight and the same temperature, not as clip-art dropped in.

warning is the one exception: a triangle at this stroke fills solid, so its exclamation is knocked out in the panel colour — the same iris technique already carving detail out of ShowReel's lens and AsciiWorldEngine's setback tower.

The lockup

IconMotif wears one like a word

An icon is drawn through the same public path as a glyph, so IconMotif plugs one straight into Mark as a square lockup — the job TerminalGB's block cursor and GBSelfTest's tick already do, with no new drawing code.

mark = Mark(word="RUNNER", tagline="SHIP IT", motif=IconMotif("play"))
open("icon.svg", "w").write(mark.icon())
docs/icons.md — a house icon set as a mark's square lockup
Ten icons drawn in the house alphabet's stroke — play, check, cross, warning, folder, doc, clock, home, chevron, terminal — captioned in the alphabet itself.
specimen/icons.svg — drawn by glyphsmith icons

Where the alphabet says no

A 26-unit stroke on a 100-unit cap is a quarter of the cap height. Two passes over the alphabet have run into that directly.

glyphsmith.MissingGlyph names the character and its code point when the alphabet is asked for one it does not have.


Where these numbers come from

Everything here was run against the repository as committed 28 Aug 2026: glyphsmith coverage for the 79/24/55 alphabet split, python3 gallery/verify.py for the fourteen-file byte-for-byte reproduction, and python3 -m pytest tests/ — 302 tests, including a small SVG path sampler that measures where each glyph's and each icon's ink actually sits rather than trusting the stored string.

The generator and the alphabet are Apache-2.0 — free to fork, extend, and draw commercial marks with. The name Glyphsmith, and the seven project names and wordmarks shown above, are not licensed for reuse; NOTICE draws that line in full.

← All projects