agentleFS
creatify-aicreatify-ai/ai-avatar-video/SKILL.md

ai-avatar-video

Skill27 starsChanged 9 months agoMITView on GitHub

Complete AI avatar and talking-head video toolkit. Includes script writing for talking-head content, persona selection frameworks, multi-scene composition, voice/audio best practices, green screen techniques, and UGC-style authenticity guides. Integrates with Creatify API for AI Avatar v1/v2, Aurora, Text-to-Speech, Custom Avatars, and Voice Cloning.

  • Reads credentials

6 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use ace-step, codex-pet and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • prime-skillsSkill

    ace-step

    Generate, inpaint, and outpaint music with ACE Step on RunComfy via the `runcomfy` CLI. ACE Step is StepFun-AI's open-weights music foundation model — tag-driven composition (genre, mood, instruments), multilingual lyrics with section markers, 5 s to 4 min stereo output, $0.0002–0.0003 per second (≈ 27× cheaper than ElevenLabs Music). Four endpoints: ACE Step text-to-audio (the default), ACE Step 1.5 text-to-audio (50+ language lyrics, refined structured-lyric handling), ACE Step audio-inpaint (regenerate a time range inside an existing track), ACE Step audio-outpaint (extend an existing track before or after). Triggers on "ace step", "ace-step", "acestep", "ACE music", "open music model", "cheap AI music", "inpaint audio", "audio inpaint", "extend music", "audio outpaint", "lengthen track", "music with tags", or any explicit ask to generate or edit music with ACE Step.

    Also in 3 projects that use this

  • prime-skillsSkill

    codex-pet

    Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into `${CODEX_HOME:-$HOME/.codex}/pets/<name>/` and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as `runcomfy run openai/gpt-image-2/edit` to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no `$imagegen`, no OPENAI_API_KEY required, only RUNCOMFY_TOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.

    Also in 3 projects that use this

  • eachlabsSkill

    image-outpainting

    Extend and expand images beyond their original boundaries using each::sense AI. Create panoramic views, convert aspect ratios, add backgrounds, and uncrop photos intelligently.

    Also in 3 projects that use this

  • +9 more from prime-skills
  • Other versions6 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 6

    1. prime-skills/runcomfy-agent-skills★ 41same name
    2. genmedia-labs/skills★ 26same name
    3. runcomfy-com/skills★ 16same name
    4. alfredang/skills★ 2same name
    5. AngelescuCiprian/claude-skills★ 0same name
    6. nikunj812/claude-skill★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

The file

Show its rules and text

We split this skill into the rules it gives an agent

