Meet the phrase: just this. Every card below is a different way for it to arrive, breathe, glow, scramble, or misbehave — programmatic text animation, from a thin-to-bold crescendo to a typewriter with moods to a slot machine that scrolls wrong glyphs until the right ones land. Each effect is a living loop (it keeps moving while nobody touches it) plus a press reaction (click a running card to replay its arrival, trigger its flourish, or aim it — some effects use where you click). If the bestiary was buttons possessed by elements and the codex was effects worn by a character, the grimoire is what a phrase can do: fourteen families, from weight and glow to particles and shadow. Press ▶ Run all, or click any single card to wake just that one. Under each card, open code loads its full source into the editor at the bottom — every effect is ~25–45 lines, self-contained, and editable.
Every spell also hides a rhyme. A rhyme is the same effect with two or three dials turned — a palette, a speed, a direction, a count — and nothing else. Click ⇄ its rhyme on any card to swap them in place (104 more demos, folded into the same cards), then open code to read the pair side by side: the rhyme's opening comment names exactly which dials moved. The Crescendo becomes the Diminuendo by reversing one variable; the Typewriter becomes the Heavy typewriter by slowing the cadence and adding a stamp; the Matrix rain becomes Blossom rain by flipping a fall direction and warming a palette. Once a recipe is understood, its neighbours are nearly free. The rhymes travel with the Godot port too: in the downloadable project, right-click any card to swap original ⇄ rhyme — each family file scenes/textfx/<family>.gd has a sibling <family>_r.gd that overrides only the branches whose dials moved, so diffing the pair is the same lesson in GDScript.
Every effect is one function, make(u), returning { frame(dt, t), press(x, y) }. The kit u: ctx, W, H (canvas), PHRASE ("just this" — swap it; everything is measured, not hard-coded), MID (the baseline y), BASE (the resting font size), layout(size, spacing, weight) — the heart of the whole page: it measures the phrase and returns one entry per character, { ch, i, n, x, cx, w, y }, so every effect is just a loop over letters deciding where, how big, what colour, and whether yet. Plus font(weight, size) (300–700 are real weights), stage() (the backdrop), glow(x, y, r, colour), scramble() (one wrong glyph), rand(a, b), TAU.
The preview is bigger than the cards, and every effect is written relative to W, H, MID, and BASE — the same code scales up without edits. Click the preview to trigger the press reaction.
PHRASE in your head first — then change a cadence (the typewriter's 0.12), a period (the firefly's 3.6 seconds), a gravity (the bounce's 9), or a palette, and you've invented effect #105. The universal anatomy is: layout() gives you the letters; you decide, per letter, where it is, how big, what colour, and whether it exists yet. That one sentence is most of text animation.In Godot: all 104 are ported — fourteen family files in scenes/textfx/, paged by family in text_fx.gd (grab the Godot project and press its menu's D). The kit's phrase layout, glow, and scramble helpers live in scenes/textfx/kit.gd; on real UI you'd hang the same math on a Label with per-character draw_char, or a RichTextLabel with custom BBCode effects. In Unity: TextFx2D.cs (one TextMesh per letter + eight equippable effects) and TextFx3D.cs (letters with real depth: orbit arrivals, extrusion stacks, a following light) — attach one script, press Play. In Unreal: SSTextFx is the per-letter TextRender actor for 3D (and 2D-in-3D), and recipes/text-fx.md maps all fourteen families onto UMG (the true 2D route) and TextRender + Niagara + materials (the 3D route). Chapter 13 is the full encyclopaedia entry: the anatomy, the families, and every engine's spelling.