# Promo Motion Graphics

> Agent skill on puras — published by puras. 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.

- **Skill path:** `puras/product-ad-studio/promo`
- **Skillpack:** Product Ad Studio (`product-ad-studio`)
- **Skillpack ID:** `39903015-da3d-49a2-b549-9256ef164430`
- **Deployment version:** v54
- **Human page:** https://puras.co/skills/puras/product-ad-studio/promo
- **API base:** `https://api.puras.co`

## Description

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.

## Try it free

Promo Motion Graphics has a free in-browser playground on its page (https://puras.co/skills/puras/product-ad-studio/promo) — load an example or bring your own inputs and run it with a Google sign-in. No credit card, no subscription; runs are usage-based after the free try.

## Input schema

```json
{
  "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
{
  "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)."
    }
  }
}
```

## Examples

### SKILL.md → working skill

Inputs:

```json
{
  "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"
}
```

## Use this skill

puras runs this skill on its own backend — you send inputs and get the result back. Three ways to call, fastest first:

### 1. MCP server — recommended for coding agents, no API key

Connect the puras MCP server; auth is OAuth in the browser on first call, so there is nothing to paste.

```bash
claude mcp add --transport http puras https://mcp.puras.co/mcp
```

Any MCP client works — point it at `https://mcp.puras.co/mcp` (HTTP transport). Then ask the agent to run `promo` from skillpack `puras/product-ad-studio` with your inputs.

### 2. CLI / Python SDK — `pip install puras`

```bash
pip install puras
puras login            # or set PURAS_API_KEY
puras run puras/product-ad-studio/promo -i key=value
```

From Python:

```python
import 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"})
```

### 3. HTTP API

`wait=true` blocks until the run reaches a terminal status and returns the result inline.

```bash
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"}}'
```

Mint an API key (for CLI / SDK / API) from https://puras.co/api-keys.

## Pricing

Runs are billed usage-based from your workspace credit balance — the cost of a job is the sum of the model token (and any media) usage it incurs. There is no per-call platform fee. The playground and the job result report the exact cost of each run.

- Pricing page: https://puras.co/pricing
- Machine-readable model price registry: `https://api.puras.co/v1/pricing`
