New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Animate first frames into A-roll talking head clips

Animate (A-Roll)

by TheMattBerman · MIT license · ★ 71 on GitHub · updated Mar 27

Animate (A-Roll) cover

Animate first frames into A-roll talking head clips. Uses Sora 2 via fal.ai (primary) with Kling 3 auto-fallback when Sora is unavailable or sunset.

---
name: scrollclaw-animate
description: "Animate first frames into A-roll talking head clips. Uses Sora 2 via fal.ai (primary) with Kling 3 auto-fallback when Sora is unavailable or sunset."
metadata:
  openclaw:
    emoji: "🎥"
    user-invocable: true
    triggers:
      - "animate clip"
      - "sora animate"
      - "generate clip"
      - "a-roll"
      - "talking head clip"
      - "sora video"
      - "kling animate"
      - "kling a-roll"
---

Overview

Turns first frames into talking head clips with synced lip movement and audio. Image-to-video is the default — text-to-video is the fallback.

What you get

  • Producesone A-roll clip per [A-ROLL] segment plus append-only generation logs
  • FormatMP4 files in workspace/campaigns/<slug>/clips/ and rows in output-log.md
  • Default behavioruse Sora image-to-video with the approved first frame; use text-to-video only as a fallback when no usable frame exists
  • Downstream use/b-roll and /assemble
Manual install (npx, ZIP)
Claude Codenpx skills add TheMattBerman/scrollclaw --skill scrollclaw-animate -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/TheMattBerman/scrollclaw/tar.gz/ea175d4b62fd \ | tar -xz -C ~/.claude/skills --strip-components=1 scrollclaw-ea175d4b62fd/animate
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/a593426c263190b511ae/animate.zip" -OutFile "$env:TEMP\animate.zip"; Expand-Archive "$env:TEMP\animate.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.5 KB
  • references/2 files · 19.7 KB
Read the files here
TheMattBerman/ea175d43 files
Shared references1SKILL.md reads these from elsewhere in the repo. Not in the ZIP.Get them on GitHub ↗
SKILL.md
Show the full text160 lines

Animate (A-Roll)

Turns first frames into talking head clips with synced lip movement and audio. Image-to-video is the default — text-to-video is the fallback.

Fallback chain: Sora 2 (fal.ai) -> Kling 3 (fal.ai) -> Kling 3 (Replicate). Use --provider kling to skip Sora entirely (for when Sora is sunset).

Prerequisites

  • First frame approved (from /first-frame)
  • Script with [A-ROLL] segments tagged (from /persona)

Motion Prompting

Read references/motion-prompting.md for the structured prompt format. Use labeled fields — not prose paragraphs:

  • Camera — handheld energy, micro-shake, slight reframe
  • Subject — keep generic (first frame defines appearance). Detailed facial descriptions trigger content safety filters
  • Dialogue — include actual script lines. Sora generates synced lip movement + audio
  • Audio — describe the RESULT not the gear. "Clean natural podcast audio, voice close and present, subtle room tone" works. Naming specific mics doesn't.
  • Environment & light — practical light, deep focus, real-world setting
  • Style & mood — iPhone selfie-camera realism, not cinematic

Generation

USE THE SCRIPTS. DO NOT construct API calls manually. Scripts handle provider routing, field names, polling, downloading, and error handling.

# Image-to-video (RECOMMENDED — first frame locks the face)
bash scripts/generate-clip.sh \
  --provider fal \
  --image workspace/campaigns/<slug>/frames/frame1.png \
  --prompt-file workspace/campaigns/<slug>/motion-prompt.txt \
  --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --label a-roll-01 \
  --seconds 8 --aspect-ratio portrait

# Text-to-video (fallback — no first frame)
bash scripts/generate-clip.sh \
  --provider fal \
  --prompt-file workspace/campaigns/<slug>/scene-prompt.txt \
  --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --label a-roll-01 \
  --seconds 8 --aspect-ratio portrait

# Kling direct (skip Sora — use when Sora is sunset)
bash scripts/generate-clip.sh \
  --provider kling \
  --image workspace/campaigns/<slug>/frames/frame1.png \
  --prompt-file workspace/campaigns/<slug>/motion-prompt.txt \
  --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --label a-roll-01 \
  --seconds 8 --aspect-ratio portrait

