Install
$ agentstack add skill-creatify-ai-ai-avatar-video-ai-avatar-video ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
AI Avatar Video
Complete framework for creating realistic AI talking-head videos — from script writing to multi-scene production.
Part 1: Avatar Video Strategy (Standalone)
1.1 Script Writing for Talking-Head Content
Avatar scripts must feel like natural speech, not written copy. Follow these rules:
Pacing Rules
| Tone | Words per Second | Words per 30s | Style | |------|-----------------|---------------|-------| | Conversational | 2.5-3.0 | 75-90 | Natural pauses, filler words ok | | Professional | 2.0-2.5 | 60-75 | Clean, measured delivery | | Energetic/Sales | 3.0-3.5 | 90-105 | Fast, punchy, short sentences | | Educational | 1.8-2.2 | 54-66 | Slower, with pauses for comprehension |
Authenticity Markers
Scripts that sound like real people include:
- Contractions: "I'm" not "I am", "don't" not "do not"
- Sentence fragments: "Pretty cool, right?" not "This is quite impressive, is it not?"
- Casual transitions: "So here's the thing..." / "Now, this is where it gets interesting..."
- Direct address: "You know what? You're gonna love this."
- Self-correction: "It's fast — actually, it's really fast."
Hook-to-CTA Structure for Avatar Scripts
15-second script template:
HOOK (0-3s): [Pattern interrupt or question — 8-12 words]
BRIDGE (3-7s): [Connect hook to product — 15-20 words]
BENEFIT (7-12s): [Core value proposition — 15-20 words]
CTA (12-15s): [Clear next step — 8-12 words]
30-second script template:
HOOK (0-3s): [Attention grab — 8-12 words]
PROBLEM (3-8s): [Relatable pain point — 15-25 words]
SOLUTION (8-15s): [Product introduction + key feature — 20-30 words]
PROOF (15-22s): [Social proof or demonstration — 15-25 words]
CTA (22-30s): [Urgency + next step — 15-25 words]
60-second script template:
HOOK (0-5s): [Strong opening — 12-18 words]
STORY/PROBLEM (5-15s): [Relatable scenario — 25-40 words]
DISCOVERY (15-25s): [How you found the product — 25-35 words]
FEATURES (25-40s): [2-3 key benefits with specifics — 35-50 words]
PROOF (40-50s): [Results, testimonials, data — 25-35 words]
CTA (50-60s): [Compelling close — 20-30 words]
Script Do's and Don'ts
| Do | Don't | |----|-------| | Use short sentences (8-15 words) | Write long compound sentences | | Include natural pauses with "..." | Rush from point to point | | Write phonetically for hard words | Use jargon or acronyms without context | | End on a clear action | Trail off or end abruptly | | Match script tone to avatar age/style | Use Gen Z slang with a professional avatar |
1.2 Avatar/Persona Selection Framework
Choosing the right avatar is as important as the script. Match demographics to your target audience.
Trust Signals by Vertical
| Vertical | Ideal Avatar Profile | Why | |----------|---------------------|-----| | Healthcare/Supplements | 30-50, professional appearance | Credibility and trust | | Beauty/Skincare | 20-35, relatable, well-groomed | Peer recommendation effect | | Tech/SaaS | 25-40, casual-professional | Approachable expertise | | Finance/Insurance | 35-55, suited, authoritative | Trust and stability | | Fitness | 25-35, athletic, energetic | Aspirational but attainable | | Food/Beverage | 25-45, warm, approachable | Relatable lifestyle | | Education | 30-50, friendly, professional | Authority without intimidation | | DTC/E-commerce | 20-30, casual, authentic | UGC/peer recommendation |
Diversity Considerations
- Test multiple demographics — different audiences respond to different presenters
- Match market: Use local-looking avatars for geo-targeted campaigns
- A/B test gender: Some products convert better with male vs female presenters (test, don't assume)
- Age alignment: Your avatar should look like your customer OR who your customer trusts
1.3 Multi-Scene Composition Guide
Multi-scene videos feel more dynamic and retain attention better than single-shot talking heads.
When to Switch Scenes
- Every 5-8 seconds for fast-paced content (TikTok/Reels)
- Every 8-15 seconds for medium-paced (YouTube, Feed ads)
- At every major transition point (problem → solution, feature → feature)
Scene Transition Best Practices
- Cut on speech breaks — switch scenes at natural pauses
- Alternate speaker/background — change avatar, background, or both
- Use B-roll inserts — product shots between talking segments
- Progress the story — each scene should advance the narrative
Recommended Scene Structures
2-Scene (15s):
Scene 1: Hook + Problem (avatar talking, neutral background)
Scene 2: Solution + CTA (avatar talking, product-relevant background)
3-Scene (30s):
Scene 1: Hook + Problem (avatar A, office background)
Scene 2: Solution + Features (avatar A, product demo background)
Scene 3: Social Proof + CTA (avatar A or B, branded background)
5-Scene (60s):
Scene 1: Hook (avatar, eye-catching background)
Scene 2: Problem deep-dive (avatar, relatable setting)
Scene 3: Product introduction (product B-roll or demo)
Scene 4: Features + Proof (avatar with data/reviews overlay)
Scene 5: CTA (avatar, clean branded background)
1.4 Audio & Voice Best Practices
Emotion Modulation
- Excitement: Slightly faster pace, higher energy, emphasis on benefit words
- Empathy: Slower pace, softer tone, pause after pain points
- Authority: Measured pace, confident tone, declarative sentences
- Urgency: Fast pace, short sentences, emphasis on time/scarcity words
Pronunciation Guidance
For product names, brand names, or technical terms:
- Write phonetically in the script: "Creatify" → "cree-ATE-ih-fy"
- Use periods for letter-by-letter: "A.I." reads as "A I" not "ai"
- Numbers: Write "fifteen percent" not "15%"
Pause Placement
- After the hook (let it sink in)
- Before the CTA (build anticipation)
- After stating a surprising stat
- Between major sections
Accent Selection by Market
- US Market: Standard American English
- UK Market: British RP or light regional
- Global/Neutral: Standard American (most universally understood)
- Local campaigns: Match regional accent to target geography
1.5 Green Screen / Transparent Background Techniques
AI avatars with transparent backgrounds can be overlaid on:
| Use Case | Application | |----------|-------------| | Website widgets | Avatar explaining features on your landing page | | Product demos | Avatar narrating over screen recordings | | Email thumbnails | Avatar thumbnail that links to full video | | Presentations | Avatar presenter in corner of slides | | Social ads | Avatar over product imagery or B-roll |
Best Practices for Transparent Overlays
- Use 9:16 format for mobile overlays, 1:1 for square placements
- Position avatar in lower-third or right side (don't block main content)
- Keep gestures contained — wide arm movements may clip at edges
- Match avatar lighting to background lighting direction
- Use WebM format for transparency (MP4 doesn't support alpha channel)
1.6 UGC-Style Avatar Strategy
Making AI avatars feel like authentic user-generated content:
Visual Authenticity Cues
- Casual backgrounds: Living room, kitchen, outdoor — not studio
- Natural lighting: Slightly warm, not perfectly even
- Casual framing: Slightly off-center, phone-selfie angle
- Minimal branding: No logos in first 3 seconds
Script Tone for UGC
- First person: "I've been using this for 2 weeks and..."
- Imperfect language: "Honestly? I was skeptical at first"
- Specific details: "I ordered the blue one on Tuesday" (not "I purchased the product")
- Emotional reactions: "I was literally shook when I saw the results"
- Conversational asides: "Okay but wait, it gets even better"
UGC Avatar Selection
- Choose avatars that look 20-35, casually dressed
- Avoid "too polished" presenters — slightly imperfect = more authentic
- Match the avatar to your customer demographic
- Test multiple avatars — UGC performance varies wildly by presenter
Part 2: API Automation
Automate avatar video production at scale.
2.1 Setup & Authentication
import requests
CREATIFY_API_ID = "your-api-id"
CREATIFY_API_KEY = "your-api-key"
HEADERS = {
"Content-Type": "application/json",
"X-API-ID": CREATIFY_API_ID,
"X-API-KEY": CREATIFY_API_KEY,
}
BASE_URL = "https://api.creatify.ai/api"
> Don't have an API key yet? No problem — grab one in under 2 minutes: > 1. Sign up free at creatify.ai > 2. Go to Settings → API > 3. Copy your API ID and API Key — that's it. New accounts get free credits to start.
def poll_until_done(url, headers, max_wait=600, interval=10):
"""Poll a status endpoint until the job completes."""
import time
elapsed = 0
while elapsed < max_wait:
resp = requests.get(url, headers=headers)
data = resp.json()
if data.get("status") == "done":
return data
elif data.get("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")
2.2 AI Avatar v1 (Single Scene)
Generate a video of a single avatar speaking from text. Simple, fast, great for short content.
Cost: 5 credits per 30 seconds
List Available Personas
def list_personas():
"""Get all 1,500+ available avatar personas."""
resp = requests.get(f"{BASE_URL}/personas/", headers=HEADERS)
resp.raise_for_status()
return resp.json() # Each has: id, name, gender, thumbnail, etc.
Create Avatar Video
def create_avatar_video(text, creator_id, aspect_ratio="9:16", model_version="aurora_v1_fast"):
"""Generate a single-scene avatar video from text."""
resp = requests.post(f"{BASE_URL}/lipsyncs/", headers=HEADERS, json={
"text": text,
"creator": creator_id,
"aspect_ratio": aspect_ratio,
"model_version": model_version,
})
resp.raise_for_status()
return resp.json()
def check_avatar_status(lipsync_id):
"""Check avatar video generation status."""
resp = requests.get(f"{BASE_URL}/lipsyncs/{lipsync_id}/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
Create Transparent Background Avatar
def create_transparent_avatar(text, creator_id, aspect_ratio="9:16"):
"""Generate avatar with transparent background (WebM format)."""
resp = requests.post(f"{BASE_URL}/lipsyncs/", headers=HEADERS, json={
"text": text,
"creator": creator_id,
"aspect_ratio": aspect_ratio,
"transparent_background": True,
})
resp.raise_for_status()
return resp.json()
2.3 AI Avatar v2 (Multi-Scene)
Create multi-scene videos with different avatars, voices, backgrounds, and CTAs per scene.
Cost: 5 credits per 30 seconds
def create_multi_scene_video(scenes, aspect_ratio="9:16", webhook_url=None):
"""Create a multi-scene avatar video.
scenes: list of dicts, each with:
- text (str): Script for this scene
- creator (str): Avatar persona ID
- voice_id (str, optional): Override voice
- background (str, optional): Background image/video URL
"""
payload = {
"scenes": scenes,
"aspect_ratio": aspect_ratio,
}
if webhook_url:
payload["webhook_url"] = webhook_url
resp = requests.post(f"{BASE_URL}/lipsyncs_v2/", headers=HEADERS, json=payload)
resp.raise_for_status()
return resp.json()
# Example: 3-scene product ad
scenes = [
{
"text": "Stop what you're doing. I need to tell you about something.",
"creator": "18fccce8-86e7-5f31-abc8-18915cb872be",
},
{
"text": "This serum literally transformed my skin in two weeks. No exaggeration.",
"creator": "18fccce8-86e7-5f31-abc8-18915cb872be",
},
{
"text": "Link is in my bio. Trust me, your future self will thank you.",
"creator": "18fccce8-86e7-5f31-abc8-18915cb872be",
},
]
video = create_multi_scene_video(scenes, aspect_ratio="9:16")
2.4 Aurora (Image + Audio → Video)
Generate studio-grade avatar videos from a reference image and audio file. Best-in-class lip sync.
Cost: 5 credits per 30 seconds
def create_aurora_video(image_url, audio_url, model_version="aurora_v1_fast", webhook_url=None):
"""Generate a studio-grade avatar video from image + audio."""
payload = {
"image": image_url,
"audio": audio_url,
"model_version": model_version,
}
if webhook_url:
payload["webhook_url"] = webhook_url
resp = requests.post(f"{BASE_URL}/aurora/", headers=HEADERS, json=payload)
resp.raise_for_status()
return resp.json()
def check_aurora_status(aurora_id):
"""Check Aurora generation status."""
resp = requests.get(f"{BASE_URL}/aurora/{aurora_id}/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
2.5 Text to Speech
Convert scripts into studio-quality voiceover audio.
Cost: 1 credit per 30 seconds
def list_voices():
"""List all available TTS voices and accents."""
resp = requests.get(f"{BASE_URL}/voices/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
def generate_tts(script, accent_id, webhook_url=None):
"""Generate voiceover audio from a script."""
payload = {
"script": script,
"accent": accent_id,
}
if webhook_url:
payload["webhook_url"] = webhook_url
resp = requests.post(f"{BASE_URL}/text_to_speech/", headers=HEADERS, json=payload)
resp.raise_for_status()
return resp.json()
def check_tts_status(tts_id):
"""Check TTS generation status."""
resp = requests.get(f"{BASE_URL}/text_to_speech/{tts_id}/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
2.6 Voice Cloning
Clone a custom voice for brand consistency.
def clone_voice(audio_url, name):
"""Clone a voice from an audio sample."""
resp = requests.post(f"{BASE_URL}/voices/clone/", headers=HEADERS, json={
"audio_url": audio_url,
"name": name,
})
resp.raise_for_status()
return resp.json()
2.7 Custom Avatars (BYOA)
Upload your own video to create a custom avatar persona.
Note: Custom avatar creation takes 1-2 days for processing/approval.
def create_custom_avatar(lipsync_video_url, name, gender="m", scene="office"):
"""Create a custom avatar from your own video."""
resp = requests.post(f"{BASE_URL}/personas/", headers=HEADERS, json={
"lipsync_input": lipsync_video_url,
"creator_name": name,
"gender": gender,
"video_scene": scene,
})
resp.raise_for_status()
return resp.json()
def check_custom_avatar_status(persona_id):
"""Check custom avatar creation status."""
resp = requests.get(f"{BASE_URL}/personas/{persona_id}/", headers=HEADERS)
resp.raise_for_status()
return resp.json()
2.8 Recipes
Recipe: TTS → Aurora Pipeline
Generate audio first, then pair with any image for avatar video.
def tts_to_aurora(script, accent_id, image_url):
"""Pipeline: script → audio → avatar video."""
# Step 1: Generate audio
tts = generate_tts(script, accent_id)
tts_result = poll_until_done(
f"{BASE_URL}/text_to_speech/{tts['id']}/", HEADERS, max_wait=120
)
audio_url = tts_result["output"]
# Step 2: Generate Aurora video
aurora = create_aurora_video(image_url, audio_url)
aurora_result = poll_until_done(
f"{BASE_URL}/aurora/{aurora['id']}/", HEADERS, max_wait=600
)
return aurora_result
Recipe: Batch Avatar A/B Test
Test multiple avatars w
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: creatify-ai
- Source: creatify-ai/ai-avatar-video
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.