16 rules. 0 are common, 16 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 6 edited versions we read keep these.

  • 16

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Match market: Use local-looking avatars for geo-targeted campaigns

    line 96
  2. Distinctive:

    Every 5-8 seconds for fast-paced content (TikTok/Reels)

    line 105
  3. Distinctive:

    Every 8-15 seconds for medium-paced (YouTube, Feed ads)

    line 106
  4. Distinctive:

    Write phonetically in the script: "Creatify" → "cree-ATE-ih-fy"

    line 149
  5. Distinctive:

    Use periods for letter-by-letter: "A.I." reads as "A I" not "ai"

    line 150
  6. Distinctive:

    After the hook (let it sink in)

    line 154
  7. Distinctive:

    Before the CTA (build anticipation)

    line 155
  8. Distinctive:

    After stating a surprising stat

    line 156
  9. Distinctive:

    Use 9:16 format for mobile overlays, 1:1 for square placements

    line 178
  10. Distinctive:

    Keep gestures contained — wide arm movements may clip at edges

    line 180
  11. Distinctive:

    Use WebM format for transparency (MP4 doesn't support alpha channel)

    line 182
  12. Distinctive:

    Minimal branding: No logos in first 3 seconds

    line 192
  13. Distinctive:

    Avoid "too polished" presenters — slightly imperfect = more authentic

    line 203
  14. Distinctive:

    Test multiple avatars — UGC performance varies wildly by presenter

    line 205
  15. Distinctive:

    Create multi-scene videos with different avatars, voices, backgrounds, and CTAs per scene.

    line 302
  16. Distinctive:

    Test multiple avatars with the same script to find the best performer.

    line 472

“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

ToneWords per SecondWords per 30sStyle
Conversational2.5-3.075-90Natural pauses, filler words ok
Professional2.0-2.560-75Clean, measured delivery
Energetic/Sales3.0-3.590-105Fast, punchy, short sentences
Educational1.8-2.254-66Slower, 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

DoDon't
Use short sentences (8-15 words)Write long compound sentences
Include natural pauses with "..."Rush from point to point
Write phonetically for hard wordsUse jargon or acronyms without context
End on a clear actionTrail off or end abruptly
Match script tone to avatar age/styleUse 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

VerticalIdeal Avatar ProfileWhy
Healthcare/Supplements30-50, professional appearanceCredibility and trust
Beauty/Skincare20-35, relatable, well-groomedPeer recommendation effect
Tech/SaaS25-40, casual-professionalApproachable expertise
Finance/Insurance35-55, suited, authoritativeTrust and stability
Fitness25-35, athletic, energeticAspirational but attainable
Food/Beverage25-45, warm, approachableRelatable lifestyle
Education30-50, friendly, professionalAuthority without intimidation
DTC/E-commerce20-30, casual, authenticUGC/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

  1. Cut on speech breaks — switch scenes at natural pauses
  2. Alternate speaker/background — change avatar, background, or both
  3. Use B-roll inserts — product shots between talking segments
  4. 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 CaseApplication
Website widgetsAvatar explaining features on your landing page
Product demosAvatar narrating over screen recordings
Email thumbnailsAvatar thumbnail that links to full video
PresentationsAvatar presenter in corner of slides
Social adsAvatar 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 with the same script to find the best performer.

def batch_avatar_ab_test(script, creator_ids, aspect_ratio="9:16"):
    """Generate the same script with multiple avatars for A/B testing."""
    jobs = []
    for creator_id in creator_ids:
        video = create_avatar_video(script, creator_id, aspect_ratio)
        jobs.append({"creator_id": creator_id, "video_id": video["id"]})

    results = []
    for job in jobs:
        try:
            result = poll_until_done(
                f"{BASE_URL}/lipsyncs/{job['video_id']}/", HEADERS, max_wait=600
            )
            results.append({
                "creator_id": job["creator_id"],
                "video_url": result.get("output") or result.get("video_output"),
                "status": "done"
            })
        except Exception as e:
            results.append({
                "creator_id": job["creator_id"],
                "error": str(e),
                "status": "failed"
            })

    return results

Recipe: Multi-Script Avatar Batch

Generate multiple scripts with the same avatar for hook testing.

def multi_script_batch(scripts, creator_id, aspect_ratio="9:16"):
    """Generate multiple scripts with the same avatar."""
    jobs = []
    for script in scripts:
        video = create_avatar_video(script, creator_id, aspect_ratio)
        jobs.append({"script": script[:50], "video_id": video["id"]})

    results = []
    for job in jobs:
        try:
            result = poll_until_done(
                f"{BASE_URL}/lipsyncs/{job['video_id']}/", HEADERS, max_wait=600
            )
            results.append({
                "script_preview": job["script"],
                "video_url": result.get("output") or result.get("video_output"),
                "status": "done"
            })
        except Exception as e:
            results.append({
                "script_preview": job["script"],
                "error": str(e),
                "status": "failed"
            })

    return results

2.9 Credit Costs & Latency Reference

EndpointCreditsTypical Latency
AI Avatar v15 per 30s~1:10 ratio (15s video ≈ 150s)
AI Avatar v2 (multi-scene)5 per 30s~2-5 minutes
Aurora5 per 30s~2-3 minutes
Text to Speech1 per 30s~30-60 seconds
Voice CloningVariesMinutes
Custom Avatar CreationFree (slot required)1-2 days
Preview (v1 or v2)1 per 30s~1-2 minutes
Render (v2)4 per 30s~2-3 minutes

2.10 Decision Matrix

I want to...Use thisCredits
Quick single-avatar videoAI Avatar v15/30s
Multi-scene video with transitionsAI Avatar v25/30s
Best possible lip sync qualityAurora5/30s
Just generate audio narrationText to Speech1/30s
Use my own face/personCustom AvatarFree (slot)
Use my own voiceVoice CloningVaries
Avatar over custom backgroundTransparent + overlay5/30s
A/B test 5 avatar stylesBatch Avatar v1 x525/30s

See Also

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.