# Replicate Sora (legacy — may stop working when Sora is sunset)
bash scripts/generate-clip.sh \
  --provider replicate \
  --image workspace/campaigns/<slug>/frames/frame1.png \
  --prompt-file workspace/campaigns/<slug>/motion-prompt.txt \
  --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --label a-roll-01 \
  --seconds 8 --aspect-ratio portrait

API Reference

Read references/sora-api.md for endpoint details, queue workflow, field names, and duration options. Sora fal.ai supports 4/8/12/16/20s. Kling supports 3-15s (durations >15s are auto-clamped). Replicate Sora is limited to 4/8/12.

Content Filter Handling

Sora's content filter runs AFTER generation — can fail at 99%. If blocked:

  • Soften the motion prompt (keep first frame)
  • Remove any potentially sensitive descriptions
  • Retry with adjusted prompt
  • Or use --provider kling — Kling has no content safety filter

Key Findings

  • Include actual script in Dialogue field — Sora generates synced lip movement
  • For podcast audio: describe the RESULT, not the gear
  • Keep Subject descriptions generic — the first frame already defines appearance
  • fal.ai is primary provider; Kling 3 is auto-fallback when Sora fails or is sunset
  • Use --provider kling to skip Sora entirely

Brand Memory Integration

Reads
File Purpose
workspace/campaigns/<slug>/frames/frame1.png Canonical face — fed to Sora i2v to lock creator identity
workspace/campaigns/<slug>/scripts/<format>-script.md A-roll segments, dialogue, shot timing
workspace/campaigns/<slug>/creators/creator-<name>.md Creator energy/vibe reference for motion prompting
workspace/creators/creator-<name>.md Fallback if no campaign-specific profile exists
Writes
File Notes
workspace/campaigns/<slug>/clips/a-roll-01.mp4 One file per A-roll segment
workspace/campaigns/<slug>/output-log.md Motion prompt, model, duration, provider (append-only)
Context loading
🎥 Animate context loaded:
  ✓ First frame: workspace/campaigns/ridge-q1/frames/frame1.png
  ✓ Script: talking-head (A-roll segments: 3)
  ✓ Creator: Maya
  ✓ Campaign: ridge-q1

Contract

Input
  • Required: approved frame1.png plus a script with [A-ROLL] segments
  • Optional: creator profile details, alternate prompt file, fallback provider
  • Format: workspace image and markdown files plus motion prompt text
  • Source: /first-frame, /persona, and references/motion-prompting.md
Output
  • Produces: one A-roll clip per [A-ROLL] segment plus append-only generation logs
  • Format: MP4 files in workspace/campaigns/<slug>/clips/ and rows in output-log.md
  • Default behavior: use Sora image-to-video with the approved first frame; use text-to-video only as a fallback when no usable frame exists
  • Downstream use: /b-roll and /assemble
Validation
  • Pre-conditions: first frame is approved, script is tagged correctly, and the prompt includes the actual dialogue
  • Post-conditions: local MP4 is saved, creator identity holds, and lip movement/audio feel believable enough to cut into a final video
  • Failure checks: reroll or adjust the prompt if content filters fail, the hands/face break realism, or the clip is too synthetic to pass downstream

Output

  • A-roll clips (MP4) in workspace/campaigns/<slug>/clips/
  • Each clip named a-roll-<segment>.mp4 corresponding to an [A-ROLL] script segment
  • Generation params logged to workspace/campaigns/<slug>/output-log.md

Next Step

A-roll done → run /b-roll for environment shots, or /assemble if no B-roll needed.

