/SKILL.md
End-to-end AI video production with avatar narration (HeyGen) and programmatic composition (Remotion). Use for creating tutorials, explainers, product demos, and narrated videos. Supports multi-language, custom branding, screen recordings, and batch clip generation.
npx skillsauth add codalabs-xyz/ai-video-creator-skill ai-video-creatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Complete video production pipeline: Audio → Visual composition → Optional avatar overlay.
Don't start with full avatar videos! This wastes money and time.
Phase 1: Audio only (TTS) → Iterate on script timing
Phase 2: Compose visuals (code + browser) → Test layout
Phase 3: Add avatar overlay (optional) → Final polish
┌────────────────────────────────────────────┐
│ 🏰 Openfort React SDK 01-intro │ ← Top bar
├─────────────────────┬──────────────────────┤
│ │ │
│ CODE │ BROWSER │
│ (55%) │ (45%) │
│ │ │
│ │ │
│ │ [localhost:3000] │
│ │ │
│ │ │
│ ╭────┴──╮ │
│ │ 👤 │ ← Avatar circle │
│ │avatar │ (optional, │
│ ╰───────╯ added last) │
└────────────────────────────────────────────┘
# 1. Generate AUDIO only (cheap, fast)
node scripts/generate-audio.js --config clips.json --output ./audio
# 2. Compose video with audio + visuals (no avatar)
npx remotion render Prototype ./output/prototype.mp4
# 3. Review and iterate (repeat 1-2 until happy)
# 4. ONLY THEN: Generate avatar clips (expensive)
HEYGEN_API_KEY=xxx node scripts/generate-clips.js --config clips.json --output ./clips
# 5. Final render with avatar overlay
npx remotion render TutorialWithAvatar ./output/final.mp4
Generate just the audio narration:
# Option A: HeyGen audio-only (uses voice without avatar)
node scripts/generate-audio.js --config clips.json --voice VOICE_ID
# Option B: ElevenLabs (often cheaper)
node scripts/generate-audio-eleven.js --config clips.json --voice "Rachel"
# Option C: OpenAI TTS (cheapest)
node scripts/generate-audio-openai.js --config clips.json --voice "nova"
Create the split-screen layout without avatar:
// Remotion component structure
<SplitLayout>
<CodePanel width="55%">
<SyntaxHighlightedCode />
</CodePanel>
<BrowserPanel width="45%">
<BrowserChrome url="localhost:3000">
<AppScreenshot />
</BrowserChrome>
</BrowserPanel>
<Audio src={narrationAudio} />
</SplitLayout>
Render prototype:
npx remotion render Prototype ./output/prototype.mp4
Review the prototype before spending on avatar!
Now that the content is finalized, generate avatar clips:
HEYGEN_API_KEY=xxx node scripts/generate-clips.js \
--config clips.json \
--output ./clips \
--resolution 720p # Use 720p unless plan supports 1080p
Add avatar as circular overlay (picture-in-picture):
// Avatar overlay style
<AvatarOverlay
position="bottom-right" // or "bottom-center"
size={280}
style="circle"
border="4px solid rgba(255,255,255,0.2)"
>
<OffthreadVideo src={avatarClip} />
</AvatarOverlay>
| Plan | Max Resolution | Notes | |------|---------------|-------| | Free/Basic | 720p (1280x720) | Most accounts | | Pro | 1080p (1920x1080) | Requires subscription | | Enterprise | 4K | Custom plans |
Always check your plan before generating! Using unsupported resolution = failed jobs + wasted queue time.
| Approach | Cost | Use When | |----------|------|----------| | Audio-only TTS | $0.01-0.05/min | Prototyping, iteration | | HeyGen 720p | ~$1/min | Final avatar | | HeyGen 1080p | ~$1.50/min | High-quality final |
Rule: Iterate with audio-only, render avatar once.
<break time="0.5s"/> for natural rhythm# 1. Audio prototype in target language
node scripts/generate-audio.js --config clips-es.json --voice "es-ES-female"
# 2. Compose & review
npx remotion render Prototype-ES ./output/prototype-es.mp4
# 3. Generate Spanish avatar only when satisfied
node scripts/generate-clips.js --config clips-es.json --voice "1eca26cb..."
| Issue | Solution | |-------|----------| | "RESOLUTION_NOT_ALLOWED" | Use 720p (1280x720) | | Clips stuck "waiting" | Check credits/subscription | | Avatar desync | Keep clips under 100 words | | Expensive iteration | Use audio-only for prototypes! |
references/heygen-api.md — Full HeyGen API docsreferences/remotion-templates.md — Ready-to-use layoutsreferences/tts-comparison.md — TTS providers comparisontools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.