Promo Motion Graphics
Takes a product/feature brief and produces a VIDEO directly. In the "Claude Design" visual language (warm ivory + terracotta + serif + spark, real UI + cursor, spark/gerund loader, light→dark reveal, plan checklist) it composes a second-by-second storyboard and a deterministic GSAP HTML animation, then renders it frame-by-frame to MP4 inside the worker (Playwright + ffmpeg) and writes it to the workspace drive. Output: a playable video URL.
Run it free in the playground, then call it from your app.
No inputs handy? Try one of these
For developers
Run it from your own stack.
This skill is an API. One call runs the whole pipeline server-side as a long-running job and returns the result — from Python, plain HTTP, or an MCP-connected coding agent.
API access — MCP · Python SDK · cURL · JSON schemas
claude mcp add --transport http puras https://mcp.puras.co/mcpOAuth on first call — no key to paste. Then ask the agent to run promo from skill puras/product-ad-studio.
pip install puras
puras login # or set PURAS_API_KEY
puras run puras/product-ad-studio/promo -i key=valueimport puras
client = puras.Client() # PURAS_API_KEY from env
result = client.run("puras/product-ad-studio/promo", {"brief":"Puras: show the transformation from a single SKILL.md file into a working skill with tools + eval + typed I/O. Prompt authoring, compilation, the live pipeline.\n","product_name":"puras"})curl -X POST "https://api.puras.co/v1/jobs?skillpack=puras/product-ad-studio&wait=true" \
-H "Authorization: Bearer $PURAS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"skill":"promo","inputs":{"brief":"Puras: show the transformation from a single SKILL.md file into a working skill with tools + eval + typed I/O. Prompt authoring, compilation, the live pipeline.\n","product_name":"puras"}}'Input schema (JSON Schema)
{
"type": "object",
"required": [
"brief"
],
"properties": {
"brief": {
"type": "text",
"maxLength": 4000,
"description": "What the video should tell: the product, the core message, the flow / scenes to show, and the standout UI moments. If reference_images are attached, say what to do with them — e.g. \"animate these UIs with motion graphics\" or \"follow this storyboard\".\n"
},
"accent_color": {
"type": "string",
"description": "The single accent color (hex). Default terracotta \"#C96442\"."
},
"aspect_ratio": {
"enum": [
"16:9",
"9:16",
"1:1",
"4:5"
],
"type": "string",
"default": "16:9",
"description": "Output frame shape (one video per run). 16:9 = landscape (default), 9:16 = vertical (Stories / Reels / TikTok), 1:1 = square (feed), 4:5 = portrait (feed). For several ratios, run once per ratio.\n"
},
"duration_sec": {
"type": "number",
"description": "Target duration (seconds). Default ~28."
},
"product_name": {
"type": "string",
"description": "Brand/product name (wordmark + closing). Default \"puras\"."
},
"reference_images": {
"type": "array",
"items": {
"type": "image"
},
"maxItems": 8,
"minItems": 0,
"description": "Optional. Images that drive the piece: one or more UI screens / product designs to bring to life with motion graphics, OR a storyboard / scene sheet to follow beat-for-beat. The director file_reads them and either animates the real screens or follows the storyboard (see SKILL.md).\n"
}
}
}Output schema (JSON Schema)
{
"type": "object",
"properties": {
"notes": {
"type": "string",
"description": "Color/text/pacing notes (optional)."
},
"title": {
"type": "string",
"description": "Short title for the video."
},
"video": {
"type": "video",
"description": "Playable (signed) URL of the rendered MP4."
},
"drive_path": {
"type": "string",
"description": "Workspace drive path of the video (durable pointer)."
},
"storyboard": {
"type": "array",
"items": {
"type": "object",
"properties": {
"scene": {
"type": "string"
},
"t_end": {
"type": "number"
},
"camera": {
"type": "string"
},
"motion": {
"type": "string"
},
"t_start": {
"type": "number"
},
"on_screen": {
"type": "string"
}
}
},
"description": "Second-by-second beat list (in act order)."
}
}
}Call Promo Motion Graphics from your app.
Run it free in the playground above, then wire it in with one call — from Python, TypeScript, or your coding agent over MCP. Every run returns an exact cost receipt.
Every run is billed to the cent — see pricing.