# Product Ad Studio

> Agent skillpack on puras — published by puras. An AI product-marketing studio: product photography, static image ads, UGC videos, cinematic reveal videos, storyboarded motion ads, and landing pages — generated from a product URL or the photos you already have.

- **Skillpack path:** `puras/product-ad-studio`
- **Skillpack ID:** `39903015-da3d-49a2-b549-9256ef164430`
- **Deployment version:** v51
- **Skills in pack:** 6
- **Human page:** https://puras.co/skills/puras/product-ad-studio
- **API base:** `https://api.puras.co`

## Use these skills

puras runs these skills 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 `<skill>` 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/<skill> -i key=value
```

From Python:

```python
import puras

client = puras.Client()   # PURAS_API_KEY from env
result = client.run("puras/product-ad-studio/<skill>", {})
```

### 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":"<skill>","inputs":{}}'
```

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

## Skills

- `landing-page-designer` — AI Landing Page Generator: An AI landing page generator that turns a brief — plus optional product photos and logo — into one conversion-focused, mobile-friendly HTML page. It researches your product, picks a conversion blueprint for your goal, writes the headline, copy, and CTA, and serves a single self-contained HTML file at a stable, live URL you can put behind an ad today.
- `motion-ad-video` — AI Motion Video Generator: An AI motion-design video generator: a brief and/or product photos become a storyboarded, art-directed motion ad. It researches the product, picks a motion style (classic elegance or hyper-kinetic energy), draws a one-sheet storyboard of the whole spot in a single image generation, then hands that sheet to the video model as the reference that drives the final clip — a real motion-design pipeline, not a single lucky render.
- `product-reveal-video` — AI Product Video Generator: An AI product video generator: a few product photos (or just your product URL) become a short, cinematic product-reveal video. This image-to-video skill turns your real product shots into a launch-ready, scroll-stopping clip for TikTok, Reels, and paid social — no filming or editing skills needed.
- `social-photo` — AI Product Photo Generator: AI product photography for any subject — a product, app, café, or service. It studies your uploaded photos, writes a scenario and shot plan that fits the subject, and renders a cohesive, art-directed set of social-ready photos: hero, detail, in-use, and lifestyle scenes that all share one concept, palette, and light.
- `static-image-ad` — AI Image Ad Generator: An AI ad creative generator for static image ads. Give it a brief (a product link or your product photos work too) and it researches the product, pulls your real logo off your site so the brand mark stays consistent across every ad, picks a proven ad layout, writes the headline and CTA, and renders each idea in the placement sizes you choose — 4:5, 1:1, 9:16, and 16:9 for Instagram, Facebook, TikTok, and Google.
- `ugc-video` — AI UGC Video Generator: An AI UGC video generator: turn a product brief or URL (plus optional product photos) into an authentic, handheld talk-to-camera UGC ad with a cast creator, naturally paced dialogue, and a full soundtrack — ambient room sound, a subtle music bed, and product foley — featuring your real product, no filming. Works for a physical product, an app, or a service.

### AI Landing Page Generator (`landing-page-designer`)

An AI landing page generator that turns a brief — plus optional product photos and logo — into one conversion-focused, mobile-friendly HTML page. It researches your product, picks a conversion blueprint for your goal, writes the headline, copy, and CTA, and serves a single self-contained HTML file at a stable, live URL you can put behind an ad today.

Spec: https://puras.co/skills/puras/product-ad-studio/landing-page-designer.md

**Input schema**

