An animated, looping pan/zoom SVG scene composed from a provenance-verified prop kit (original MIT artwork, each asset pinned by sha256 and restricted to an allowlist of SVG elements). Give a preset and the layout, backdrop, props and motion come from it; or write the layout in full. Props are referenced by id and never as SVG, so the agent cannot introduce script or external references. For a one-off shape use agent_sketchpad; for a diagram use a chart or d2 atom.
| Surface | Note |
|---|---|
| google-apps-script-web | The renderer source is in the repo, but the deployed Apps Script project predates the scene kit (it is at the 200-version cap), so a ?p= link there does not draw the scene until that project is migrated. |
| web | The Python static renderer (renderers/web_article.py) cannot run the engine; it shows the title and a note instead. Use the MCP Apps surface for the animation. |
| google-meet-stage | Animated SVG (SMIL) should play, but this has not been verified on the Meet stage runtime. |
| google-chat | No inline SVG in Chat cards; falls back to a still image rendered by the headless-Chromium fallback. |
| Renders the first frame as a still image. |
| Field | Type | Required |
|---|---|---|
| preset | string. A ready-made place; supplies backdrop, ground, stage, camera, scenery and actors. PREFER a preset when one fits (it is a tested layout), and extend it with scenery_add / actors_add instead of rewriting it. One of: airfield, arctic-station, bedroom, boardroom-meeting, bus-stop, cafe, call-centre, ci-cd-factory, city-skyline, construction-site, container-port, corner-shop, data-centre, desert-oasis, drone-delivery, factory-assembly-line, farm-harvest, fire-station-response, forest-campfire, highway-interchange, home-kitchen, hospital-helipad, hospital-ward, hydro-dam, kanban-war-room, keynote-stage, laboratory-bench, library-archive, lighthouse-coast, living-room, message-post-office, metro-station, mine-quarry, mission-control, museum-gallery, observatory-night, offshore-platform, open-office, railway-station, restaurant-kitchen, river-ferry, school-classroom, school-yard, ski-resort, solar-farm, space-station-orbit, street-market, substation-grid, trading-floor, vertical-farm, warehouse-logistics, water-treatment, wind-farm. | optional |
| title | string (optional, max 80 chars). Accessible name and caption. Default is the preset id. | optional |
| seed | integer (optional, 0..4294967295). Varies cloud and star placement. Default derives from the preset. | optional |
| theme | {time: "dawn"|"day"|"dusk"|"night", weather: "clear"|"cloudy"|"overcast", setting: "countryside"|"coast"}. Default day, clear, countryside. time: dawn = early morning, day = midday and afternoon, dusk = evening, night. Interiors dim with the time of day. | optional |
| motion | {duration: number 6..40} (optional, seconds per loop). Default 20. | optional |
| camera | {mode: "static"|"pan"|"push-in"}. The preset has a default; without a preset the default is static. | optional |
| accent | string (optional, #rrggbb). Tints props that take an accent colour. | optional |
| backdrop | "sky-city"|"sky-hills"|"sky-sea"|"sky-mountains"|"sky-desert"|"sky-arctic"|"sky-flat"|"space"|"interior-office"|"interior-industrial"|"interior-lab"|"interior-civic"|"interior-home"|"interior-dark" (required when there is no preset). | required |
| ground | "grass"|"road"|"sand"|"snow"|"concrete"|"wood"|"water"|"none" (required when there is no preset). | required |
| stage | {width: 600..4000, zoom: 500..3200, focus_y: -800..200} (required when there is no preset). Scene units: x runs left to right from 0 to stage.width; the ground line is y=0, up is negative and positive y is toward the viewer. | required |
| scenery | array (optional, default empty; max 80) of {prop, x, y?, scale? 0.2..5, flip?, variant?, anim?}, or of {sketch, x, y?, scale?, flip?, anim?} when no prop fits, or of {label, x, y?, scale?, size?, colour?, align?, bold?} for real text (see LABEL below). THE ESCAPE HATCH: give `sketch` instead of `prop`, an array of 1..40 SVG element strings (one element per string, origin at the ground point, up negative), e.g. [" | optional |
| actors | array (optional, default empty; max 30) of {prop, motion: "walk"|"ride"|"drive"|"fly"|"hover"|"orbit"|"takeoff"|"land", x0, x1, y, period 3..120, phase 0..1, scale?, variant?, ry?, anim?, size?, colour?, align?, bold?}. Movers that loop; y is a lane, 40..120 passes in front of props standing on the ground. takeoff rolls a plane along the ground, rotates and climbs away (ry = climb height, default 260); land descends, flares and rolls out. anim (see scenery's ANIMATION docs) layers an idle motion on top of the actor's own engine motion. A sketch (see scenery's field docs, including REUSE) or a label (see scenery's field docs) can be an actor too, moving on the same motion, instead of prop. A prop's suitable motions are its "moves" in the asset index. | optional |
| scenery_add | array (optional, max 80 in total with the preset) of the same items as scenery. Appended to the preset's scenery instead of replacing it, e.g. add a cow and a chicken to farm-harvest. | optional |
| actors_add | array (optional, max 30 in total with the preset) of the same items as actors. Appended to the preset's actors instead of replacing them. | optional |
{
"type": "scene_stage",
"backdrop": 1,
"ground": "Ground",
"stage": "Stage"
}
{
"identifier": "urn:air:a2uicatalog.ai:atom:scene_stage",
"displayName": "Scene Stage",
"type": "application/vnd.a2ui.atom+json",
"url": "https://a2uicatalog.ai/atoms/scene_stage",
"capabilities": [
"mcp-apps",
"android"
],
"description": "An animated, looping pan/zoom SVG scene composed from a provenance-verified prop kit (original MIT artwork, each asset pinned by sha256 and restricted to an allowlist of SVG elements). Give a preset and the layout, backdrop, props and motion come from it; or write the layout in full. Props are referenced by id and never as SVG, so the agent cannot introduce script or external references. For a one-off shape use agent_sketchpad; for a diagram use a chart or d2 atom.",
"representativeQueries": [
"show a animated looping SVG scene of a place (53 ready presets) from verified clipart",
"an animated, looping pan/zoom svg scene composed from a provenance-verified prop kit (original mit a",
"render a scene stage"
]
}
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 →