Wave Terrain

Full-bleed animated hero background: a live terrain flyover drawn as receding ridgelines. Rows of noise-shaped hills scroll toward the viewer while their heights keep evolving on the same value-noise field that drives flow_field, so the landscape never repeats; each row is filled with the background so nearer ridges occlude farther ones, and colour shifts along the palette from the horizon to the foreground. A calm valley runs down the middle with relief rising toward the edges. The pointer steers the camera sideways with a gentle parallax. The live sibling of the static, drag-to-rotate isometric_mesh. Optional eyebrow/title/body copy sits behind a readability veil. Honours prefers-reduced-motion (one still frame, no loop), pauses when scrolled offscreen, DPR-aware. Pure canvas + requestAnimationFrame, zero dependencies, on the same shared kit as flow_field. Every option is an enum or a clamped integer and colours must be #rrggbb: the config is baked into inline script, so nothing free-form ever reaches it. Dark backgrounds only.

Surfaces
webgoogle-meet-stagegoogle-apps-script-webmcp-appsandroid
Degraded on
SurfaceNote
pdfRenders as a plain dark panel with the overlaid copy; the canvas is empty without JavaScript
google-chatInline script not supported; renders as a solid dark panel with the copy
Live preview
Fields
FieldTypeRequired
titlestring. Headline overlaid on the scene.optional
eyebrowstring. Small uppercase label above the title, tinted with the first palette colour.optional
bodystring. Supporting copy under the title (markdown inline supported).optional
align"left" | "center" | "right" (optional, default "left"). Where the overlaid copy sits; the veil that keeps it readable follows it.optional
colorsarray of 1-4 "#rrggbb" strings. Default ["#38bdf8","#818cf8","#f472b6"]. Ridgelines blend from the first colour at the horizon to the last in the foreground; the first also tints the horizon glow. Invalid entries are dropped.optional
background"#rrggbb". Default "#070a12". Keep it dark.optional
density"low" | "normal" | "high" (optional, default "normal"). Number of ridgeline rows: 22 / 34 / 48.optional
relief"low" | "normal" | "high" (optional, default "normal"). How tall the hills are.optional
scale"fine" | "normal" | "broad" (optional, default "normal"). Width of the hills across the terrain.optional
speed"slow" | "normal" | "fast" (optional, default "normal"). Flyover speed.optional
heightinteger. Panel height in px, clamped 200-900. Default 380.optional
interactivebool. Pointer steers the camera sideways. Default true.optional
Example payload
{
  "type": "wave_terrain"
}
ARD catalog entry
{
  "identifier": "urn:air:a2uicatalog.ai:atom:wave_terrain",
  "displayName": "Wave Terrain",
  "type": "application/vnd.a2ui.atom+json",
  "url": "https://a2uicatalog.ai/atoms/wave_terrain",
  "capabilities": [
    "web",
    "google-meet-stage",
    "google-apps-script-web",
    "mcp-apps",
    "android"
  ],
  "description": "Full-bleed animated hero background: a live terrain flyover drawn as receding ridgelines. Rows of noise-shaped hills scroll toward the viewer while their heights keep evolving on the same value-noise field that drives flow_field, so the landscape never repeats; each row is filled with the background so nearer ridges occlude farther ones, and colour shifts along the palette from the horizon to the foreground. A calm valley runs down the middle with relief rising toward the edges. The pointer steers the camera sideways with a gentle parallax. The live sibling of the static, drag-to-rotate isometric_mesh. Optional eyebrow/title/body copy sits behind a readability veil. Honours prefers-reduced-motion (one still frame, no loop), pauses when scrolled offscreen, DPR-aware. Pure canvas + requestAnimationFrame, zero dependencies, on the same shared kit as flow_field. Every option is an enum or a clamped integer and colours must be #rrggbb: the config is baked into inline script, so nothing free-form ever reaches it. Dark backgrounds only.",
  "representativeQueries": [
    "show a live flyover of noise-shaped ridgelines scrolling toward the viewer, hero background",
    "full-bleed animated hero background: a live terrain flyover drawn as receding ridgelines. rows of no",
    "render a wave terrain"
  ]
}
← 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 →