# 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:** v58
- **Skills in pack:** 4
- **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

- `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 that fits the subject, and renders ONE cohesive, art-directed, social-ready photo with a deliberate 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, picks a proven ad layout, writes the headline and CTA, and renders one finished ad in the placement size you choose — 4:5, 1:1, 9:16, or 16:9 for Instagram, Facebook, TikTok, or 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 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. If you also describe a reveal scenario, camera move, setting, props, pacing, or mood, the skill executes that direction rather than inventing its own."
    },
    "aspect_ratio": {
      "enum": [
        "9:16",
        "1:1",
        "16:9"
      ],
      "type": "string",
      "default": "9:16",
      "description": "Output frame. The single clip is rendered in this ratio."
    },
    "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": {
    "video": {
      "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."
    }
  }
}
```

**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_ratio": "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
{
  "video": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/fragrance-reveal.mp4"
}
```

**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_ratio": "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
{
  "video": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/product-reveal-video/b9b7b168/out-video_url.mp4"
}
```

**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_ratio":"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 that fits the subject, and renders ONE cohesive, art-directed, social-ready photo with a deliberate 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."
    },
    "aspect_ratio": {
      "enum": [
        "9:16",
        "4:5",
        "1:1",
        "16:9"
      ],
      "type": "string",
      "default": "1:1",
      "description": "Output frame for the photo. Default 1:1."
    },
    "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": {
    "photo": {
      "type": "image",
      "description": "The finished social product photo."
    }
  }
}
```

**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 single cohesive hero photo.

Inputs:

```json
{
  "style": "natural",
  "aspect_ratio": "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
{
  "photo": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/product-ad-studio/tropical-hero.webp"
}
```

**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 single finished photo.

Inputs:

```json
{
  "style": "auto",
  "aspect_ratio": "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
{
  "photo": "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"
}
```

**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","aspect_ratio":"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, picks a proven ad layout, writes the headline and CTA, and renders one finished ad in the placement size you choose — 4:5, 1:1, 9:16, or 16:9 for Instagram, Facebook, TikTok, or 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_ratio": {
      "enum": [
        "9:16",
        "4:5",
        "1:1",
        "16:9"
      ],
      "type": "string",
      "default": "4:5",
      "description": "Which ad shape to make. Feed-friendly 4:5 by default."
    },
    "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": {
    "ad": {
      "type": "image",
      "description": "The finished static image ad."
    }
  }
}
```

**Tropical iced drink — feed ad**

A short brief and one product photo. The skill researches the drink and builds one ad, 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_ratio": "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 — Stories offer ad**

A photo, a short brief, and a real offer. The skill builds one premium offer ad in the vertical Stories size.

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_ratio": "9:16",
  "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 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_ratio": "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_ratio":"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"
    },
    "aspect_ratio": {
      "enum": [
        "9:16",
        "1:1",
        "16:9"
      ],
      "type": "string",
      "default": "9:16",
      "description": "Output frame for the clip."
    },
    "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."
    },
    "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": {
    "video": {
      "type": "video",
      "description": "The rendered UGC clip (with native audio) — the playable video. The playground renders it with a <video> player.\n"
    }
  }
}
```

**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.",
  "aspect_ratio": "9:16",
  "ugc_template": "interview",
  "product_images": [
    "https://images.unsplash.com/photo-1602143407151-7111542de6e8?w=1200&q=80"
  ],
  "duration_seconds": 10
}
```

Outputs:

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

**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",
  "aspect_ratio": "9:16",
  "ugc_template": "auto",
  "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
{
  "video": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/279063d4/out-video_url.mp4"
}
```

**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",
  "aspect_ratio": "9:16",
  "ugc_template": "auto",
  "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
{
  "video": "https://uozfqcfhlhugotnevscg.supabase.co/storage/v1/object/public/puras-public-skills/examples/product-ad-studio/ugc-video/72bc110d/out-video_url.mp4"
}
```

**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_ratio": "9:16"
}
```

Outputs:

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

**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.","aspect_ratio":"9:16","ugc_template":"interview","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`