```json
{
  "type": "object",
  "required": [
    "brief"
  ],
  "properties": {
    "cta": {
      "type": "string",
      "maxLength": 24,
      "description": "Primary button text like \"Start Free\". Auto-picked if left empty."
    },
    "goal": {
      "enum": [
        "auto",
        "signups",
        "sales",
        "waitlist",
        "demo",
        "download",
        "lead-gen"
      ],
      "type": "string",
      "default": "auto",
      "description": "The one action the page is built to drive. Auto infers it from your brief."
    },
    "logo": {
      "type": "image",
      "description": "Optional brand logo, shown in the header and footer."
    },
    "brief": {
      "type": "text",
      "maxLength": 2000,
      "description": "What you're selling, who it's for, and what the page should make people do — a link works too."
    },
    "offer": {
      "type": "string",
      "maxLength": 80,
      "description": "A real promo to feature, e.g. \"Free for 14 days\"."
    },
    "style": {
      "enum": [
        "auto",
        "minimal",
        "bold",
        "premium",
        "playful",
        "editorial",
        "retro-futuristic",
        "brutalist",
        "organic",
        "clean"
      ],
      "type": "string",
      "default": "auto",
      "description": "The visual direction for the page. Auto picks the best fit."
    },
    "cta_url": {
      "type": "string",
      "maxLength": 300,
      "description": "Where the primary button points. Defaults to a placeholder anchor."
    },
    "sections": {
      "type": "array",
      "items": {
        "enum": [
          "hero",
          "logos",
          "benefits",
          "features",
          "how-it-works",
          "social-proof",
          "pricing",
          "faq",
          "final-cta"
        ],
        "type": "string"
      },
      "description": "Which sections to include. Left empty, the blueprint for your goal picks them.",
      "uniqueItems": true
    },
    "accent_color": {
      "type": "color",
      "description": "Brand accent color. Derived from the logo or brief if empty."
    },
    "product_images": {
      "type": "array",
      "items": {
        "type": "image"
      },
      "maxItems": 6,
      "minItems": 1,
      "description": "Optional product photos to feature on the page, so the real product stays accurate."
    },
    "generate_hero_image": {
      "type": "boolean",
      "default": true,
      "description": "Generate and embed a hero visual. Turn off for a pure type/CSS hero."
    }
  }
}
```

**Output schema**

```json
{
  "type": "object",
  "properties": {
    "landing_page": {
      "type": "object",
      "properties": {
        "goal": {
          "type": "string",
          "description": "The conversion goal the page was built around."
        },
        "style": {
          "type": "string",
          "description": "The aesthetic direction used."
        },
        "headline": {
          "type": "string",
          "description": "The hero headline shown on the page."
        },
        "page_url": {
          "type": "file",
          "description": "Drive path to the single self-contained .html landing page; served as a stable media URL and rendered inline as a live preview.",
          "contentMediaType": "text/html"
        }
      },
      "description": "The finished landing page."
    }
  }
}
```

**SaaS free-trial signups — bold style**

A short brief, nothing else. The skill researches the product, builds a signup blueprint, commits to a bold direction, writes the copy, and ships one self-contained HTML page with the trial CTA above the fold.

Inputs:

```json
{
  "cta": "Start Free",
  "goal": "signups",
  "brief": "A focus timer app that blocks distracting sites and shows you where your hours actually go. For freelancers and students who keep losing the afternoon.",
  "offer": "Free for 14 days",
  "style": "bold",
  "cta_url": "https://example.com/signup"
}
```

**DTC product sales page — premium, with photos**

A brief plus product photos and a real offer. The skill features the real product in the hero and feature shots, builds a sales blueprint, and renders one premium, mobile-first page.

Inputs:

```json
{
  "cta": "Shop the Set",
  "goal": "sales",
  "brief": "A refillable matte-glass fragrance in a sculptural bottle with a leather cap — warm, timeless, luxury. Audience is gift-buyers.",
  "offer": "Free engraving this week",
  "style": "premium",
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-product.jpg"
  ],
  "generate_hero_image": false
}
```

**Pre-launch waitlist — brief only**

Just a brief, no assets. The skill imagines the product from the description, generates a hero visual, and builds a focused waitlist page in a single HTML file.

Inputs:

```json
{
  "cta": "Join the Waitlist",
  "goal": "waitlist",
  "brief": "A reusable insulated water bottle in matte sage green that keeps drinks cold for 24 hours. For everyday commuters and gym-goers. Clean, minimal look.",
  "style": "minimal"
}
```

**Call**

```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":"landing-page-designer","inputs":{"cta":"Start Free","goal":"signups","brief":"A focus timer app that blocks distracting sites and shows you where your hours actually go. For freelancers and students who keep losing the afternoon.","offer":"Free for 14 days","style":"bold","cta_url":"https://example.com/signup"}}'
```

---

### AI Motion Video Generator (`motion-ad-video`)

