Write motion graphic
write_asset[write · costs credits] Make a motion graphic, or rewrite one. Written as a React TSX module; the component gets the brand kit as a theme and, over footage, where faces, objects and burnt-in text are, and a new one is placed on the timeline. Use for lower-thirds, callouts, charts, kinetic type and stickers made to order; read get_motion_doc before non-trivial code. The preview is live, nothing is rendered. Returns asset {id, status}, its placement and the clip's {handle, lane}. Related: get_motion_doc, render_asset, list_assets, set_asset_sound. Full docs: load_skill with tools: [name].
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"project_id": "<project_id>"
},
"name": "write_asset"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kit | No | A ready-made engine to start a new graphic from, by its key (the tools/motion-graphics guide lists them), copied in, so `code` is not needed. | |
| bake | No | Fill props.beats and props.words from the sound under the graphic; the answer numbers the lines. | |
| code | No | The whole TSX module. Required for a new graphic unless `kit`; with assetId, omit it to change only files, inputProps, editableProps or the title. | |
| kind | No | What it is. Default custom. A new graphic only. | |
| files | No | Helper files by name, no extension: { engine: "…" } imports as "./engine"; { engine: { fromAsset: id } } copies a graphic's. An empty one is removed; the rest stay. | |
| items | No | Many graphics at once, max 40, each with this tool's fields; fields beside it are defaults. | |
| media | No | Library files by prop: { shot: assetId, pictures: [assetId, …] }; each prop gets the address, props.media the facts. | |
| place | No | false: make a new one without placing it. Default true. | |
| sound | No | A kit's own sounds play on its moves. "none": silent; { beat: sound } changes one (a library sound, an audio id or "none"). | |
| title | No | Its name. Default "Motion graphic". | |
| design | No | The look of a kit graphic: a design's name ("paper-cut"), the whole text of a design.md, or "none" for the kit's own. Left out, a new one takes the film's design and one taken again keeps its look. | |
| format | No | overlay (default, transparent) or fullframe. A new graphic only. | |
| layers | No | Each kit layer's start and name: { "row-2": { atMs: 1000, label: "So LOAD" } }. | |
| shapes | No | Props in `media` that are SVG files to read as shapes (props.media.<prop>.shapes). | |
| assetId | No | Motion graphic id from list_assets: rewrite it instead of making a new one. | |
| content | No | A collage kit's scene by what it says and shows, instead of inputProps: props, layers and camera come from it and the words, placed on its line unless placeAtMs or durationSeconds say otherwise. | |
| placeAtMs | No | Where a new one lands, timeline ms, on whole frames at both ends. Default the end. | |
| inputProps | No | The user-editable values the component reads, with sensible defaults. | |
| project_id | Yes | The AskEditor project this acts on (from list_projects). | |
| approval_id | No | Only when a previous call answered needs_approval: the approval_id it gave. Call again with it as soon as you have told the person where to approve: the call waits for their answer. | |
| audioClipId | No | The clip whose beats `bake` reads. Default: the music or speech under the graphic. | |
| layerAnchors | No | Layers started on a spoken word: { id: { on, nth?, leadMs? } }. | |
| editableProps | No | The values the person can adjust, one per inputProps key, written with the code; a value that changes one piece names its layer. | |
| coversCaptions | No | true: the captions under it are not drawn while it is up, as a title card does (a big lyric or title overlay). A new graphic only. | |
| durationSeconds | No | Length, seconds. Default 3; with assetId, its new length. |