- name
- video-ad-generator
- description
- Complete video ad creation toolkit — from creative brief to published ad. Includes hook formulas, script frameworks, multi-format strategy, A/B testing methodology, and batch workflow patterns. Integrates with Creatify API for automated URL-to-video, ad cloning, AI script generation, custom templates, product-to-video, and IAB banner creation.
Use when: "create video ad", "product to ad", "batch ads", "ad from URL", "URL to video", "clone this ad", "video ad script", "ad creative brief", "IAB banners", "custom template", "product video", "ad clone", "multi-format ads", "A/B test ads", "hook formula", "CTA pattern", "video ad framework", "batch video generation", "product URL to video", "ad campaign", "video marketing", or any video advertising creation task.
# Video Ad Generator
Complete framework for creating high-converting video ads — from creative strategy to production at scale.
---
## Part 1: Video Ad Creation Framework (Standalone)
### 1.1 Creative Brief Template
Before creating any ad, fill out this brief. It forces strategic thinking before production.
```
CREATIVE BRIEF
==============
Product/Service: _______________
Product URL: _______________
Price Point: _______________
TARGET AUDIENCE
- Demographics: _______________
- Primary pain point: _______________
- Secondary pain points: _______________
- Current solution they use: _______________
- Objections to buying: _______________
PRODUCT POSITIONING
- Core benefit (1 sentence): _______________
- Supporting benefits (3 max): _______________
- Proof points (reviews, stats, awards): _______________
- Unique mechanism (what makes it work): _______________
AD SPECIFICATIONS
- Platform: [ ] Meta [ ] TikTok [ ] YouTube [ ] LinkedIn [ ] Other
- Format: [ ] 9:16 [ ] 16:9 [ ] 1:1 [ ] 4:5
- Length: [ ] 15s [ ] 30s [ ] 60s
- Tone: [ ] Professional [ ] Casual [ ] Urgent [ ] Humorous [ ] Educational
- CTA: _______________
CREATIVE DIRECTION
- Style: [ ] UGC [ ] Avatar [ ] Product Demo [ ] Testimonial [ ] Explainer
- Must include: _______________
- Must avoid: _______________
- Reference ads (URLs): _______________
```
### 1.2 Hook Formulas
The first 3 seconds determine whether someone watches your ad. Use these proven formulas:
#### Pattern Interrupt
Breaks the scroll pattern with something unexpected.
- "Stop scrolling if you [audience identifier]"
- "[Shocking visual] + Wait, what?"
- Start mid-action (unboxing, applying product, dramatic reveal)
**Best for:** TikTok, Instagram Reels, broad audiences
#### Question Hook
Opens a curiosity loop the viewer needs to close.
- "What if I told you [counterintuitive claim]?"
- "Why are [demographic] switching to [product category]?"
- "Did you know [surprising statistic about their problem]?"
**Best for:** Educational products, B2B, considered purchases
#### Bold Claim
Leads with the strongest benefit, stated confidently.
- "[Product] replaced my [expensive alternative]"
- "I saved [specific amount] by switching to [product]"
- "The only [product category] that actually [bold promise]"
**Best for:** Competitive markets, DTC products, price-advantaged products
#### POV Hook
Places the viewer inside a relatable scenario.
- "POV: You finally found a [product] that [solves problem]"
- "POV: It's 6am and you're [using product in aspirational way]"
- "Me when I discovered [product] exists:"
**Best for:** Lifestyle products, Gen Z/Millennial audiences, TikTok
#### Stat/Authority Hook
Uses data or credentials to establish instant credibility.
- "[Number] people can't be wrong"
- "Dermatologists say [claim] — here's why"
- "After testing [number] [products], this one won"
**Best for:** Health/beauty, B2B, premium products, skeptical audiences
### 1.3 Body Structures
After the hook, the body delivers the message. Match the structure to your goal:
#### Problem-Agitate-Solve (PAS)
1. **Problem** (2-3s): Name the pain point clearly
2. **Agitate** (3-5s): Make it feel urgent — show consequences of not solving it
3. **Solve** (5-8s): Introduce product as the natural solution
**Best for:** Pain-point-driven products, health/wellness, productivity tools
#### Feature Cascade
1. **Hero feature** (3-4s): Lead with the most impressive capability
2. **Supporting feature 1** (2-3s): Add credibility or utility
3. **Supporting feature 2** (2-3s): Address a secondary concern
4. **Proof** (2-3s): Quick social proof or demo result
**Best for:** Tech products, SaaS, feature-rich products
#### Social Proof Stack
1. **Testimonial/review quote** (3-4s): Real customer words
2. **Visual proof** (3-4s): Before/after, demo, or results screenshot
3. **Volume proof** (2-3s): "Join [X] customers" or star ratings
4. **Urgency** (2-3s): Limited offer or scarcity
**Best for:** E-commerce, subscription products, competitive markets
#### Before/After
1. **Before state** (3-5s): Show the problem visually
2. **Transformation moment** (2-3s): The product in action
3. **After state** (3-5s): Show the improved outcome
4. **How to get it** (2-3s): CTA
**Best for:** Beauty, fitness, home improvement, cleaning products
#### Day-in-the-Life
1. **Morning routine** (3-4s): Product in context of daily life
2. **Key moment** (3-4s): The "aha" moment or primary use case
3. **Result/feeling** (3-4s): Emotional payoff
4. **Invite** (2-3s): "Try it yourself" CTA
**Best for:** Lifestyle products, UGC-style ads, TikTok/Reels
### 1.4 CTA Patterns
| CTA Type | Example | Best For |
|----------|---------|----------|
| Direct | "Shop now" / "Get yours today" | E-commerce, clear intent |
| Curiosity | "See why [X] people switched" | Consideration stage |
| Urgency | "Only [X] left at this price" | Limited inventory, promos |
| Risk Reversal | "Try it free for 30 days" | SaaS, subscription, high-price |
| Social | "Join [X] happy customers" | Community-driven products |
| Benefit | "Start [desired outcome] today" | Transformation products |
### 1.5 Multi-Format Ad Strategy
#### Platform Format Guide
| Platform | Primary Format | Secondary | Max Length | Autoplay? |
|----------|---------------|-----------|------------|-----------|
| TikTok | 9:16 | — | 60s (15-30s optimal) | Yes, sound on |
| Instagram Reels | 9:16 | — | 90s (15-30s optimal) | Yes, sound off default |
| Instagram Feed | 1:1 or 4:5 | 9:16 | 60s (15s optimal) | Yes, sound off |
| Facebook Feed | 1:1 or 4:5 | 16:9 | 240s (15-30s optimal) | Yes, sound off |
| YouTube Shorts | 9:16 | — | 60s (30-45s optimal) | Yes, sound on |
| YouTube Pre-roll | 16:9 | — | 15s or 30s (non-skip: 6-15s) | Yes, sound on |
| LinkedIn | 16:9 or 1:1 | — | 30s (15s optimal) | Yes, sound off |
#### Format Decision Matrix
```
Need maximum reach on mobile? → 9:16
Running YouTube pre-roll? → 16:9
Want to repurpose across Meta + LinkedIn? → 1:1
Instagram Feed placement priority? → 4:5
Creating one asset for everywhere? → 1:1 (safest universal)
```
#### Multi-Format Production Strategy
When creating a campaign across platforms:
1. **Hero asset**: Create the 9:16 version first (vertical = most platforms)
2. **Adapt to 1:1**: Crop or reframe for feed placements
3. **Adapt to 16:9**: For YouTube/LinkedIn landscape needs
4. Always create **text-safe** versions (captions baked in) for sound-off platforms
### 1.6 A/B Testing Framework
#### What to Test (Priority Order)
1. **Hook** (highest impact): Test 3-5 different hooks with the same body
2. **CTA**: Test 2-3 CTA variations
3. **Format/aspect ratio**: 9:16 vs 1:1 on the same platform
4. **Length**: 15s vs 30s with same content
5. **Avatar/presenter**: Different demographics or styles
6. **Music/audio**: Background music vs no music vs voiceover only
#### Testing Rules
- Change **one variable** per test
- Minimum **$50-100 spend per variant** before judging
- Need at least **1,000 impressions per variant** for directional data
- Run for **3-7 days minimum** to account for day-of-week variance
- Primary metric: **Hook rate** (3-second views / impressions)
- Secondary metric: **Hold rate** (video completions / 3-second views)
- Outcome metric: **CPA** or **ROAS** (only meaningful at sufficient spend)
#### Batch Testing Workflow
```
1. Write 5 hook variants for same product
2. Pair each hook with identical body + CTA
3. Generate all 5 as video ads
4. Launch as separate ad sets with identical targeting
5. After 3 days: Kill bottom 2 performers
6. After 7 days: Scale winner, create new hooks inspired by winner
```
### 1.7 Batch Workflow Architecture
These async patterns work for any video generation API, not just Creatify.
#### Async Polling Pattern
```python
import time
import requests
def poll_until_done(status_url, headers, max_wait=600, interval=10):
"""Universal async polling for video generation jobs."""
elapsed = 0
while elapsed < max_wait:
resp = requests.get(status_url, headers=headers)
data = resp.json()
status = data.get("status", "")
if status == "done":
return data
elif status in ("failed", "error"):
raise Exception(f"Job failed: {data.get('failed_reason', 'Unknown')}")
time.sleep(interval)
elapsed += interval
raise TimeoutError(f"Job did not complete within {max_wait}s")
```
#### Webhook Handler Pattern
```python
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/webhook/video-complete", methods=["POST"])
def handle_video_webhook():
"""Receive webhook when video generation completes."""
payload = request.json
job_id = payload["id"]
status = payload["status"]
if status == "done":
video_url = payload["video_output"]
# Process completed video (download, notify, queue next step)
process_completed_video(job_id, video_url)
elif status == "failed":
handle_failure(job_id, payload.get("failed_reason"))
return jsonify({"received": True}), 200
```
#### Rate Limiting & Error Recovery
```python
import time
from collections import deque
class RateLimiter:
"""Token bucket rate limiter for API calls."""
def __init__(self, max_per_minute=30):
self.max_per_minute = max_per_minute
self.timestamps = deque()
def wait_if_needed(self):
now = time.time()
# Remove timestamps older than 60 seconds
while self.timestamps and self.timestamps[0] < now - 60:
self.timestamps.popleft()
if len(self.timestamps) >= self.max_per_minute:
sleep_time = 60 - (now - self.timestamps[0])
time.sleep(max(0, sleep_time))
self.timestamps.append(time.time())
def batch_generate_with_retry(jobs, generate_fn, max_retries=3):
"""Process a batch of generation jobs with retry logic."""
limiter = RateLimiter(max_per_minute=30)
results = []
for job in jobs:
retries = 0
while retries < max_retries:
try:
limiter.wait_if_needed()
result = generate_fn(job)
results.append({"job": job, "result": result, "status": "success"})
break
except Exception as e:
retries += 1
if retries == max_retries:
results.append({"job": job, "error": str(e), "status": "failed"})
else:
time.sleep(2 ** retries) # Exponential backoff
return results
```
---
## Part 2: API Automation
Automate everything from Part 1 at scale using the API.
### 2.1 Setup & Authentication
```python
import requests
GitHub에서 보기