An AI motion-design video generator: a brief and/or product photos become a storyboarded, art-directed motion ad. It researches the product, picks a motion style (classic elegance or hyper-kinetic energy), draws a one-sheet storyboard of the whole spot in a single image generation, then hands that sheet to the video model as the reference that drives the final clip — a real motion-design pipeline, not a single lucky render.

Spec: https://puras.co/skills/puras/product-ad-studio/motion-ad-video.md

**Input schema**

```json
{
  "type": "object",
  "required": [
    "brief"
  ],
  "properties": {
    "brief": {
      "type": "text",
      "maxLength": 2000,
      "minLength": 10,
      "description": "What it is, who it's for, what to land. A product URL alone works."
    },
    "sound": {
      "type": "boolean",
      "default": true,
      "description": "Render native sound design (whooshes, ambience, impact hits) with the video."
    },
    "motion_style": {
      "enum": [
        "auto",
        "classic",
        "hyper"
      ],
      "type": "string",
      "default": "auto",
      "description": "classic = calm, luxurious, few long beats (fragrance, skincare, premium tech). hyper = fast-cut, kinetic, FX-heavy (candy, energy drinks, sneakers). auto = chosen from the product research."
    },
    "aspect_ratios": {
      "type": "array",
      "items": {
        "enum": [
          "9:16",
          "1:1",
          "16:9"
        ],
        "type": "string"
      },
      "default": [
        "9:16"
      ],
      "minItems": 1,
      "description": "Output frame(s). Pick one or more — one clip is rendered per selected ratio.",
      "uniqueItems": true
    },
    "product_images": {
      "type": "array",
      "items": {
        "type": "image"
      },
      "maxItems": 5,
      "minItems": 0,
      "description": "Optional product photos that lock the real product's identity into the storyboard. Without them the product is rendered from the brief."
    },
    "duration_seconds": {
      "type": "integer",
      "default": 8,
      "maximum": 12,
      "minimum": 4,
      "description": "Target clip length. 8 s is the sweet spot."
    }
  }
}
```

**Output schema**

```json
{
  "type": "object",
  "properties": {
    "beats": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "description": "The beat sheet — one line per storyboard panel, in order."
    },
    "videos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "video_url": {
            "type": "video",
            "description": "Drive path to the rendered motion ad; served to readers as a stable media URL. The playground renders it with a <video> player."
          },
          "aspect_ratio": {
            "enum": [
              "9:16",
              "1:1",
              "16:9"
            ],
            "type": "string",
            "description": "The frame this clip was rendered for."
          }
        }
      },
      "minItems": 1,
      "description": "One rendered motion ad per aspect ratio."
    },
    "storyboard_sheet": {
      "type": "image",
      "description": "The one-sheet storyboard (numbered panels in beat order) the clip was animated from."
    }
  }
}
```

**Luxury fragrance — classic motion**

One packshot and a short brief → a calm, luxurious storyboard and an elegant slow-motion spot animated between its keyframes.

Inputs:

```json
{
  "brief": "A refined fragrance presented in a sculptural glass bottle, blending warm amber tones with an elegant leather-textured cap for a timeless luxury feel.",
  "sound": true,
  "motion_style": "classic",
  "aspect_ratios": [
    "9:16"
  ],
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-product.jpg"
  ],
  "duration_seconds": 8
}
```

**Energy drink — hyper motion, brief only**

No photos at all — the product is researched and rendered from the brief, storyboarded as a fast-cut hyper-kinetic spot, then animated.

Inputs:

```json
{
  "brief": "VOLTA Citrus Surge energy drink — a matte black 330ml slim can with an electric-yellow lightning-bolt logo and \"CITRUS SURGE\" in bold white type. For gamers and late-night creators; land the feeling of an instant jolt of focus. Loud, neon, high-energy.",
  "sound": true,
  "motion_style": "hyper",
  "aspect_ratios": [
    "9:16"
  ],
  "duration_seconds": 8
}
```

**Call**

```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":"motion-ad-video","inputs":{"brief":"A refined fragrance presented in a sculptural glass bottle, blending warm amber tones with an elegant leather-textured cap for a timeless luxury feel.","sound":true,"motion_style":"classic","aspect_ratios":["9:16"],"product_images":["https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-product.jpg"],"duration_seconds":8}}'
```

