Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Flow tags and markup

Inline markers in dialogue text. {@…} tags are processed by the typewriter; BBCode stays for rich text.

Slow.{@cps=5} Fast.{@cps}
Wait…{@w=1.0} Go.
Page break.{@p}
Fine.{@c1} Then not.

Usually you need

TagEffect
{@w}Soft pause (skipped in fast / hold)
{@w=N}Timed pause N seconds
{@cps=N} / {@cps}Mid-line speed / reset
{@cN}Run flow batch N while typing (1-based)
{flag}Print a flag value

All {@…} tags

TagEffect
{@w}Pause; click resumes; skipped in fast/hold
{@w=N}Timed pause N seconds
{@p}Pause + clear page on resume (not skipped by fast)
{@cN}Run flow_commands[N-1] when typing reaches this mark (1-based; does not pause). Script mid-line […] inserts these for you — Command flow, Pacing
{@cps}Reset CPS to theme / typing default
{@cps=N}Override characters per second
{@talk:id}Switch talking / focus (parser also inserts on speaker change)
{@phN}Mode B: phrase from script line N (1-based)
{@auto}Labelplate speaker expansion

Flag interpolate: {flag}. Escape braces with {{ / }}.

Typing defaults: Typing · typing.

BBCode

Known tags are markup (skipped by the typing clock). Common ones: b, i, u, s, color, url, code, center, right, left, img, font, font_size, cell, table, ol, ul, p, br, indent, bgcolor, fgcolor, outline_color, outline_size, opentype_features.

Unknown [word] (for example [alt]) stays literal on the panel so typing stays in sync — it is not treated as a command or as hidden markup.

To show real square brackets (or to print a tag name literally), use [lb] / [rb] → [ / ]. Example: [lb]b[rb]bold[lb]/b[rb] displays [b]bold[/b].

Clickable [url] (body metas)

Authors write [url=META]label[/url] in dialogue text. Clicks run only on the primary panel, after the line is waiting (typing finished or paused on {@w} / {@p}), and only when the press was a tap (not a scroll drag). Wheel and drag still scroll; empty body taps still Continue.

Map keys with node text_metas (Mode B / JSON; Mode A overlay on a script node):

{
  "id": "inspect_desk",
  "text": "See the [url=codex]Codex[/url].",
  "text_metas": {
    "codex": "url:https://example.com/codex",
    "door": { "type": "jump", "to": "shed" }
  }
}
ResolutionResult
text_metas has key METARun that payload
Else META is http:// or https://Open as url:META
ElseIgnore (warning once per key)

Allowed map values: url:… strings, or a single { "type": "jump", "to": "…" } / { "type": "set_flag", "values": { … } } object. No command arrays.

PayloadAfter a successful click
url:… / bare http(s)Stay waiting — Continue still needed
{ "type": "set_flag", … }Stay waiting
{ "type": "jump", … } (or a screen push that leaves the beat)Consume wait — no second body tap

[hint] stays visual-only (no click wiring). Append history / readonly panels do not fire metas.