1---
2name: scrollclaw-animate
3description: "Animate first frames into A-roll talking head clips. Uses Sora 2 via fal.ai (primary) with Kling 3 auto-fallback when Sora is unavailable or sunset."
4metadata:
5 openclaw:
6 emoji: "🎥"
7 user-invocable: true
8 triggers:
9 - "animate clip"
10 - "sora animate"
11 - "generate clip"
12 - "a-roll"
13 - "talking head clip"
14 - "sora video"
15 - "kling animate"
16 - "kling a-roll"
17---
18 
19# Animate (A-Roll)
20 
21Turns first frames into talking head clips with synced lip movement and audio. Image-to-video is the default — text-to-video is the fallback.
22 
23**Fallback chain:** Sora 2 (fal.ai) -> Kling 3 (fal.ai) -> Kling 3 (Replicate). Use `--provider kling` to skip Sora entirely (for when Sora is sunset).
24 
25## Prerequisites
26 
27- First frame approved (from `/first-frame`)
28- Script with `[A-ROLL]` segments tagged (from `/persona`)
29 
30## Motion Prompting
31 
32Read `references/motion-prompting.md` for the structured prompt format. Use labeled fields — not prose paragraphs:
33 
34- **Camera** — handheld energy, micro-shake, slight reframe
35- **Subject** — keep generic (first frame defines appearance). Detailed facial descriptions trigger content safety filters
36- **Dialogue** — include actual script lines. Sora generates synced lip movement + audio
37- **Audio** — describe the RESULT not the gear. "Clean natural podcast audio, voice close and present, subtle room tone" works. Naming specific mics doesn't.
38- **Environment & light** — practical light, deep focus, real-world setting
39- **Style & mood** — iPhone selfie-camera realism, not cinematic
40 
41## Generation
42 
43**USE THE SCRIPTS. DO NOT construct API calls manually.** Scripts handle provider routing, field names, polling, downloading, and error handling.
44 
45```bash
46# Image-to-video (RECOMMENDED — first frame locks the face)
47bash scripts/generate-clip.sh \
48 --provider fal \
49 --image workspace/campaigns/<slug>/frames/frame1.png \
50 --prompt-file workspace/campaigns/<slug>/motion-prompt.txt \
51 --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
52 --log-file workspace/campaigns/<slug>/output-log.md \
53 --label a-roll-01 \
54 --seconds 8 --aspect-ratio portrait
55 
56# Text-to-video (fallback — no first frame)
57bash scripts/generate-clip.sh \
58 --provider fal \
59 --prompt-file workspace/campaigns/<slug>/scene-prompt.txt \
60 --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
61 --log-file workspace/campaigns/<slug>/output-log.md \
62 --label a-roll-01 \
63 --seconds 8 --aspect-ratio portrait
64 
65# Kling direct (skip Sora — use when Sora is sunset)
66bash scripts/generate-clip.sh \
67 --provider kling \
68 --image workspace/campaigns/<slug>/frames/frame1.png \
69 --prompt-file workspace/campaigns/<slug>/motion-prompt.txt \
70 --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
71 --log-file workspace/campaigns/<slug>/output-log.md \
72 --label a-roll-01 \
73 --seconds 8 --aspect-ratio portrait
74 
75# Replicate Sora (legacy — may stop working when Sora is sunset)
76bash scripts/generate-clip.sh \
77 --provider replicate \
78 --image workspace/campaigns/<slug>/frames/frame1.png \
79 --prompt-file workspace/campaigns/<slug>/motion-prompt.txt \
80 --output workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
81 --log-file workspace/campaigns/<slug>/output-log.md \
82 --label a-roll-01 \
83 --seconds 8 --aspect-ratio portrait
84```
85 
86## API Reference
87 
88Read `references/sora-api.md` for endpoint details, queue workflow, field names, and duration options. Sora fal.ai supports 4/8/12/16/20s. Kling supports 3-15s (durations >15s are auto-clamped). Replicate Sora is limited to 4/8/12.
89 
90## Content Filter Handling
91 
92Sora's content filter runs AFTER generation — can fail at 99%. If blocked:
93- Soften the motion prompt (keep first frame)
94- Remove any potentially sensitive descriptions
95- Retry with adjusted prompt
96- Or use `--provider kling` — Kling has no content safety filter
97 
98## Key Findings
99 
100- Include actual script in Dialogue field — Sora generates synced lip movement
101- For podcast audio: describe the RESULT, not the gear
102- Keep Subject descriptions generic — the first frame already defines appearance
103- fal.ai is primary provider; Kling 3 is auto-fallback when Sora fails or is sunset
104- Use `--provider kling` to skip Sora entirely
105 
106## Brand Memory Integration
107 
108### Reads
109| File | Purpose |
110|------|---------|
111| `workspace/campaigns/<slug>/frames/frame1.png` | Canonical face — fed to Sora i2v to lock creator identity |
112| `workspace/campaigns/<slug>/scripts/<format>-script.md` | A-roll segments, dialogue, shot timing |
113| `workspace/campaigns/<slug>/creators/creator-<name>.md` | Creator energy/vibe reference for motion prompting |
114| `workspace/creators/creator-<name>.md` | Fallback if no campaign-specific profile exists |
115 
116### Writes
117| File | Notes |
118|------|-------|
119| `workspace/campaigns/<slug>/clips/a-roll-01.mp4` | One file per A-roll segment |
120| `workspace/campaigns/<slug>/output-log.md` | Motion prompt, model, duration, provider (append-only) |
121 
122### Context loading
123 
124```
125🎥 Animate context loaded:
126 ✓ First frame: workspace/campaigns/ridge-q1/frames/frame1.png
127 ✓ Script: talking-head (A-roll segments: 3)
128 ✓ Creator: Maya
129 ✓ Campaign: ridge-q1
130```
131 
132## Contract
133 
134### Input
135- Required: approved `frame1.png` plus a script with `[A-ROLL]` segments
136- Optional: creator profile details, alternate prompt file, fallback provider
137- Format: workspace image and markdown files plus motion prompt text
138- Source: `/first-frame`, `/persona`, and `references/motion-prompting.md`
139 
140### Output
141- Produces: one A-roll clip per `[A-ROLL]` segment plus append-only generation logs
142- Format: MP4 files in `workspace/campaigns/<slug>/clips/` and rows in `output-log.md`
143- Default behavior: use Sora image-to-video with the approved first frame; use text-to-video only as a fallback when no usable frame exists
144- Downstream use: `/b-roll` and `/assemble`
145 
146### Validation
147- Pre-conditions: first frame is approved, script is tagged correctly, and the prompt includes the actual dialogue
148- Post-conditions: local MP4 is saved, creator identity holds, and lip movement/audio feel believable enough to cut into a final video
149- Failure checks: reroll or adjust the prompt if content filters fail, the hands/face break realism, or the clip is too synthetic to pass downstream
150 
151## Output
152 
153- A-roll clips (MP4) in `workspace/campaigns/<slug>/clips/`
154- Each clip named `a-roll-<segment>.mp4` corresponding to an `[A-ROLL]` script segment
155- Generation params logged to `workspace/campaigns/<slug>/output-log.md`
156 
157## Next Step
158 
159A-roll done → run `/b-roll` for environment shots, or `/assemble` if no B-roll needed.
160 
View all files on GitHub →

