# AI UGC Video Generator

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

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

## Description

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.

## Try it free

AI UGC Video Generator has a free in-browser playground on its page (https://puras.co/skills/puras/product-ad-studio/ugc-video) — 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": 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"
    }
  }
}
```

## Examples

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

## 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 `ugc-video` 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/ugc-video -i key=value
```

From Python:

```python
import puras

client = puras.Client()   # PURAS_API_KEY from env
result = client.run("puras/product-ad-studio/ugc-video", {"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})
```

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

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`
