ScrollClaw
AI-generated UGC videos that look like a real person pulled out their phone and started talking. Brands pay $500–$5,000 per UGC video from human creators. This pipeline produces them for $5–$50 in API costs.
The Pipeline
Brand name + URL
↓
/brand-setup → One-time brand research + file generation (Step 0)
↓
Brand + Audience
↓
/persona → Persona research, creator profiles, approved script
/first-frame → Canonical face image (Nano Banana 2)
/animate → A-roll talking head clips (Sora 2 i2v)
/b-roll → Environment + product shots (Kling 3)
/assemble → Stitch + unified voice + post-production + captions
/score → Virality gate (70+ to publish)
↓
Scroll-stopping UGC video
Core doctrine: Read _system/SKILL.md for format selection, anti-patterns, taste calibration, and pipeline routing rules.
Brand & campaign context: Read _system/references/brand-campaign-context.md for workspace structure, context matrix, and persistence protocol.
Routing
When the user invokes ScrollClaw or asks about UGC video, route to the right sub-skill based on where they are in the pipeline:
| User says / wants |
Route to |
| "Set up a brand" / "Initialize brand" / "New brand" / "Brand research" |
/brand-setup — one-time, before first campaign |
| "Make me a UGC video" / "Start a campaign" / "I need ugc" |
/persona — start at the beginning |
| "Research this brand" / "Create a creator profile" / "Write a script" |
/persona |
| "Generate the first frame" / "Make a face image" / "Nano Banana" |
/first-frame |
| "Animate this" / "Make a talking head clip" / "Sora" / "A-roll" |
/animate |
| "Generate B-roll" / "Product shot" / "Kling" |
/b-roll |
| "Stitch the clips" / "Add captions" / "Post-production" / "Assemble" |
/assemble |
| "Score this video" / "Is this ready to publish?" |
/score |
| "Run the full pipeline" |
Start at /persona, proceed sequentially |
Broad outcome requests stay at the root. Start the pipeline instead of asking the user to pick a sub-skill.
Stage-specific requests bypass the root and go straight to that sub-skill.
If the user isn't sure where they are, ask: "Where are you in the pipeline?" and show them the 6 steps above.
Contract
Input
- Required: brand/product context plus a campaign goal, or an existing campaign workspace if resuming
- Optional: format preference, creator profile, screen recordings/screenshots, existing clips, campaign slug
- Format: raw text, URL, file paths, or
workspace/campaigns/<slug>/ files
- Source: user prompt, campaign brief, and upstream
workspace/brand/ files
Output
- Produces: either a route decision to the correct stage or a sequential full-pipeline run starting at
/persona
- Format: inline orchestration plus saved workspace artifacts produced by sub-skills
- Default behavior: broad requests like "make me a UGC video" or "start a campaign" start at
/persona and continue stage by stage until blocked by missing inputs, an approval gate, or a dependency failure
- Downstream use:
/persona, /first-frame, /animate, /b-roll, /assemble, and /score
Validation
- Pre-conditions: workspace exists or can be initialized before generation steps begin
- Post-conditions: the user knows the current stage, the next stage, and which workspace artifacts were produced
- Failure checks: do not leave the user at a vague route; if blocked, name the exact missing file, asset, or approval needed
Quick Start
First campaign:
- Set up brand context (one-time per brand):
- Recommended: Run
/brand-setup with your brand name + URL — it researches and generates all three brand files automatically
- Alternative: Copy templates from
assets/ and fill in manually (see assets/ for templates)
- Initialize workspace:
CAMPAIGN="my-campaign"
mkdir -p workspace/campaigns/$CAMPAIGN/{creators,scripts,frames,clips,scores}
cp assets/campaign-brief-template.md workspace/campaigns/$CAMPAIGN/brief.md
touch workspace/campaigns/$CAMPAIGN/output-log.md
touch workspace/campaigns/$CAMPAIGN/learnings.md
- Fill in
workspace/campaigns/$CAMPAIGN/brief.md
- Run
/persona → /first-frame → /animate → /b-roll → /assemble → /score
Check setup first:
bash scripts/check-deps.sh
What ScrollClaw Needs
| Key |
Required |
Used by |
FAL_KEY |
Yes |
Sora 2 (A-roll) + Kling 3 (B-roll) |
REPLICATE_API_TOKEN |
Yes |
Nano Banana (first frames) |
OPENROUTER_API_KEY |
Recommended |
Gemini (virality scoring) |
ELEVENLABS_API_KEY |
Optional |
Multi-clip voice consistency (S2S) |
Six Formats
| Format |
Duration |
Best for |
| Talking Head |
15-25s |
Product review, honest take |
| Hook Face + Demo |
15s max |
App/tool demos |
| Podcast Clip |
8-20s |
Authority, credibility |
| Wall of Text |
4-8s |
Hot take, faceless |
| Visual Transformation |
10-25s |
Before/after concept |
| Hybrid Transformation |
20-30s |
Complex mechanism explanation |
Key Findings (from testing)
- Sora's native voice > ElevenLabs TTS for talking head. TTS sounds fake.
- B-roll must be environment-matched. Extract a frame from A-roll → feed to Kling.
- Captions go LAST — after post-production. Grain degrades caption pills.
- AI cannot generate realistic app screens. Use real screenshots.
- ~1 in 3 Sora generations have hand artifacts. Reroll, don't fix the prompt.
- Multi-frame formats: chain from frame 1. Parallel generation causes face drift.
For full doctrine, format blueprints, anti-patterns, and taste calibration: _system/SKILL.md
1---2name: scrollclaw3description: Router 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.4---56# ScrollClaw78AI-generated UGC videos that look like a real person pulled out their phone and started talking. Brands pay $500–$5,000 per UGC video from human creators. This pipeline produces them for $5–$50 in API costs.910## The Pipeline1112```13Brand name + URL14 ↓15/brand-setup → One-time brand research + file generation (Step 0)16 ↓17Brand + Audience18 ↓19/persona → Persona research, creator profiles, approved script20/first-frame → Canonical face image (Nano Banana 2)21/animate → A-roll talking head clips (Sora 2 i2v)22/b-roll → Environment + product shots (Kling 3)23/assemble → Stitch + unified voice + post-production + captions24/score → Virality gate (70+ to publish)25 ↓26Scroll-stopping UGC video27```2829**Core doctrine:** Read `_system/SKILL.md` for format selection, anti-patterns, taste calibration, and pipeline routing rules.3031**Brand & campaign context:** Read `_system/references/brand-campaign-context.md` for workspace structure, context matrix, and persistence protocol.3233---3435## Routing3637When the user invokes ScrollClaw or asks about UGC video, route to the right sub-skill based on where they are in the pipeline:3839| User says / wants | Route to |40|-------------------|----------|41| "Set up a brand" / "Initialize brand" / "New brand" / "Brand research" | `/brand-setup` — one-time, before first campaign |42| "Make me a UGC video" / "Start a campaign" / "I need ugc" | `/persona` — start at the beginning |43| "Research this brand" / "Create a creator profile" / "Write a script" | `/persona` |44| "Generate the first frame" / "Make a face image" / "Nano Banana" | `/first-frame` |45| "Animate this" / "Make a talking head clip" / "Sora" / "A-roll" | `/animate` |46| "Generate B-roll" / "Product shot" / "Kling" | `/b-roll` |47| "Stitch the clips" / "Add captions" / "Post-production" / "Assemble" | `/assemble` |48| "Score this video" / "Is this ready to publish?" | `/score` |49| "Run the full pipeline" | Start at `/persona`, proceed sequentially |5051Broad outcome requests stay at the root. Start the pipeline instead of asking the user to pick a sub-skill.5253Stage-specific requests bypass the root and go straight to that sub-skill.5455If the user isn't sure where they are, ask: **"Where are you in the pipeline?"** and show them the 6 steps above.5657## Contract5859### Input60- Required: brand/product context plus a campaign goal, or an existing campaign workspace if resuming61- Optional: format preference, creator profile, screen recordings/screenshots, existing clips, campaign slug62- Format: raw text, URL, file paths, or `workspace/campaigns/<slug>/` files63- Source: user prompt, campaign brief, and upstream `workspace/brand/` files6465### Output66- Produces: either a route decision to the correct stage or a sequential full-pipeline run starting at `/persona`67- Format: inline orchestration plus saved workspace artifacts produced by sub-skills68- Default behavior: broad requests like "make me a UGC video" or "start a campaign" start at `/persona` and continue stage by stage until blocked by missing inputs, an approval gate, or a dependency failure69- Downstream use: `/persona`, `/first-frame`, `/animate`, `/b-roll`, `/assemble`, and `/score`7071### Validation72- Pre-conditions: workspace exists or can be initialized before generation steps begin73- Post-conditions: the user knows the current stage, the next stage, and which workspace artifacts were produced74- Failure checks: do not leave the user at a vague route; if blocked, name the exact missing file, asset, or approval needed7576---7778## Quick Start7980**First campaign:**811. Set up brand context (one-time per brand):82 - **Recommended:** Run `/brand-setup` with your brand name + URL — it researches and generates all three brand files automatically83 - **Alternative:** Copy templates from `assets/` and fill in manually (see `assets/` for templates)842. Initialize workspace:85 ```bash86 CAMPAIGN="my-campaign"87 mkdir -p workspace/campaigns/$CAMPAIGN/{creators,scripts,frames,clips,scores}88 cp assets/campaign-brief-template.md workspace/campaigns/$CAMPAIGN/brief.md89 touch workspace/campaigns/$CAMPAIGN/output-log.md90 touch workspace/campaigns/$CAMPAIGN/learnings.md91 ```923. Fill in `workspace/campaigns/$CAMPAIGN/brief.md`934. Run `/persona` → `/first-frame` → `/animate` → `/b-roll` → `/assemble` → `/score`9495**Check setup first:**96```bash97bash scripts/check-deps.sh98```99100---101102## What ScrollClaw Needs103104| Key | Required | Used by |105|-----|----------|---------|106| `FAL_KEY` | Yes | Sora 2 (A-roll) + Kling 3 (B-roll) |107| `REPLICATE_API_TOKEN` | Yes | Nano Banana (first frames) |108| `OPENROUTER_API_KEY` | Recommended | Gemini (virality scoring) |109| `ELEVENLABS_API_KEY` | Optional | Multi-clip voice consistency (S2S) |110111---112113## Six Formats114115| Format | Duration | Best for |116|--------|----------|---------|117| Talking Head | 15-25s | Product review, honest take |118| Hook Face + Demo | 15s max | App/tool demos |119| Podcast Clip | 8-20s | Authority, credibility |120| Wall of Text | 4-8s | Hot take, faceless |121| Visual Transformation | 10-25s | Before/after concept |122| Hybrid Transformation | 20-30s | Complex mechanism explanation |123124---125126## Key Findings (from testing)127128- Sora's native voice > ElevenLabs TTS for talking head. TTS sounds fake.129- B-roll must be environment-matched. Extract a frame from A-roll → feed to Kling.130- Captions go LAST — after post-production. Grain degrades caption pills.131- AI cannot generate realistic app screens. Use real screenshots.132- ~1 in 3 Sora generations have hand artifacts. Reroll, don't fix the prompt.133- Multi-frame formats: chain from frame 1. Parallel generation causes face drift.134135---136137For full doctrine, format blueprints, anti-patterns, and taste calibration: [`_system/SKILL.md`](_system/SKILL.md)