Details

Updated
Mar 27, 2026
License
MIT
Stars on the repo
★ 71
Checked
Source
TheMattBerman/scrollclaw ↗
Creator
TheMattBerman · 6 listings
View creator

Similar skills

See all →
SkillMake a polished video of an app or a featureMake a demo video with OpenScreengetopenscreen/openscreen · by getopenscreenMake a polished video of an app or a feature with OpenScreen's MCP tools, from storyboard to recording, editing and export, then either attach it to a pull request or draft a post on X. Use when the user asks for a demo, a demo video, a screen recording, a product video, a launch clip, a video for X/Twitter, LinkedIn or a README, or to show a change in a pull request ("add a video to the PR", "show the feature to reviewers"). Also use to set OpenScreen up for an agent, and to continue an OpenScreen demo in a new session.★ 4.5k GitHub starsSkillVideo and audio processing with FFmpegFFmpeg for Video Productiondigitalsamba/claude-code-video-toolkit · by digitalsambaVideo and audio processing with FFmpeg. Use for format conversion, resizing, compression, audio extraction, and preparing assets for Remotion. Triggers include converting GIF to MP4, resizing video, extracting audio, compressing files, or any media transformation task.★ 2.1k GitHub starsSkillTurn static SCREENSHOTS into a simulated screen recordingfake-screencast — screenshots → simulated screen recordinghassancs91/claude-youtube-editor · by hassancs91Turn static SCREENSHOTS into a simulated screen recording (TSX) — a fake screencast with an animated cursor that eases to targets and clicks, a browser URL bar that updates per page, hard-cut navigations, in-page filter crossfades, smooth scroll, and a ken-burns zoom onto the payoff. Use when a beat needs to show a walkthrough of a web app / dashboard / settings page and you'd rather build it from screenshots than get (or ask for) a real screen recording — "fake a screen recording", "turn these screenshots into a screencast", "simulate clicking through the dashboard", "animate this UI walkthrough", "cursor moving through the app". Built on remotion/src/lib/screencast.tsx. This is a technique WITHIN step 2 (make-tsx): defer timeline/render/bake orchestration to make-tsx and raw crash-free TSX rules to vidtsx-2d-generator. Not for a single static page clone (use WebBrowserFrame directly) and not when the point is genuine proof of real speed/output (use a real recording).★ 330 GitHub starsSkillA Khan Academy style explainer videoKhan explainerhaiderfarooq3/khan-explainer · by haiderfarooq3Use when the user wants a Khan Academy style explainer video, a blackboard or whiteboard lesson, a hand-drawn chalk-talk animation, a short narrated video that teaches a concept ("explain X in a video", "explainer video", "teach X in 30 seconds"), or a tutorial that draws hand-written arrows, circles and captions over product screenshots ("draw over the UI", "annotated walkthrough"), or clips cut from a YouTube video or podcast where the speaker's real audio plays under a blackboard drawn to it ("khanify this video", "clip this with the Khan visual"), especially when it must be free, local, and use no paid APIs or keys. macOS only.★ 113 GitHub starsSkillPick the output format that makes an explanation easiestUnderstanding ladderChangWenC/understanding-ladder · by ChangWenCPick the output format that makes an explanation easiest to understand, following Karpathy's understanding ladder — (1) plain controlled text, (2) diagram, (3) interactive HTML page, (4) 3Blue1Brown-style explainer video. Classify the content (definition/steps, process/causality, parameter→outcome, unfolding derivation), recommend the lowest rung that fully answers, then produce it. Works in English and Chinese. Use when the user says "explain this clearly", "help me understand", "draw a diagram", "make it interactive", "make an explainer video", "what's the best way to explain X", "understanding ladder", "Karpathy ladder", or 「讲清楚」「帮我理解」「画个图」「做个交互页」「做个讲解视频」「用哪种方式讲最好懂」「理解阶梯」; also when explaining a non-trivial concept, mechanism, algorithm, or an AI agent's output.★ 108 GitHub starsSkillGenerate B-roll environment and product shots with Kling 3B-Roll (Kling 3)TheMattBerman/scrollclaw · by TheMattBermanGenerate B-roll environment and product shots with Kling 3 via fal.ai. Environment matching, cut timing, and visual-only clips that play under continuous voice.★ 71 GitHub stars