---

### AI Product Video Generator (`product-reveal-video`)

An AI product video generator: a few product photos (or just your product URL) become a short, cinematic product-reveal video. This image-to-video skill turns your real product shots into a launch-ready, scroll-stopping clip for TikTok, Reels, and paid social — no filming or editing skills needed.

Spec: https://puras.co/skills/puras/product-ad-studio/product-reveal-video.md

**Input schema**

```json
{
  "type": "object",
  "required": [
    "brief",
    "product_images"
  ],
  "properties": {
    "brief": {
      "type": "text",
      "maxLength": 2000,
      "minLength": 10,
      "description": "What it is, who it's for, what to land. URL works."
    },
    "aspect_ratios": {
      "type": "array",
      "items": {
        "enum": [
          "9:16",
          "1:1",
          "16:9"
        ],
        "type": "string"
      },
      "default": [
        "9:16"
      ],
      "minItems": 1,
      "description": "Output frame(s). Pick one or more — one clip is rendered per selected ratio.",
      "uniqueItems": true
    },
    "product_images": {
      "type": "array",
      "items": {
        "type": "image"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "Product photos that anchor the real product. Sharp, well-lit shots work best."
    },
    "duration_seconds": {
      "type": "integer",
      "default": 8,
      "maximum": 12,
      "minimum": 4,
      "description": "Target clip length. 8 s is the sweet spot."
    }
  }
}
```

**Output schema**

```json
{
  "type": "object",
  "properties": {
    "videos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "video_url": {
            "type": "video",
            "description": "Drive path to the rendered product-reveal clip; served to readers as a stable media URL. The playground renders it with a <video> player."
          },
          "aspect_ratio": {
            "enum": [
              "9:16",
              "1:1",
              "16:9"
            ],
            "type": "string",
            "description": "The frame this clip was rendered for."
          }
        }
      },
      "minItems": 1,
      "description": "One rendered clip per aspect ratio."
    }
  }
}
```

**Luxury fragrance reveal**

One packshot and a short brief. Research locks in the product, then a cinematic 8-second reveal is rendered from your real bottle — same glass, same amber, same leather cap.

Inputs:

```json
{
  "brief": "A refined fragrance presented in a sculptural glass bottle, blending warm amber tones with an elegant leather-textured cap for a timeless luxury feel.",
  "aspect_ratios": [
    "9:16"
  ],
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-product.jpg"
  ],
  "duration_seconds": 8
}
```

Outputs:

```json
{
  "videos": [
    {
      "video_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-reveal.mp4",
      "aspect_ratio": "9:16"
    }
  ]
}
```

**Playful kids' product reveal**

A single packshot and a one-line brief → a soft, bouncy 8-second reveal for a playful kids' product.

Inputs:

```json
{
  "brief": "A pink children’s hat slowly rotates on a white background; the cute frog ears and embroidered smile stand out, with soft pastel lighting, a subtle bouncy motion, and a playful, cozy kids’ fashion ad feel.",
  "aspect_ratios": [
    "9:16"
  ],
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-reveal-video/b9b7b168/product_images-0.webp"
  ],
  "duration_seconds": 8
}
```

Outputs:

```json
{
  "videos": [
    {
      "video_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-reveal-video/b9b7b168/out-video_url.mp4",
      "aspect_ratio": "9:16"
    }
  ]
}
```

**Call**

```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":"product-reveal-video","inputs":{"brief":"A refined fragrance presented in a sculptural glass bottle, blending warm amber tones with an elegant leather-textured cap for a timeless luxury feel.","aspect_ratios":["9:16"],"product_images":["https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-product.jpg"],"duration_seconds":8}}'
```

---

### AI Product Photo Generator (`social-photo`)

AI product photography for any subject — a product, app, café, or service. It studies your uploaded photos, writes a scenario and shot plan that fits the subject, and renders a cohesive, art-directed set of social-ready photos: hero, detail, in-use, and lifestyle scenes that all share one concept, palette, and light.

Spec: https://puras.co/skills/puras/product-ad-studio/social-photo.md

