Scrollclaw first frame

Generate the canonical first frame with Nano Banana 2.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/first-frame, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit TheMattBerman/scrollclaw/first-frame#main ~/.claude/skills/first-frame

For one project only, change the path to .claude/skills/first-frame. This skill also uses -script.md, output-log.md — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Scrollclaw first frame

Show the full text128 lines
namedescriptionmetadata
scrollclaw-first-frameGenerate the canonical first frame with Nano Banana 2. Composition, character, environment, and color — all locked before animation. The visual design gate. openclaw: emoji: "🖼️ user-invocable: true triggers: - "first frame - "generate frame - "nano banana - "ugc frame - "canonical face

First Frame

The viewer's brain makes a stay-or-scroll decision in 3-5 seconds at the visual processing level — before conscious attention. By the time they've read the hook, the decision is already made.

Frame 1 is a visual design problem, not a copywriting problem. Read references/first-frame-psychology.md for emoji pattern interrupts, composition rules, and testing approach.

Prerequisites

  • Script approved (from /persona)
  • Creator profile exists in workspace/campaigns/<slug>/creators/ or workspace/creators/
  • Brand context loaded

Prompt Structure (Three Layers)

Read references/first-frame-prompting.md for the full system. This is what makes images look like phone photos instead of AI.

  1. Photorealism pre-prompt — "Raw iPhone 14 photo. Candid moment, unfiltered..." + realism rules + negative prompt (CGI, 3D render, perfect skin, cinematic color grading)
  2. Color reference JSON — extracted from a real reference photo, not described in text. See _system/references/color-reference-system.md.
  3. Scene description — creator identity + environment + expression + composition

Include "no text, no words, no letters, no writing" in negative prompt to prevent Sora from hallucinating text into the video.

Generation

python3 scripts/generate-first-frame.py \
  --prompt-file workspace/campaigns/<slug>/frame1-prompt.txt \
  --output-file workspace/campaigns/<slug>/frames/frame1.png \
  --creator workspace/campaigns/<slug>/creators/creator-<name>.md \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --aspect-ratio "9:16"

Multi-Frame Formats (Visual Reference Chaining)

For formats with multiple settings (podcast Dan, gym Dan, car Dan):

  1. Generate frame 1 FIRST (the canonical face)
  2. Review and approve frame 1
  3. ALL subsequent frames MUST use frame 1 as visual reference
  4. Do NOT generate frames in parallel from text descriptions alone — causes face drift
  5. For Visual Transformation (5-6 frames): generate sequentially, each referencing frame 1

Generate context-specific first frames — one per setting. But always chain from the canonical face. Don't feed a podcast frame into gym B-roll.

Iteration

Iterate on frame 1 more than anything else. Expect 2-4 attempts before it passes.

Quality checks:

  • Does it look like a phone photo or an AI render?
  • Is the creator believable (not model-pretty)?
  • Is there real-world clutter in the environment?
  • Does the color match the reference JSON?
  • Is skin texture visible (pores, not porcelain)?

Once frame 1 is locked, the rest chain from it.

Brand Memory Integration

Reads
File Purpose
workspace/campaigns/<slug>/creators/creator-<name>.md Creator identity — face, hair, build, wardrobe, energy
workspace/creators/creator-<name>.md Global creator profile (fallback if no campaign override exists)
workspace/campaigns/<slug>/scripts/<format>-script.md Which scene/setting the first frame needs to establish
workspace/campaigns/<slug>/brief.md Brand context, color cues, environment direction
Writes
File Notes
workspace/campaigns/<slug>/frames/frame1.png Canonical face — referenced by all subsequent frames and animation
workspace/campaigns/<slug>/frames/environment-frame.png Context-specific frames for multi-setting formats
workspace/campaigns/<slug>/output-log.md Prompt params, model version, generation time (append-only)
Context loading
🖼️ First Frame context loaded:
  ✓ Creator: Maya (workspace/campaigns/ridge-q1/creators/creator-maya.md)
  ✓ Script: talking-head (workspace/campaigns/ridge-q1/scripts/talking-head-script.md)
  ✓ Campaign: ridge-q1

Contract

Input
  • Required: approved script plus a creator profile
  • Optional: campaign brief, color reference inputs, global creator fallback profile
  • Format: workspace markdown files plus prompt text
  • Source: /persona, workspace/campaigns/<slug>/brief.md, and _system/references/color-reference-system.md
Output
  • Produces: one canonical face image and any context-specific environment frames needed for the format
  • Format: PNG files in workspace/campaigns/<slug>/frames/ plus prompt log entries in output-log.md
  • Default behavior: generate frame1.png first, stop for review, then chain any additional frames from it
  • Downstream use: /animate and /b-roll
Validation
  • Pre-conditions: script is approved, creator profile exists, and the target setting is clear enough to visualize
  • Post-conditions: frame looks like a phone photo, preserves creator identity, and is strong enough to chain into later generations
  • Failure checks: reroll or revise if the image looks like an AI render, the identity drifts, or the scene lacks believable real-world clutter

Output

  • Canonical first frame image (PNG) in workspace/campaigns/<slug>/frames/
  • Context-specific frames for multi-setting formats in workspace/campaigns/<slug>/frames/
  • Prompt params logged to workspace/campaigns/<slug>/output-log.md

Next Step

Frame 1 approved → run /animate for A-roll or /b-roll for environment shots.