More from TheMattBerman

SkillGenerate B-roll environment and product shots with Kling 3B-Roll (Kling 3)TheMattBerman/scrollclaw · by TheMattBermanGenerate B-roll environment and product shots with Kling 3 via fal.ai. Environment matching, cut timing, and visual-only clips that play under continuous voice.★ 71 GitHub starsSkillStart of the UGC pipeline for persona researchPersona & ScriptTheMattBerman/scrollclaw · by TheMattBermanStart of the UGC pipeline for persona research, creator profiles, format selection, and scriptwriting. Use when the user is clearly asking for messaging work rather than broad full-pipeline orchestration.★ 71 GitHub starsSkillRouter and orchestrator for AI UGC video productionScrollClawTheMattBerman/scrollclaw · by TheMattBermanRouter and orchestrator for AI UGC video production. Use for broad outcome requests like making a UGC video or running a campaign; it routes step-specific requests to the right sub-skill and can drive the full pipeline from persona research through virality-scored video.★ 71 GitHub starsSkillScrollClaw system — core doctrine, format selectionTheMattBerman/scrollclaw · by TheMattBermanScrollClaw system — core doctrine, format selection, pipeline routing, and anti-patterns. Loaded into every UGC conversation.★ 71 GitHub starsSkillScore UGC videos for virality before publishingVirality ScoringTheMattBerman/scrollclaw · by TheMattBermanScore UGC videos for virality before publishing. 7 criteria, 0-100 each. Only 70+ gets published.★ 71 GitHub stars