**Input schema**

```json
{
  "type": "object",
  "required": [
    "product_images"
  ],
  "properties": {
    "brief": {
      "type": "text",
      "maxLength": 2000,
      "description": "Optional. What it is, who it's for, the vibe. A URL works too."
    },
    "style": {
      "enum": [
        "auto",
        "premium",
        "minimal",
        "warm",
        "bold",
        "playful",
        "natural",
        "editorial"
      ],
      "type": "string",
      "description": "Visual tone for the set. `auto` picks the best fit for the subject."
    },
    "num_photos": {
      "type": "integer",
      "default": 4,
      "maximum": 8,
      "minimum": 3,
      "description": "How many photos (distinct shots) per set. Default 4."
    },
    "aspect_ratios": {
      "type": "array",
      "items": {
        "enum": [
          "9:16",
          "4:5",
          "1:1",
          "16:9"
        ],
        "type": "string"
      },
      "default": [
        "1:1"
      ],
      "minItems": 1,
      "description": "Output frame(s). Pick one or more — every photo is produced in each selected ratio.",
      "uniqueItems": true
    },
    "include_people": {
      "type": "boolean",
      "default": true,
      "description": "Allow shots with anonymous people (in-use, on-model, a café guest). On by default."
    },
    "product_images": {
      "type": "array",
      "items": {
        "type": "image"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "Photos of what you're promoting — a product packshot, an app screenshot or device mockup, your storefront/interior, a dish, anything. Clean, well-lit shots work best. Whatever it is, it stays true across the set.\n"
    }
  }
}
```

**Output schema**

```json
{
  "type": "object",
  "properties": {
    "photos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "description": "The shot's job in the set — chosen to fit the subject. For a physical product: \"hero\", \"detail\", \"in-use\", \"lifestyle\". For an app/software: \"device mockup\", \"UI in context\", \"feature close-up\", \"brand scene\". For a venue: \"storefront\", \"interior ambiance\", \"signature moment\", \"detail\". Whatever roles the plan invented.\n"
          },
          "output_url": {
            "type": "image",
            "description": "Drive path to the rendered photo; served to readers as a stable media URL. The playground renders it with <img>."
          },
          "aspect_ratio": {
            "enum": [
              "9:16",
              "4:5",
              "1:1",
              "16:9"
            ],
            "type": "string",
            "description": "The frame this photo was rendered for."
          }
        }
      },
      "minItems": 3,
      "description": "All produced photos — num_photos × aspect_ratios, one cohesive creative concept; every frame shares its world, palette, and light."
    }
  }
}
```

**Layered tropical iced drink**

Just the product photo — no brief. The skill reads it as a food/drink subject, invents one golden-hour concept, and returns a cohesive 4-shot set (hero, macro, in-use, flat-lay) that all share the same world, light, and grade.

Inputs:

```json
{
  "style": "natural",
  "num_photos": 4,
  "aspect_ratios": [
    "1:1"
  ],
  "include_people": true,
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-product.webp"
  ]
}
```

Outputs:

```json
{
  "photos": [
    {
      "role": "hero",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-hero.webp",
      "aspect_ratio": "1:1"
    },
    {
      "role": "macro detail",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-macro.webp",
      "aspect_ratio": "1:1"
    },
    {
      "role": "in-use / on-model",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-inuse.webp",
      "aspect_ratio": "1:1"
    },
    {
      "role": "lifestyle / styled flat-lay",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-flatlay.webp",
      "aspect_ratio": "1:1"
    }
  ]
}
```

**Deluxe hardcover book**

Just the cover photo — no brief, style auto. The skill reads it as a physical product, sets one concept and returns a cohesive 4-shot set (hero, macro, in-use, flat-lay).

Inputs:

```json
{
  "style": "auto",
  "num_photos": 4,
  "aspect_ratios": [
    "1:1"
  ],
  "include_people": true,
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-social-creative-photos/25499ab2/product_images-0.png"
  ]
}
```

Outputs:

```json
{
  "photos": [
    {
      "role": "hero",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-social-creative-photos/25499ab2/out-photos-0-output_url.webp",
      "aspect_ratio": "1:1"
    },
    {
      "role": "macro detail",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-social-creative-photos/25499ab2/out-photos-1-output_url.webp",
      "aspect_ratio": "1:1"
    },
    {
      "role": "in-use / on-model",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-social-creative-photos/25499ab2/out-photos-2-output_url.webp",
      "aspect_ratio": "1:1"
    },
    {
      "role": "lifestyle / styled flat-lay",
      "output_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-social-creative-photos/25499ab2/out-photos-3-output_url.webp",
      "aspect_ratio": "1:1"
    }
  ]
}
```

**Call**

```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":"social-photo","inputs":{"style":"natural","num_photos":4,"aspect_ratios":["1:1"],"include_people":true,"product_images":["https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-product.webp"]}}'
```

---

### AI Image Ad Generator (`static-image-ad`)

An AI ad creative generator for static image ads. Give it a brief (a product link or your product photos work too) and it researches the product, pulls your real logo off your site so the brand mark stays consistent across every ad, picks a proven ad layout, writes the headline and CTA, and renders each idea in the placement sizes you choose — 4:5, 1:1, 9:16, and 16:9 for Instagram, Facebook, TikTok, and Google.

Spec: https://puras.co/skills/puras/product-ad-studio/static-image-ad.md

**Input schema**

```json
{
  "type": "object",
  "required": [
    "brief"
  ],
  "properties": {
    "cta": {
      "type": "string",
      "maxLength": 24,
      "description": "Button text like \"Shop Now\". Auto-picked if left empty."
    },
    "brief": {
      "type": "text",
      "maxLength": 2000,
      "description": "What you're selling, who it's for — a link works too."
    },
    "offer": {
      "type": "string",
      "maxLength": 80,
      "description": "A real promo to feature, e.g. \"30% off this week\"."
    },
    "style": {
      "enum": [
        "auto",
        "premium",
        "minimal",
        "bold",
        "warm",
        "playful",
        "clean",
        "editorial"
      ],
      "type": "string",
      "description": "Visual vibe for the ads. Auto picks the best fit."
    },
    "aspect_ratios": {
      "type": "array",
      "items": {
        "enum": [
          "9:16",
          "4:5",
          "1:1",
          "16:9"
        ],
        "type": "string"
      },
      "default": [
        "4:5"
      ],
      "minItems": 1,
      "description": "Which ad shapes to make. Feed-friendly 4:5 by default.",
      "uniqueItems": true
    },
    "include_people": {
      "type": "boolean",
      "default": true,
      "description": "Allow lifestyle ads with people. On by default."
    },
    "product_images": {
      "type": "array",
      "items": {
        "type": "image"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "Optional product photos, so the real product stays accurate."
    }
  }
}
```

**Output schema**

```json
{
  "type": "object",
  "properties": {
    "ads": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "cta": {
            "type": "string",
            "description": "The button text shown on the ad."
          },
          "layout": {
            "type": "string",
            "description": "The ad layout used for this idea."
          },
          "headline": {
            "type": "string",
            "description": "The headline shown on the ad."
          },
          "output_url": {
            "type": "image",
            "description": "The finished ad image."
          },
          "aspect_ratio": {
            "enum": [
              "9:16",
              "4:5",
              "1:1",
              "16:9"
            ],
            "type": "string",
            "description": "The ad shape this image was made for."
          }
        }
      },
      "minItems": 1,
      "description": "Every ad image produced — the ad, in each size you chose."
    }
  }
}
```

**Tropical iced drink — feed ad**

A short brief and one product photo. The skill researches the drink and builds one ad idea, with its own headline and button, in the 4:5 feed size.

Inputs:

```json
{
  "brief": "A layered tropical iced drink for hot afternoons. Fun, refreshing, summer vibe.",
  "style": "bold",
  "aspect_ratios": [
    "4:5"
  ],
  "include_people": true,
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-product.webp"
  ]
}
```

**Luxury fragrance — multi-size offer ad**

A photo, a short brief, and a real offer. The skill builds one premium offer ad and ships it in feed, Stories, and landscape sizes so it fits every placement.

Inputs:

```json
{
  "cta": "Shop the Gift",
  "brief": "A refined fragrance in a sculptural glass bottle with a leather-textured cap — warm, timeless, luxury. Audience is gift-buyers. Land the gifting angle.",
  "offer": "Free engraving this week",
  "style": "premium",
  "aspect_ratios": [
    "4:5",
    "9:16",
    "16:9"
  ],
  "include_people": false,
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-product.jpg"
  ]
}
```

**Brief only — no product photo**

Just a brief, no photo. The skill imagines the product from your description and renders one ad idea in the feed size — handy when you don't have a packshot yet.

Inputs:

```json
{
  "brief": "A reusable insulated water bottle in matte sage green, keeps drinks cold 24 hours. For everyday commuters and gym-goers. Clean, minimal look.",
  "style": "minimal",
  "aspect_ratios": [
    "4:5"
  ]
}
```

**Call**

```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":"static-image-ad","inputs":{"brief":"A layered tropical iced drink for hot afternoons. Fun, refreshing, summer vibe.","style":"bold","aspect_ratios":["4:5"],"include_people":true,"product_images":["https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-product.webp"]}}'
```

---

### AI UGC Video Generator (`ugc-video`)

An AI UGC video generator: turn a product brief or URL (plus optional product photos) into an authentic, handheld talk-to-camera UGC ad with a cast creator, naturally paced dialogue, and a full soundtrack — ambient room sound, a subtle music bed, and product foley — featuring your real product, no filming. Works for a physical product, an app, or a service.

Spec: https://puras.co/skills/puras/product-ad-studio/ugc-video.md

**Input schema**

```json
{
  "type": "object",
  "required": [
    "brief"
  ],
  "properties": {
    "brief": {
      "type": "text",
      "maxLength": 2000,
      "minLength": 10,
      "description": "What it is, who it's for, what to land. URL works."
    },
    "music": {
      "type": "string",
      "default": "auto",
      "maxLength": 120,
      "description": "Background music for the clip's native soundtrack. `auto` usually picks a quiet instrumental bed matching your brand's tone (lo-fi, soft acoustic, or light upbeat — always under the voice); raw-phone concepts like ASMR stay music-free. `none` always skips music for a raw phone-recording feel. Or type a style hint (e.g. \"lo-fi chill\", \"upbeat electronic\").\n"
    },
    "captions": {
      "type": "boolean",
      "default": true,
      "description": "Burn word-synced karaoke captions onto the finished clip — the retention look for muted TikTok/Reels/Shorts feeds. Caption colors and styling are picked automatically to match the product's brand identity. Turn off for a clean, caption-free clip.\n"
    },
    "last_frame": {
      "type": "image",
      "description": "Optional. A still the clip should end on (tail keyframe). When set, the render lands on this exact frame — e.g. an end card, or the last frame of a gameplay recording so the clip flows seamlessly into the next shot when stitched. Pairs with `first_frame` to interpolate from open to close.\n"
    },
    "first_frame": {
      "type": "image",
      "description": "Optional. A still the clip should open on (image-to-video). When set, the render starts from this exact frame — e.g. the first frame of a gameplay recording so the clip flows seamlessly into the real footage when stitched.\n"
    },
    "ugc_template": {
      "enum": [
        "auto",
        "unboxing",
        "tryout",
        "interview",
        "tutorial",
        "product_review",
        "problem_solution",
        "grwm",
        "asmr_demo",
        "pov",
        "before_after",
        "listicle",
        "reaction",
        "storytime"
      ],
      "type": "string",
      "default": "auto",
      "description": "Which UGC format to shoot. `auto` picks the best fit."
    },
    "aspect_ratios": {
      "type": "array",
      "items": {
        "enum": [
          "9:16",
          "1:1",
          "16:9"
        ],
        "type": "string"
      },
      "default": [
        "9:16"
      ],
      "minItems": 1,
      "description": "Output frame(s). Pick one or more — one clip is rendered per selected ratio.",
      "uniqueItems": true
    },
    "creator_image": {
      "type": "image",
      "description": "Optional photo of the on-camera person, for a consistent creator."
    },
    "product_images": {
      "type": "array",
      "items": {
        "type": "image"
      },
      "maxItems": 5,
      "minItems": 0,
      "description": "Optional. Product photos that anchor the real product. Sharp, well-lit shots work best. If omitted, the product is rendered from the brief/research description."
    },
    "creator_persona": {
      "type": "text",
      "maxLength": 300,
      "description": "Optional. Who's on camera and where. Empty = auto-cast."
    },
    "duration_seconds": {
      "type": "integer",
      "default": 8,
      "maximum": 15,
      "minimum": 4,
      "description": "Target clip length. 8 s is the sweet spot; up to 15 s supported. Longer clips buy more action, not more talking — spoken lines stay short either way, so pick longer durations for demos and reactions, not bigger scripts.\n"
    }
  }
}
```