1---
2name: scrollclaw-first-frame
3description: "Generate the canonical first frame with Nano Banana 2. Composition, character, environment, and color — all locked before animation. The visual design gate."
4metadata:
5 openclaw:
6 emoji: "🖼️"
7 user-invocable: true
8 triggers:
9 - "first frame"
10 - "generate frame"
11 - "nano banana"
12 - "ugc frame"
13 - "canonical face"
14---
15 
16# First Frame
17 
18The viewer's brain makes a stay-or-scroll decision in 3-5 seconds at the visual processing level — before conscious attention. By the time they've read the hook, the decision is already made.
19 
20Frame 1 is a visual design problem, not a copywriting problem. Read `references/first-frame-psychology.md` for emoji pattern interrupts, composition rules, and testing approach.
21 
22## Prerequisites
23 
24- Script approved (from `/persona`)
25- Creator profile exists in `workspace/campaigns/<slug>/creators/` or `workspace/creators/`
26- Brand context loaded
27 
28## Prompt Structure (Three Layers)
29 
30Read `references/first-frame-prompting.md` for the full system. This is what makes images look like phone photos instead of AI.
31 
321. **Photorealism pre-prompt** — "Raw iPhone 14 photo. Candid moment, unfiltered..." + realism rules + negative prompt (CGI, 3D render, perfect skin, cinematic color grading)
332. **Color reference JSON** — extracted from a real reference photo, not described in text. See `_system/references/color-reference-system.md`.
343. **Scene description** — creator identity + environment + expression + composition
35 
36Include "no text, no words, no letters, no writing" in negative prompt to prevent Sora from hallucinating text into the video.
37 
38## Generation
39 
40```bash
41python3 scripts/generate-first-frame.py \
42 --prompt-file workspace/campaigns/<slug>/frame1-prompt.txt \
43 --output-file workspace/campaigns/<slug>/frames/frame1.png \
44 --creator workspace/campaigns/<slug>/creators/creator-<name>.md \
45 --log-file workspace/campaigns/<slug>/output-log.md \
46 --aspect-ratio "9:16"
47```
48 
49## Multi-Frame Formats (Visual Reference Chaining)
50 
51For formats with multiple settings (podcast Dan, gym Dan, car Dan):
52 
531. Generate frame 1 FIRST (the canonical face)
542. Review and approve frame 1
553. ALL subsequent frames MUST use frame 1 as visual reference
564. Do NOT generate frames in parallel from text descriptions alone — causes face drift
575. For Visual Transformation (5-6 frames): generate sequentially, each referencing frame 1
58 
59Generate **context-specific first frames** — one per setting. But always chain from the canonical face. Don't feed a podcast frame into gym B-roll.
60 
61## Iteration
62 
63Iterate on frame 1 more than anything else. Expect 2-4 attempts before it passes.
64 
65**Quality checks:**
66- Does it look like a phone photo or an AI render?
67- Is the creator believable (not model-pretty)?
68- Is there real-world clutter in the environment?
69- Does the color match the reference JSON?
70- Is skin texture visible (pores, not porcelain)?
71 
72Once frame 1 is locked, the rest chain from it.
73 
74## Brand Memory Integration
75 
76### Reads
77| File | Purpose |
78|------|---------|
79| `workspace/campaigns/<slug>/creators/creator-<name>.md` | Creator identity — face, hair, build, wardrobe, energy |
80| `workspace/creators/creator-<name>.md` | Global creator profile (fallback if no campaign override exists) |
81| `workspace/campaigns/<slug>/scripts/<format>-script.md` | Which scene/setting the first frame needs to establish |
82| `workspace/campaigns/<slug>/brief.md` | Brand context, color cues, environment direction |
83 
84### Writes
85| File | Notes |
86|------|-------|
87| `workspace/campaigns/<slug>/frames/frame1.png` | Canonical face — referenced by all subsequent frames and animation |
88| `workspace/campaigns/<slug>/frames/environment-frame.png` | Context-specific frames for multi-setting formats |
89| `workspace/campaigns/<slug>/output-log.md` | Prompt params, model version, generation time (append-only) |
90 
91### Context loading
92 
93```
94🖼️ First Frame context loaded:
95 ✓ Creator: Maya (workspace/campaigns/ridge-q1/creators/creator-maya.md)
96 ✓ Script: talking-head (workspace/campaigns/ridge-q1/scripts/talking-head-script.md)
97 ✓ Campaign: ridge-q1
98```
99 
100## Contract
101 
102### Input
103- Required: approved script plus a creator profile
104- Optional: campaign brief, color reference inputs, global creator fallback profile
105- Format: workspace markdown files plus prompt text
106- Source: `/persona`, `workspace/campaigns/<slug>/brief.md`, and `_system/references/color-reference-system.md`
107 
108### Output
109- Produces: one canonical face image and any context-specific environment frames needed for the format
110- Format: PNG files in `workspace/campaigns/<slug>/frames/` plus prompt log entries in `output-log.md`
111- Default behavior: generate `frame1.png` first, stop for review, then chain any additional frames from it
112- Downstream use: `/animate` and `/b-roll`
113 
114### Validation
115- Pre-conditions: script is approved, creator profile exists, and the target setting is clear enough to visualize
116- Post-conditions: frame looks like a phone photo, preserves creator identity, and is strong enough to chain into later generations
117- Failure checks: reroll or revise if the image looks like an AI render, the identity drifts, or the scene lacks believable real-world clutter
118 
119## Output
120 
121- Canonical first frame image (PNG) in `workspace/campaigns/<slug>/frames/`
122- Context-specific frames for multi-setting formats in `workspace/campaigns/<slug>/frames/`
123- Prompt params logged to `workspace/campaigns/<slug>/output-log.md`
124 
125## Next Step
126 
127Frame 1 approved → run `/animate` for A-roll or `/b-roll` for environment shots.
128 

Discussion

Alternatives

Also in Illustration & artSee all 320 in Content creator →