Motion Text

Kinetic type. The text reveals unit by unit as p goes 0 to 1: per line, word or character (or all at once), with reveal "mask" (each unit slides up out of a clipped line, the signature designed look), "rise", "drop", "fade" or "blur". Sized in px on the stage, so the composition is identical at any width, and coloured from the stage theme unless a colour is given. Screen readers get the plain text. Standalone it renders fully revealed. Plain HTML and CSS, no script: it moves with the --p custom property that a motion_timeline p track sets, and standalone it renders its final state.

Surfaces
webgoogle-meet-stagegoogle-apps-script-webmcp-appsandroid
Degraded on
SurfaceNote
pdfPrints the final state (type fully revealed, numbers at their values, shapes drawn); no motion
google-chatInline CSS functions and custom properties are not supported
Live preview
Text
Fields
FieldTypeRequired
textstring (max 4 lines of 60 characters, 160 total; lines split on \n). Default "Text". A word between asterisks (*plan*) takes the accent colour, whichever way the text reveals; two asterisks in a row are a literal one.required
sizeinteger. Font size px, 10-400. Default 64.optional
font"sans" | "serif" | "mono" | "display" (optional, default "sans"). display is a heavy grotesque.optional
weight"regular" | "bold" | "black" (optional, default "bold")optional
mode"lines" | "words" | "chars" | "block" (optional, default "lines"). What reveals in turn. lines never wraps; more than 120 units falls back to block.optional
reveal"mask" | "rise" | "drop" | "fade" | "blur" | "bar" | "flap" | "reel" | "pop" | "decode" | "bloom" (optional, default "rise"). bloom condenses each unit in place out of a bright, glowing blur: it starts about 60% brighter with a soft halo and a 0.4em blur at 90% size, and halo, brightness and blur fall away as it sharpens (no slide; blur only defocuses, decode swaps glyphs, bloom adds the glow). Pair with a long overlap (4-8) and mode words or lines so the glow runs through the whole line. pop scales each unit up past full size and settles (an overshoot). decode shows seeded random characters that resolve into each unit (the real text is always in the page; the noise is aria-hidden). bar wipes a coloured highlight bar in behind each unit, then the text appears on it. flap is a slot-reel flip: three decoy glyphs scroll past in each unit before the real one lands (best with mode chars). reel stacks the lines on one row and the second dial (--s) moves the focus down the list: the focused line is sharp, the others dim, shrink and blur with their distance (a scrolling text reel); at --s 1 the last line is in focus.optional
overlapinteger. How many units are mid-reveal at once, 1-8. Higher is softer. Default 3.optional
trackingnumber. Letter spacing in em, -0.1 to 0.5. Default -0.02.optional
line_heightnumber. 0.8-2. Default 1.05.optional
color"#rrggbb". Default the stage ink.optional
align"start" | "middle" | "end" (optional, default "start")optional
uppercasebool. Default false.optional
accent"#rrggbb". Colour of words wrapped in asterisks. Default the stage accent.optional
accent_gradient["#rrggbb", "#rrggbb"]. Two colours that run across the accent words (the ones in asterisks) instead of the flat accent colour.optional
glowinteger. A soft glow behind the type, 0-40 px. Default 0 (off).optional
glow_color"#rrggbb". Colour of the glow. Default the accent.optional
shinebool. A band of light that sweeps across the letters as the second dial (--s) goes 0 to 1. Default false.optional
cyclearray (2-6) of strings, max 40 characters each. Words that swap in place with a blur crossfade as the second dial (--s) goes 0 to 1, after the text (or on their own when text is empty): on your phone / the web / the terminal. Take the accent colour.optional
bar"#rrggbb". Colour of the highlight bar for reveal "bar". Default the stage accent.optional
extrudeinteger. Depth in px of a solid 3D extrusion behind the type, 0-30. Default 0.optional
extrude_color"#rrggbb". Extrusion colour. Default "#0b0b14".optional
extrude_dir"diagonal" | "down" (optional, default "diagonal"). Which way the extrusion falls.optional
decor"strike" | "underline" | "highlight". A line that sweeps across each unit (line, word or character) in turn as the second dial (--s) goes 0 to 1: a strike-through (the text dims), an underline, or a marker highlight behind it. With no step track it shows finished.optional
decor_color"#rrggbb". The sweep. Default the accent.optional
karaoke"pill" | "color". Lights each unit (use mode words) in turn as --s goes 0 to 1, as a pill behind it or a colour change: the animated caption. Nothing is lit at 0 or 1.optional
splitinteger. Red and cyan copies pull apart by this many px at the peak of --s and sit together at 0: the chromatic glitch. 0-60. Default 0 (off).optional
split_a"#rrggbb". Left copy. Default a hot pink.optional
split_b"#rrggbb". Right copy. Default cyan.optional
prismarray (2-4) of words, max 14 characters each. A turning 3D prism after the text that cycles the words as the second dial (--s) goes 0 to 1 (one full turn): Build / Ship / Scale. Two words repeat to fill four faces. Needs at least two words, else ignored.optional
order"forward" | "reverse" | "centre" | "random" (optional, default "forward"). The order units reveal in: reading order, last first, from the middle outwards, or a fixed random order (see order_seed). The step-dial effects (karaoke, decor, wave) keep reading order.optional
order_seedinteger. 0-999. Seeds order random and the noise of reveal decode. Default 3.optional
accent_font"sans" | "serif" | "mono" | "display". A typeface for the words wrapped in asterisks, so one word can be set in serif inside sans text. Default none (the line face).optional
accent_style"italic". Sets the asterisk words in italic. Default none.optional
waveinteger. Letters ride a travelling vertical wave of this many px as the second dial (--s) goes 0 to 1, flat at both ends. 0-40. Default 0 (off). Best with mode chars.optional
start_scalenumber. 1-12. The whole line starts this many times its size, cropped by the box, and shrinks to its size as p goes 0 to 1: the oversize zoom-down. Default 1 (off). The box hides what falls outside it.optional
caretbool. A caret follows the unit being revealed and stays on the last one. Use with mode words or chars; lines and block have no caret. Default false.optional
Example payload
{
  "type": "motion_text"
}
ARD catalog entry
{
  "identifier": "urn:air:a2uicatalog.ai:atom:motion_text",
  "displayName": "Motion Text",
  "type": "application/vnd.a2ui.atom+json",
  "url": "https://a2uicatalog.ai/atoms/motion_text",
  "capabilities": [
    "web",
    "google-meet-stage",
    "google-apps-script-web",
    "mcp-apps",
    "android"
  ],
  "description": "Kinetic type. The text reveals unit by unit as p goes 0 to 1: per line, word or character (or all at once), with reveal \"mask\" (each unit slides up out of a clipped line, the signature designed look), \"rise\", \"drop\", \"fade\" or \"blur\". Sized in px on the stage, so the composition is identical at any width, and coloured from the stage theme unless a colour is given. Screen readers get the plain text. Standalone it renders fully revealed. Plain HTML and CSS, no script: it moves with the --p custom property that a motion_timeline p track sets, and standalone it renders its final state.",
  "representativeQueries": [
    "show a kinetic type that reveals by line, word or character as progress advances",
    "kinetic type. the text reveals unit by unit as p goes 0 to 1: per line, word or character (or all at",
    "render a motion text"
  ]
}
← Full ARD catalog
Deploy your own Google Apps Script renderer

The renderer is an open-source Google Apps Script web app. Deploy your own instance in 4 commands — you own the URL, no dependency on the demo endpoint.

git clone https://github.com/a2uicatalog/a2ui
cd a2ui/apps-script-surface/gas-wired-renderer
clasp push && clasp deploy
Full deploy guide →