**Output schema**

```json
{
  "type": "object",
  "properties": {
    "videos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "video_url": {
            "type": "video",
            "description": "Drive path to the rendered UGC clip (with native audio); served to readers as a stable media URL. The playground renders it with a <video> player."
          },
          "aspect_ratio": {
            "enum": [
              "9:16",
              "1:1",
              "16:9"
            ],
            "type": "string",
            "description": "The frame this clip was rendered for."
          }
        }
      },
      "minItems": 1,
      "description": "One rendered clip per aspect ratio."
    }
  }
}
```

**Insulated bottle · street interview**

A written brief plus a packshot → a confident street-interview UGC clip with native audio.

Inputs:

```json
{
  "brief": "A stainless insulated water bottle that keeps drinks cold for 24h. For gym regulars and hikers. Tone: confident, no-nonsense.",
  "ugc_template": "interview",
  "aspect_ratios": [
    "9:16"
  ],
  "product_images": [
    "https://images.unsplash.com/photo-1602143407151-7111542de6e8?w=1200&q=80"
  ],
  "duration_seconds": 10
}
```

Outputs:

```json
{
  "videos": [
    {
      "video_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/d5f6c1a1/out-video_url.mp4",
      "aspect_ratio": "9:16"
    }
  ]
}
```

**App promo from a store link**

Just paste an app-store URL. Research reads the page, the agent picks the UGC format and casts a creator.

Inputs:

```json
{
  "brief": "https://apps.apple.com/tr/app/learn-guitar-songs-chordie-ai/id1585131961",
  "ugc_template": "auto",
  "aspect_ratios": [
    "9:16"
  ],
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/279063d4/product_images-0.webp"
  ],
  "duration_seconds": 8
}
```

Outputs:

```json
{
  "videos": [
    {
      "video_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/279063d4/out-video_url.mp4",
      "aspect_ratio": "9:16"
    }
  ]
}
```

**Guitar-learning app · UGC**

Another store-link brief — research reads the page, the agent auto-picks the format and casts a creator for a music-app promo.

Inputs:

```json
{
  "brief": "https://apps.apple.com/tr/app/learn-guitar-songs-chordie-ai/id1585131961",
  "ugc_template": "auto",
  "aspect_ratios": [
    "9:16"
  ],
  "product_images": [
    "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/72bc110d/product_images-0.webp"
  ],
  "duration_seconds": 8
}
```

Outputs:

```json
{
  "videos": [
    {
      "video_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/72bc110d/out-video_url.mp4",
      "aspect_ratio": "9:16"
    }
  ]
}
```

**Food-scanner app · influencer clip**

Just an App Store link and a one-line ask → an influencer talking up the app on camera.

Inputs:

```json
{
  "brief": "https://apps.apple.com/us/app/ai-food-ingredient-scan-dert/id6760284988 make an influencer talk about my app",
  "aspect_ratios": [
    "9:16"
  ]
}
```

Outputs:

```json
{
  "videos": [
    {
      "video_url": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/5583920e/out-videos-0-video_url.mp4",
      "aspect_ratio": "9:16"
    }
  ]
}
```

**Call**

```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":"ugc-video","inputs":{"brief":"A stainless insulated water bottle that keeps drinks cold for 24h. For gym regulars and hikers. Tone: confident, no-nonsense.","ugc_template":"interview","aspect_ratios":["9:16"],"product_images":["https://images.unsplash.com/photo-1602143407151-7111542de6e8?w=1200&q=80"],"duration_seconds":10}}'
```

---

## 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`
