@growthub/cli 0.3.34 → 0.3.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/assets/worker-kits/creative-strategist-v1/brands/_template/brand-kit.md +123 -0
- package/assets/worker-kits/creative-strategist-v1/brands/solawave/brand-kit.md +139 -0
- package/assets/worker-kits/creative-strategist-v1/bundles/creative-strategist-v1.json +47 -0
- package/assets/worker-kits/creative-strategist-v1/growthub-meta/README.md +14 -0
- package/assets/worker-kits/creative-strategist-v1/growthub-meta/kit-standard.md +47 -0
- package/assets/worker-kits/creative-strategist-v1/kit.json +82 -0
- package/assets/worker-kits/creative-strategist-v1/skills.md +341 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/INDEX.md +94 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/bedroom-minimic-talk.md +197 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/frame-analysis.md +209 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/process-specialist-medical.md +105 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/villain-animation.md +183 -0
- package/assets/worker-kits/creative-strategist-v1/templates/brief-template.js +470 -0
- package/assets/worker-kits/creative-strategist-v1/templates/hooks-library/500-winning-hooks.csv +539 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/INDEX.md +151 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/before-after-flatlay.md +143 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/minimic-problem.md +109 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/product-demo-glow.md +123 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/tiktok-skeptic-pivot.md +119 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/villain-agitation.md +156 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/bogo-meme-bookend.md +144 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/guarantee-close.md +143 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/dollar-amount.md +105 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/meme-overlay.md +104 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/pov-confession.md +92 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/tiktok-comment.md +116 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/villain-hook.md +134 -0
- package/assets/worker-kits/creative-strategist-v1/workers/creative-strategist/CLAUDE.md +440 -0
- package/dist/index.js +206 -0
- package/package.json +3 -2
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
# Claude Workers — Creative Strategist Skill
|
|
2
|
+
## Video Creative Brief Production | Multi-Brand System
|
|
3
|
+
|
|
4
|
+
> **Who this is for:** Any Claude agent in `/Users/antonio/claude-workers/` producing a Video Creative Brief.
|
|
5
|
+
> Read this file fully before starting. Every section is a required step.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## QUICK REFERENCE
|
|
10
|
+
|
|
11
|
+
| What you need | Where to find it |
|
|
12
|
+
|---|---|
|
|
13
|
+
| This workflow | `skills.md` ← you are here |
|
|
14
|
+
| **Ad format library** | `templates/ad-formats/INDEX.md` ← check FIRST on every brief |
|
|
15
|
+
| **Scene module library** | `templates/scene-modules/INDEX.md` |
|
|
16
|
+
| **Frame analysis (new muse)** | `templates/ad-formats/frame-analysis.md` — load only if no frozen format matches |
|
|
17
|
+
| Client brand kits | `brands/<client-slug>/brand-kit.md` |
|
|
18
|
+
| Blank brand kit template | `brands/_template/brand-kit.md` |
|
|
19
|
+
| Brief JS template | `templates/brief-template.js` |
|
|
20
|
+
| Output location | `~/Downloads/<ClientSlug>_VideoBrief_<Concept>_v<N>_<YYYYMMDD>.docx` |
|
|
21
|
+
| Work directory | `/tmp/docx_work/` — run `npm install docx` here once per session |
|
|
22
|
+
| Muse frames dir | `/tmp/muse_frames/` — check before running ffmpeg |
|
|
23
|
+
| **500 Hooks CSV** | `templates/hooks-library/500-winning-hooks.csv` ← grep for Scene 1 hooks (Step 2d) |
|
|
24
|
+
| Example (TheraPet → ODRx) | `~/Downloads/Clarifion_ODRx_VideoBrief_TheraPetAI_v1_20260408.docx` |
|
|
25
|
+
| Example (Solawave BOGO) | `~/Downloads/Solawave_VideoBrief_KoreanSkincaretruth_v1_20260409.docx` |
|
|
26
|
+
| Example (AllCore360° CGI) | `~/Downloads/AllCore360_VideoBrief_CGIGravityHook_v1_20260409.docx` |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## STEP 0 — UNDERSTAND THE TASK
|
|
31
|
+
|
|
32
|
+
Answer these four questions before writing anything:
|
|
33
|
+
|
|
34
|
+
1. **Who is the client?** → Find or create `brands/<slug>/brand-kit.md`
|
|
35
|
+
2. **What is the one video creative?** → Single ad concept, not multiple separate ads
|
|
36
|
+
3. **How many hook variations?** → Default 5 (A–E)
|
|
37
|
+
4. **What is strictly forbidden?** → Check `messaging_guardrails` in the brand kit
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## STEP 1a — CREATE BRAND KIT (new client only)
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cp brands/_template/brand-kit.md brands/<client-slug>/brand-kit.md
|
|
45
|
+
mkdir -p brands/<client-slug>/assets
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Required fields: `client_name`, `slug`, `primary_service`, `landing_page`, `target_audience`,
|
|
49
|
+
`tone`, `colors` (hex), `messaging_guardrails`, `do_not_attract`.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## STEP 1b — READ THE BRAND KIT
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cat /Users/antonio/claude-workers/brands/<client-slug>/brand-kit.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Load every field. The brief JS must pull colors, tone, and guardrails from this file — not memory.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## STEP 2 — CONFIRM BRIEF INPUTS
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Length: [XX seconds]
|
|
67
|
+
Format: [UGC / Doctor-Led / Explainer / Performance / etc.]
|
|
68
|
+
Primary Goal: [Conversion / Awareness / Education / Trust-Building]
|
|
69
|
+
Voiceover: [who speaks + role]
|
|
70
|
+
Tone: [3–5 adjectives from brand kit]
|
|
71
|
+
AI Avatar Required: [Yes/No] → Type: [Photoreal / Talking Head / UGC]
|
|
72
|
+
Voiceover Setup: [VO only / UGC dialogue / founder VO / AI VO]
|
|
73
|
+
Voice Type: [Gender | Age | Tone | Accent]
|
|
74
|
+
UGC Asset Requirements: [Yes/No] → folder link or creator reference
|
|
75
|
+
Brand Image Availability:[Air.inc / Drive / Instagram / Website]
|
|
76
|
+
Video References: [inspiration links or "None provided"]
|
|
77
|
+
Hook Variations: [default 5 — A through E]
|
|
78
|
+
Scene Count: [default 4 — Hook / Problem / Transformation / CTA]
|
|
79
|
+
B-Roll Cadence: [e.g. "cut every ~3 seconds"]
|
|
80
|
+
CTA Offer: [specific offer text]
|
|
81
|
+
Phone + Website: [from brand kit]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## STEP 2c — CHECK TEMPLATE LIBRARY (BEFORE any frame extraction)
|
|
87
|
+
|
|
88
|
+
> **Do this first — every time.** A frozen format skips frame extraction entirely.
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Read /Users/antonio/claude-workers/templates/ad-formats/INDEX.md
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Match found?**
|
|
95
|
+
- Yes → `Read templates/ad-formats/<matched-id>.md`
|
|
96
|
+
Load the format's scene structure + scene modules. Replace `[PLACEHOLDERS]` from brand-kit.md.
|
|
97
|
+
Do NOT re-extract frames. The format file is the frozen scene map.
|
|
98
|
+
- No → proceed to Step 2b.
|
|
99
|
+
|
|
100
|
+
**Then load scene modules:**
|
|
101
|
+
```
|
|
102
|
+
Read /Users/antonio/claude-workers/templates/scene-modules/INDEX.md
|
|
103
|
+
```
|
|
104
|
+
Pull each module listed under "Scene Modules Used" in the format file.
|
|
105
|
+
|
|
106
|
+
**After completing a new muse brief → freeze the format:**
|
|
107
|
+
```
|
|
108
|
+
Create templates/ad-formats/<new-id>.md (copy any existing format file as schema)
|
|
109
|
+
Add row to templates/ad-formats/INDEX.md
|
|
110
|
+
Add reusable scenes to templates/scene-modules/
|
|
111
|
+
Add rows to templates/scene-modules/INDEX.md
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## STEP 2d — HOOK SELECTION FROM FROZEN CSV
|
|
117
|
+
|
|
118
|
+
> Run this every brief — before writing any Scene 1 hook variation.
|
|
119
|
+
> CSV: `templates/hooks-library/500-winning-hooks.csv`
|
|
120
|
+
> Columns: `Example` (real hook) | `Structure` (template with `[PLACEHOLDERS]`)
|
|
121
|
+
> **Always adapt the Structure column** — not the Example. Structure has the swap-ready pattern.
|
|
122
|
+
|
|
123
|
+
**3-pass grep method (fast):**
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
CSV=/Users/antonio/claude-workers/templates/hooks-library/500-winning-hooks.csv
|
|
127
|
+
|
|
128
|
+
# Pass 1 — client niche / pain-point keywords
|
|
129
|
+
grep -i "KEYWORD1\|KEYWORD2" "$CSV" | head -10
|
|
130
|
+
|
|
131
|
+
# Pass 2 — hook type (pick the types relevant to the brief)
|
|
132
|
+
grep -i "save this\|stop using\|nobody.*talking\|doesn't want\|going missing\|ugly truth\|hard pill\|mistake\|secret" "$CSV" | head -15
|
|
133
|
+
|
|
134
|
+
# Pass 3 — structured output: show Example + Structure side-by-side for top matches
|
|
135
|
+
python3 - "$CSV" "KEYWORD" << 'PY'
|
|
136
|
+
import csv, sys
|
|
137
|
+
path, kw = sys.argv[1], sys.argv[2].lower()
|
|
138
|
+
with open(path) as f:
|
|
139
|
+
for i, row in enumerate(csv.reader(f)):
|
|
140
|
+
if len(row) >= 2 and (kw in row[0].lower() or kw in row[1].lower()):
|
|
141
|
+
print(f"[{i}] EXAMPLE: {row[0][:90]}")
|
|
142
|
+
print(f" STRUCTURE: {row[1][:100]}\n")
|
|
143
|
+
PY
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Selection rules:**
|
|
147
|
+
1. Pick the 5 most relevant matches — one per hook variation (A–E)
|
|
148
|
+
2. Swap `[PLACEHOLDERS]` from `brand-kit.md` → `primary_service`, `tone`, `approved_phrases`
|
|
149
|
+
3. Log the CSV row index next to each hook in the brief (for reproducibility)
|
|
150
|
+
4. If <3 strong matches found → broaden Pass 1 keywords, then fall back to Pass 2 types
|
|
151
|
+
|
|
152
|
+
**Hook type → brief slot mapping:**
|
|
153
|
+
|
|
154
|
+
| Hook Type | Best Slot | Trigger Keyword to grep |
|
|
155
|
+
|-----------|-----------|------------------------|
|
|
156
|
+
| Industry suppression | Hook A (disruption) | `doesn't want\|going missing` |
|
|
157
|
+
| Nobody's talking | Hook B (blind spot) | `nobody.*talking\|no one.*talking` |
|
|
158
|
+
| Save this video | Hook C (urgency) | `save this` |
|
|
159
|
+
| Stop using X | Hook D (contrast) | `stop using\|stop doing` |
|
|
160
|
+
| Ugly truth / hard pill | Hook E (controversy) | `ugly truth\|hard pill` |
|
|
161
|
+
| Results in time frame | Any | `in \d+ days\|in \d+ minutes` |
|
|
162
|
+
| Mistake warning | Any | `mistake\|wrong` |
|
|
163
|
+
| Story / gather round | Narrative opener | `story\|gather` |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## STEP 2b — MUSE VIDEO ANALYSIS (only when no frozen format exists)
|
|
168
|
+
|
|
169
|
+
> Full methodology → `templates/ad-formats/frame-analysis.md`
|
|
170
|
+
> The commands below are the minimum to run. Read frame-analysis.md for the complete
|
|
171
|
+
> scene map format, adaptation hierarchy, ↑ mirrors notation, and freeze checklist.
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# 1. Check if frames already exist
|
|
175
|
+
ls /tmp/muse_frames/ 2>/dev/null | head -5
|
|
176
|
+
|
|
177
|
+
# 2. Get video runtime
|
|
178
|
+
ffprobe -v quiet -print_format json -show_format -show_streams "/path/to/video.mp4" \
|
|
179
|
+
| python3 -c "import sys,json; d=json.load(sys.stdin); \
|
|
180
|
+
[print(s.get('duration','?'),'sec |',s.get('width','?'),'x',s.get('height','?')) \
|
|
181
|
+
for s in d['streams'] if s.get('codec_type')=='video']"
|
|
182
|
+
|
|
183
|
+
# 3. Extract frames (3s intervals for 60–120s video; 2s for <30s TikTok format)
|
|
184
|
+
mkdir -p /tmp/muse_frames
|
|
185
|
+
ffmpeg -i "/path/to/video.mp4" -vf fps=1/3 /tmp/muse_frames/frame_%ds.jpg 2>&1 | tail -3
|
|
186
|
+
ls /tmp/muse_frames/ | sort
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Read every frame** using the Read tool — batch 3 per call. Before writing the brief, answer:
|
|
190
|
+
- How many distinct scenes?
|
|
191
|
+
- Where is the tone flip (problem → solution)?
|
|
192
|
+
- What is the character/visual format?
|
|
193
|
+
- What is the text rhythm (karaoke? sentences?)?
|
|
194
|
+
|
|
195
|
+
**Non-negotiable rule:** If the muse has 9 scenes, the brief has 9 scenes. Always.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## STEP 3 — DOCUMENT STRUCTURE
|
|
200
|
+
|
|
201
|
+
Every brief follows this exact section order. No additions, no skips.
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
TITLE BLOCK — client name, campaign, date, "1 Video | N Hook Variations"
|
|
205
|
+
BRAND CONSTRAINT BOX — warning callout: what this ad must NEVER say or do
|
|
206
|
+
BRIEF OVERVIEW TABLE — all Step 2 fields as key-value table
|
|
207
|
+
0. MUSE MAPPING TABLE — (muse-based briefs only) scene-by-scene comparison
|
|
208
|
+
1. CORE AD CONCEPT — 2–3 paragraph narrative + emotional arc + concept KV table
|
|
209
|
+
2. STRUCTURE & VO — Scene 1 hook window + N hook cards + Scenes 2–N scene blocks
|
|
210
|
+
3. EDITING GUIDELINES— pacing, color grade, music, captions, NO-list, aspect ratios
|
|
211
|
+
--- PAGE BREAK ---
|
|
212
|
+
APPENDIX — AI video generation prompts (Veo 3 / Runway) — labeled OPTIONAL
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## STEP 4 — GENERATE THE DOCX
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# Copy and fill the template
|
|
221
|
+
cp /Users/antonio/claude-workers/templates/brief-template.js /tmp/docx_work/<slug>_brief_v1.js
|
|
222
|
+
# Edit: fill CONFIG (colors from brand kit) + BRIEF (all content)
|
|
223
|
+
|
|
224
|
+
# Run
|
|
225
|
+
cd /tmp/docx_work && npm install docx # once per session
|
|
226
|
+
node <slug>_brief_v1.js
|
|
227
|
+
# Output: /Users/antonio/Downloads/<slug>_VideoBrief_<concept>_v1_<YYYYMMDD>.docx
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**JS non-negotiables:**
|
|
231
|
+
- Page: US Letter — `width:12240, height:15840` — margins `1440` all sides — content width = 9360 DXA
|
|
232
|
+
- Font: Arial. Arial Unicode MS for cells with `—`, `|`, `≤`
|
|
233
|
+
- Table widths: always `WidthType.DXA` — never `WidthType.PERCENTAGE`
|
|
234
|
+
- Cell widths must sum to table width (9360)
|
|
235
|
+
- Shading: always `ShadingType.CLEAR`
|
|
236
|
+
- Bullets: indent + TextRun bullet character — never `LevelFormat.BULLET`
|
|
237
|
+
- Never `\n` inside a TextRun — use separate `Paragraph` elements
|
|
238
|
+
- Hyperlinks: always `ExternalHyperlink` — never plain text for clickable URLs
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## STEP 5 — OPEN IN GOOGLE DOCS
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
open -R "/Users/antonio/Downloads/<filename>.docx"
|
|
246
|
+
osascript -e 'tell application "Google Chrome" to open location "https://drive.google.com/drive/my-drive"'
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Tell the user: "File revealed in Finder. Drag into the Google Drive browser window, then right-click → Open with → Google Docs."
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## STEP 6 — LOG TO BRAND KIT
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
echo "- $(date +%Y-%m-%d) | Video Creative Brief v1 | ~/Downloads/<filename>.docx" \
|
|
257
|
+
>> /Users/antonio/claude-workers/brands/<client-slug>/brand-kit.md
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## DESIGN SYSTEM (JS components)
|
|
263
|
+
|
|
264
|
+
Change only the 6 color constants at the top of the JS file — pull from `brand-kit.md → colors`.
|
|
265
|
+
|
|
266
|
+
| Function | Description |
|
|
267
|
+
|---|---|
|
|
268
|
+
| `h2(text)` | Full-width colored bar — section heading (`HeadingLevel.HEADING_2` inside cell) |
|
|
269
|
+
| `h3(text)` | Left accent stripe — sub-heading (`HeadingLevel.HEADING_3`) |
|
|
270
|
+
| `hyperlink(txt,url)` | External hyperlink — for muse URLs, LP URLs, references |
|
|
271
|
+
| `kvTable(rows)` | Key-value info table (2 col, alternating shading) |
|
|
272
|
+
| `sceneBlock(...)` | Scene card: colored header + label/content rows |
|
|
273
|
+
| `hookCard(...)` | Hook variation card: accent left stripe + content block |
|
|
274
|
+
| `alertBox(text)` | Warning/constraint callout box |
|
|
275
|
+
| `bullet(text)` | Brand-colored bullet point |
|
|
276
|
+
| `sp(pts)` | Vertical spacer paragraph |
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## GUARDRAILS — EVERY BRIEF
|
|
281
|
+
|
|
282
|
+
1. One creative per brief — not multiple separate ads
|
|
283
|
+
2. N hook variations in Scene 1 only — Scenes 2–N identical across all
|
|
284
|
+
3. AI/Veo prompts in Appendix only — never inline in scene blocks
|
|
285
|
+
4. Appendix labeled OPTIONAL
|
|
286
|
+
5. No pharmaceutical/clinical language unless client is explicitly pharma
|
|
287
|
+
6. Brand constraint alert box always present — immediately after title block
|
|
288
|
+
7. Aspect ratios: 9:16 + 1:1 minimum. Add 16:9 if YouTube in scope.
|
|
289
|
+
8. Captions ON by default
|
|
290
|
+
9. Date the document — version + date in filename and title block
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## COMMON MISTAKES
|
|
295
|
+
|
|
296
|
+
| Mistake | Correct Approach |
|
|
297
|
+
|---|---|
|
|
298
|
+
| Writing 5 separate creatives | 1 creative + 5 hook variations in Scene 1 |
|
|
299
|
+
| Veo prompts inline in scenes | All AI prompts → Appendix, labeled OPTIONAL |
|
|
300
|
+
| `WidthType.PERCENTAGE` in tables | Always `WidthType.DXA` |
|
|
301
|
+
| `\n` inside TextRun | Separate Paragraph elements |
|
|
302
|
+
| Skipping brand constraint box | Always include — it's the most important element |
|
|
303
|
+
| Generic tone language | Pull exact adjectives from brand-kit.md |
|
|
304
|
+
| Missing actor age/type spec | Always specify: age range + look + warmth |
|
|
305
|
+
| Vague CTA | Always include: website + specific offer text |
|
|
306
|
+
| Ignoring muse scene count | Muse has 9 scenes → brief has 9 scenes. Always. |
|
|
307
|
+
| Skipping the template library | Check `templates/ad-formats/INDEX.md` FIRST — every session |
|
|
308
|
+
| Writing scene modules from memory | Pull from `templates/scene-modules/` — JS stubs + AI prompts pre-built |
|
|
309
|
+
| Not freezing after a new muse brief | After every new muse → freeze in `templates/ad-formats/` |
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## FOLDER STRUCTURE
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
/Users/antonio/claude-workers/
|
|
317
|
+
├── skills.md ← this file — read first, every session
|
|
318
|
+
├── README.md ← kit overview + template library summary
|
|
319
|
+
├── templates/
|
|
320
|
+
│ ├── brief-template.js ← base JS (copy per client)
|
|
321
|
+
│ ├── hooks-library/
|
|
322
|
+
│ │ └── 500-winning-hooks.csv ← frozen hook database — grep in Step 2d (538 rows)
|
|
323
|
+
│ ├── ad-formats/
|
|
324
|
+
│ │ ├── INDEX.md ← frozen format lookup — check before Step 2b
|
|
325
|
+
│ │ ├── bedroom-minimic-talk.md ← @frankyshaw 23s format (Solawave)
|
|
326
|
+
│ │ ├── villain-animation.md ← TheraPet 98s format (Clarifion ODRx)
|
|
327
|
+
│ │ └── frame-analysis.md ← full frame extraction methodology (new muses only)
|
|
328
|
+
│ └── scene-modules/
|
|
329
|
+
│ ├── INDEX.md ← module lookup + assembly recipes
|
|
330
|
+
│ ├── hooks/ ← meme-overlay, tiktok-comment, pov-confession,
|
|
331
|
+
│ │ dollar-amount, villain-hook
|
|
332
|
+
│ ├── body/ ← minimic-problem, tiktok-skeptic-pivot,
|
|
333
|
+
│ │ product-demo-glow, villain-agitation, before-after-flatlay
|
|
334
|
+
│ └── cta/ ← bogo-meme-bookend, guarantee-close
|
|
335
|
+
└── brands/
|
|
336
|
+
├── _template/brand-kit.md
|
|
337
|
+
├── solawave/brand-kit.md
|
|
338
|
+
├── clarifion/brand-kit.md
|
|
339
|
+
├── greentree-medical-center/brand-kit.md
|
|
340
|
+
└── annie-appleseed-project/brand-kit.md
|
|
341
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Ad Format Template Library — INDEX
|
|
2
|
+
> Read this file first. It tells you every frozen format and scene module available.
|
|
3
|
+
> Pull the format file for full scene structure, JS stubs, and adaptation rules.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## HOW TO USE THIS LIBRARY
|
|
8
|
+
|
|
9
|
+
**In a brief session:**
|
|
10
|
+
1. User provides a muse or concept → check this index for matching format
|
|
11
|
+
2. If a match exists → load that format file → it replaces Steps 2b–2b5 in `skills.md`
|
|
12
|
+
3. If no match → extract frames as normal (Step 2b) → freeze new format after the brief
|
|
13
|
+
|
|
14
|
+
**Interoperability rule:** Every format file + every scene module shares the same placeholder schema:
|
|
15
|
+
`[BRAND_NAME]` `[PRODUCT_NAME]` `[PRICE]` `[OFFER]` `[LANDING_PAGE]` `[AI_ACTOR_AGE]`
|
|
16
|
+
Swap these from the brand-kit.md and the module is production-ready.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## FORMAT LIBRARY
|
|
21
|
+
|
|
22
|
+
| ID | Format Name | Length | Scenes | Category | Muse | Status |
|
|
23
|
+
|----|-------------|--------|--------|----------|------|--------|
|
|
24
|
+
| `bedroom-minimic-talk` | Bedroom Mini-Mic Talk | 23s | 6 | Skincare / Beauty Tech / Any | @frankyshaw Korean skincare Reel | ✅ PROVEN |
|
|
25
|
+
| `villain-animation` | Villain Object Animation | 98s | 9 | Pet / Home / Supplement | TheraPet AI Animation | ✅ PROVEN |
|
|
26
|
+
| `process-specialist-medical` | The Process Specialist | ~50s | 5 | Medical / Regenerative Medicine / Healthcare Authority | Greentree Medical Center original | ✅ PROVEN |
|
|
27
|
+
|
|
28
|
+
**No match? → Use frame extraction methodology:** `templates/ad-formats/frame-analysis.md`
|
|
29
|
+
After completing the brief, freeze the new format using that file's Phase 6 instructions.
|
|
30
|
+
|
|
31
|
+
**Format files:** `templates/ad-formats/<ID>.md`
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## SCENE MODULE LIBRARY
|
|
36
|
+
|
|
37
|
+
Modules are plug-in components. Mix across formats. Each module has a JS stub ready to paste.
|
|
38
|
+
|
|
39
|
+
### HOOKS (Scene 1 — swap per variation)
|
|
40
|
+
|
|
41
|
+
| ID | Hook Name | Best Format | Trigger |
|
|
42
|
+
|----|-----------|-------------|---------|
|
|
43
|
+
| `meme-overlay` | Meme Overlay Hook | `bedroom-minimic-talk` | Relatable lifestyle meme (tired, broke, stressed) |
|
|
44
|
+
| `tiktok-comment` | TikTok Comment "Is this legit?" | `bedroom-minimic-talk` | Skepticism-first, high-objection categories |
|
|
45
|
+
| `pov-confession` | POV Mirror Confession | `bedroom-minimic-talk` | Mirror + candid skin moment |
|
|
46
|
+
| `dollar-amount` | Dollar Amount Confession | `bedroom-minimic-talk` + `villain-animation` | "Spent $X. Didn't work." |
|
|
47
|
+
| `villain-hook` | Villain Character Hook | `villain-animation` | Product objects as animated villain characters |
|
|
48
|
+
|
|
49
|
+
**Module files:** `templates/scene-modules/hooks/<ID>.md`
|
|
50
|
+
|
|
51
|
+
### BODY SCENES (Scenes 2–N)
|
|
52
|
+
|
|
53
|
+
| ID | Module Name | Best Format | Beat |
|
|
54
|
+
|----|-------------|-------------|------|
|
|
55
|
+
| `minimic-problem` | Mini-Mic Problem Confession | `bedroom-minimic-talk` | Authority + failed solutions |
|
|
56
|
+
| `tiktok-skeptic-pivot` | TikTok Skeptic Pivot | `bedroom-minimic-talk` | "Is this legit?" disarm + product intro |
|
|
57
|
+
| `product-demo-glow` | Product Demo (Light/Glow) | `bedroom-minimic-talk` | Device with visible effect (red light, UV, glow) |
|
|
58
|
+
| `villain-agitation` | Villain Agitation Stack | `villain-animation` | 1–4× stacked agitation scenes with villain objects |
|
|
59
|
+
| `before-after-flatlay` | Before/After + Flat Lay | `bedroom-minimic-talk` | Split screen + product flat lay + "this is the real deal." |
|
|
60
|
+
|
|
61
|
+
**Module files:** `templates/scene-modules/body/<ID>.md`
|
|
62
|
+
|
|
63
|
+
### CTAs (Final Scene)
|
|
64
|
+
|
|
65
|
+
| ID | CTA Name | Best Format | Offer Type |
|
|
66
|
+
|----|----------|-------------|------------|
|
|
67
|
+
| `bogo-meme-bookend` | BOGO + Meme Bookend Close | `bedroom-minimic-talk` | Buy 1 Get 1 / % Off / Flash Offer |
|
|
68
|
+
| `guarantee-close` | Guarantee Calendar Close | `villain-animation` | 30/60-day satisfaction guarantee |
|
|
69
|
+
|
|
70
|
+
**Module files:** `templates/scene-modules/cta/<ID>.md`
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## QUICK BRIEF ASSEMBLY GUIDE
|
|
75
|
+
|
|
76
|
+
| Brief Type | Start With | Hook Module | Body Modules | CTA Module |
|
|
77
|
+
|------------|------------|-------------|--------------|------------|
|
|
78
|
+
| Skincare UGC (23s) | `bedroom-minimic-talk` | `meme-overlay` OR `tiktok-comment` | `minimic-problem` + `tiktok-skeptic-pivot` + `product-demo-glow` + `before-after-flatlay` | `bogo-meme-bookend` |
|
|
79
|
+
| Pet/Home Device (90s+) | `villain-animation` | `villain-hook` | `villain-agitation` × 3–4 + product reveal | `guarantee-close` |
|
|
80
|
+
| Any brand, new muse | Extract frames → build new format → freeze here | — | — | — |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## FREEZING A NEW FORMAT
|
|
85
|
+
|
|
86
|
+
After completing a muse-based brief, freeze the format:
|
|
87
|
+
1. Create `templates/ad-formats/<new-id>.md` using the schema in any existing format file
|
|
88
|
+
2. Add a row to this INDEX table
|
|
89
|
+
3. Extract the reusable scene modules → add to `scene-modules/` if not already there
|
|
90
|
+
4. Update `skills.md` QUICK REFERENCE table to include the new format
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
*Template Library — Creative Strategy Worker Kit — April 2026*
|
package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/bedroom-minimic-talk.md
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Ad Format: Bedroom Mini-Mic Talk
|
|
2
|
+
> ID: `bedroom-minimic-talk`
|
|
3
|
+
> Category: Skincare / Beauty Tech / Consumer Product (any)
|
|
4
|
+
> Length: 20–30 seconds (proven at 23s)
|
|
5
|
+
> Scene Count: 6
|
|
6
|
+
> Hook Variations: 5 (A–E)
|
|
7
|
+
> Status: ✅ PROVEN — Solawave BOGO brief, April 2026
|
|
8
|
+
> Aspect Ratios: 9:16 primary, 1:1 secondary
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## MUSE REFERENCE
|
|
13
|
+
|
|
14
|
+
- **Creator:** @frankyshaw (Instagram / TikTok)
|
|
15
|
+
- **URL:** https://www.instagram.com/reels/DU1lWOeDsdg/
|
|
16
|
+
- **Original product featured:** Dr. Melaxin Cemenrete (Korean skincare)
|
|
17
|
+
- **Local muse file:** `~/Downloads/Korean skincare truth…mp4`
|
|
18
|
+
- **Runtime:** 23 seconds | 720×1280 | 9:16 vertical
|
|
19
|
+
- **Why it works:** High-spend, high-persuasion skincare category. Meme-bookend (opens tired/closes approving) creates an emotional payoff that feels earned. Mini-mic prop signals authenticity without production cost. TikTok comment overlay intercepts the #1 objection before it forms. Self-aware humor prevents it from feeling like an ad.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## FORMAT SIGNALS (non-negotiable)
|
|
24
|
+
|
|
25
|
+
These elements define the format. Remove any one and the format stops working.
|
|
26
|
+
|
|
27
|
+
1. **Mini-mic prop** — silver condenser-style microphone held at chin/chest level in every close-up. This is the TikTok "I'm about to tell you the truth" signal.
|
|
28
|
+
2. **Meme bookend** — viral meme overlay opens the ad (relatable problem) and closes it (approving/satisfied). Same meme character, emotional state flips from tired → happy. DW from Arthur was the original; any relatable viral character works.
|
|
29
|
+
3. **Bedroom / cozy desk setting** — warm ambient light, slightly messy background. Specifically NOT a studio. Authenticity depends on this.
|
|
30
|
+
4. **Karaoke-style captions** — white text, black outline, key words bolded. Bottom third. Essential — 70%+ views are silent.
|
|
31
|
+
5. **Product shown 3× minimum** — held casually (Scene 2), in use/active state (Scene 4), flat lay with arrows (Scene 5). Never just once.
|
|
32
|
+
6. **"this is the real deal."** — this exact phrase with arrows pointing at the product in the flat lay scene (Scene 5). Proven persuasion trigger. Do not paraphrase.
|
|
33
|
+
7. **TikTok comment overlay** — "Is this legit?" comment bubble overlaid in Scene 3. Addresses skepticism from inside the format, not as a defensive rebuttal.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## PROVEN SCENE STRUCTURE
|
|
38
|
+
|
|
39
|
+
| # | Scene Name | Timecode | Beat | Sacred Element |
|
|
40
|
+
|---|------------|----------|------|----------------|
|
|
41
|
+
| 1 | Opening Hook | 0–3s | Pattern interrupt — scroll stop | Meme overlay + problem statement. 5 variations (A–E). |
|
|
42
|
+
| 2 | Authority & Problem | 3–8s | Shared experience builds credibility | Mini-mic, product held casually, "$X spent, nothing worked" |
|
|
43
|
+
| 3 | Skeptic Pivot | 8–13s | Disarm objection before it forms | TikTok comment "Is this legit?" overlay + product reveal |
|
|
44
|
+
| 4 | Product Demo | 13–18s | Product in action — visual proof | Active visual effect (red light, glow, motion). Product in use. |
|
|
45
|
+
| 5 | Before/After + Authority | 18–21s | Receipt / social proof | Split screen + flat lay + arrows + "this is the real deal." |
|
|
46
|
+
| 6 | CTA Close | 21–23s | Convert | Meme bookend (approving) + offer overlay + "link in bio" |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## SCENE MODULES USED IN THIS FORMAT
|
|
51
|
+
|
|
52
|
+
Plug these directly from `scene-modules/`:
|
|
53
|
+
|
|
54
|
+
| Scene | Module ID | File |
|
|
55
|
+
|-------|-----------|------|
|
|
56
|
+
| 1 | `meme-overlay` OR `tiktok-comment` OR `pov-confession` OR `dollar-amount` | `hooks/<id>.md` |
|
|
57
|
+
| 2 | `minimic-problem` | `body/minimic-problem.md` |
|
|
58
|
+
| 3 | `tiktok-skeptic-pivot` | `body/tiktok-skeptic-pivot.md` |
|
|
59
|
+
| 4 | `product-demo-glow` | `body/product-demo-glow.md` |
|
|
60
|
+
| 5 | `before-after-flatlay` | `body/before-after-flatlay.md` |
|
|
61
|
+
| 6 | `bogo-meme-bookend` | `cta/bogo-meme-bookend.md` |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## ADAPTATION RULES
|
|
66
|
+
|
|
67
|
+
### Keep (sacred)
|
|
68
|
+
- Scene count: exactly 6
|
|
69
|
+
- Mini-mic prop in Scenes 1, 2, 3, 6
|
|
70
|
+
- Meme overlay in Scene 1 (hook) AND Scene 6 (approving bookend) — same meme, emotional flip
|
|
71
|
+
- TikTok comment overlay in Scene 3
|
|
72
|
+
- "this is the real deal." + arrows in Scene 5
|
|
73
|
+
- Self-aware humor beat — one moment in Scene 3–4 (breaks 4th wall)
|
|
74
|
+
- Bedroom/cozy setting throughout — never studio
|
|
75
|
+
|
|
76
|
+
### Swap (per brand)
|
|
77
|
+
- The specific meme character (DW from Arthur → any relatable viral character)
|
|
78
|
+
- The product shown — must have a visually active state (glow, motion, transformation)
|
|
79
|
+
- The dollar amount in Scene 2 ("$300 on serums" → "$X on [category product]")
|
|
80
|
+
- The TikTok comment text — keep structure, swap the product reference
|
|
81
|
+
- The offer text in Scene 6 ("BOGO" → "50% off" → "Free trial" → etc.)
|
|
82
|
+
|
|
83
|
+
### Never
|
|
84
|
+
- Studio lighting or production set — ruins the UGC authenticity
|
|
85
|
+
- Full-frame video meme cuts — meme must be overlay on creator's frame (eyes always visible above)
|
|
86
|
+
- Voiceover-only — the actor must be on screen speaking (this format is UGC dialogue, not VO)
|
|
87
|
+
- More than 3 seconds of uninterrupted talking head — always break with a visual
|
|
88
|
+
- Product shown without active state — for beauty tech, the glow/effect IS the product
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## AI ACTOR SPEC (default — adapt per brand)
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
age_range: "22–32"
|
|
96
|
+
gender: "Female-presenting"
|
|
97
|
+
look: "Natural, warm skin tone. Light or no visible makeup. Hair loosely pulled back or down."
|
|
98
|
+
outfit: "Oversized hoodie or neutral crew-neck top. Bedroom-casual — NOT styled."
|
|
99
|
+
setting: "Cozy desk or bedroom. Warm ambient light (lamp or diffused window). Slight background clutter (books, skincare items, etc.) — NOT minimalist."
|
|
100
|
+
prop: "Silver condenser-style mini microphone. Essential. Always in hand for Scenes 1–3 and 6."
|
|
101
|
+
energy: "Conspiratorial best-friend energy. 'I looked this up so you don't have to.' NOT spokesperson."
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## DOCX JS STUBS
|
|
107
|
+
|
|
108
|
+
Paste these sceneBlock() calls into the brief JS file. Replace `[PLACEHOLDERS]`.
|
|
109
|
+
|
|
110
|
+
```js
|
|
111
|
+
// SCENE 1 — Hook Window (use for the shared scene setup above the 5 hook cards)
|
|
112
|
+
sceneBlock("SCENE 1 — HOOK WINDOW", "0–3 seconds | MUST stop the scroll", [
|
|
113
|
+
["Visual Direction", "AI actor at desk/bedroom. Meme overlay fills lower 60% of frame. Actor's eyes visible above meme. Mini-mic in hand at chin level. Warm ambient lighting."],
|
|
114
|
+
["On-Screen Text", "[Hook line from variation — white bold caption, bottom third]"],
|
|
115
|
+
["AI Actor VO", "[Hook line from active variation — natural delivery, not scripted]"],
|
|
116
|
+
["Purpose", "Stop the scroll. Pattern-interrupt with meme format. Identify pain point before viewer can tap away."],
|
|
117
|
+
])
|
|
118
|
+
|
|
119
|
+
// SCENE 2 — Authority & Problem
|
|
120
|
+
sceneBlock("SCENE 2 — AUTHORITY & PROBLEM", "3–8 seconds | Consistent across all variations", [
|
|
121
|
+
["Visual Direction", "AI actor close-up. Mini-mic in one hand, [PRODUCT_NAME] held casually in the other. Skincare shelf visible, slightly out-of-focus background."],
|
|
122
|
+
["Actor Line", "'I've tried [CATEGORY_PRODUCTS]. [DOLLAR_SPENT] later. Nothing gave me what I actually needed for [PAIN_POINT].'"],
|
|
123
|
+
["On-Screen Text", "'[products listed].' — caption. Key words bold."],
|
|
124
|
+
["Purpose", "Build credibility through shared experience. She's not naive — she's tried everything. Positions [PRODUCT_NAME] reveal as earned discovery."],
|
|
125
|
+
["Transition", "Direct cut to close-up of [PRODUCT_NAME] being lifted into frame."],
|
|
126
|
+
])
|
|
127
|
+
|
|
128
|
+
// SCENE 3 — Skeptic Pivot + Product Intro
|
|
129
|
+
sceneBlock("SCENE 3 — SKEPTIC PIVOT + PRODUCT INTRO", "8–13 seconds | Consistent across all variations", [
|
|
130
|
+
["Visual Direction", "TikTok comment bubble overlaid: 'Is this legit tho?' — actor glances at it, smiles, looks back at camera. [PRODUCT_NAME] now held up, [ACTIVE_STATE]."],
|
|
131
|
+
["Actor Line", "'That's literally what I said. So I looked it up. [MECHANISM] — [WHAT IT DOES] — in [PRODUCT_FORM] you use at home.'"],
|
|
132
|
+
["On-Screen Text", "TikTok comment: 'Is this legit tho?' → clears. Caption: '[MECHANISM]. at home.' — bold highlight on [MECHANISM]."],
|
|
133
|
+
["Purpose", "Intercept #1 objection ('is this a gimmick?') before viewer consciously forms it. [ACTIVE_STATE] = visual proof it does something."],
|
|
134
|
+
["Transition", "Cut to [PRODUCT_NAME] in use — [ACTIVE_STATE] in motion."],
|
|
135
|
+
])
|
|
136
|
+
|
|
137
|
+
// SCENE 4 — Product Demo
|
|
138
|
+
sceneBlock("SCENE 4 — PRODUCT DEMO", "13–18 seconds | Consistent across all variations", [
|
|
139
|
+
["Visual Direction", "Close-up of [PRODUCT_NAME] in use: [USE_AREA_1], [USE_AREA_2], [USE_AREA_3]. [ACTIVE_STATE] visible and cinematic. Skin looks luminous, dewy."],
|
|
140
|
+
["Actor Line", "'[MECHANISM_SHORT] — [BENEFIT]. You use it for [TIME]. Done.'"],
|
|
141
|
+
["On-Screen Text", "'[MECHANISM_SHORT]' — caption. Then: '[TIME]. That's it.' — bold, centered."],
|
|
142
|
+
["Purpose", "Show the product WORKING. [ACTIVE_STATE] is [BRAND]'s visual superpower. Make viewer want that effect on their own skin."],
|
|
143
|
+
["Transition", "Cut to split-screen: before LEFT — [PRODUCT_NAME] in use RIGHT."],
|
|
144
|
+
])
|
|
145
|
+
|
|
146
|
+
// SCENE 5 — Before/After + Product Authority
|
|
147
|
+
sceneBlock("SCENE 5 — BEFORE/AFTER + PRODUCT AUTHORITY", "18–21 seconds | Consistent across all variations", [
|
|
148
|
+
["Visual Direction", "(1) Split-screen 1.5s: bare skin LEFT — same with [PRODUCT_NAME] in use RIGHT.\n\n(2) Product flat lay: [PRODUCT_NAME] centered on clean surface. [ACTIVE_STATE]. 3 white arrows point down at product. Warm lighting."],
|
|
149
|
+
["Actor Line", "'This is the real deal. [PERSONAL_RESULT_STATEMENT].'"],
|
|
150
|
+
["On-Screen Text", "Split: LEFT 'before [BRAND_NAME]' / RIGHT '[TIMEFRAME]'\n\nFlat lay: 'this is the real deal.' — bold white + 3 animated arrows pointing down. '[BRAND_NAME]' below."],
|
|
151
|
+
["Purpose", "Social proof + product authority. Split-screen is the receipt. 'this is the real deal.' closes the credibility loop before the CTA."],
|
|
152
|
+
["Transition", "Hard cut to CTA frame."],
|
|
153
|
+
])
|
|
154
|
+
|
|
155
|
+
// SCENE 6 — CTA Close
|
|
156
|
+
sceneBlock("SCENE 6 — CTA + OFFER CLOSE", "21–23 seconds | Consistent across all variations", [
|
|
157
|
+
["Visual Direction", "Actor back on camera, mini-mic in hand, [PRODUCT_NAME] raised toward camera ([ACTIVE_STATE]). Approving/confident expression. Optional: meme bookend (approving version of Scene 1 meme) for 0.5–1s."],
|
|
158
|
+
["Actor Line", "'[OFFER_TEXT] right now — link in bio.'"],
|
|
159
|
+
["On-Screen Text", "'[OFFER_TEXT]' — large bold\n'[LANDING_PAGE]' — below\n'Shop Now →'\n(Optional: 'Limited time | Results may vary')"],
|
|
160
|
+
["Purpose", "Drive the one action: click. [OFFER] is the urgency mechanism. 2 seconds max — viewer already knows. Just close."],
|
|
161
|
+
])
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## AI GENERATION PROMPTS (per-scene stubs)
|
|
167
|
+
|
|
168
|
+
Replace `[PLACEHOLDERS]` with brand-specific values.
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
SCENE 1 — Muse Hook
|
|
172
|
+
Photoreal female creator, [AI_ACTOR_AGE], natural look, warm skin tone. Bedroom desk. Casual [OUTFIT]. Silver condenser mini-mic in hand. [MEME_CHARACTER] overlay fills lower 60% — creator's eyes visible above. She glances at meme, looks up with knowing half-smile. Authentic TikTok creator bedroom reel. 9:16. 3 seconds.
|
|
173
|
+
|
|
174
|
+
SCENE 2 — Authority & Problem
|
|
175
|
+
Same creator. Mini-mic in left hand. [PRODUCT_NAME] held casually in right (not presenting). [CATEGORY_ITEMS] slightly out-of-focus on shelf behind. She speaks candidly, slightly frustrated then resolving. Warm golden light. Tight angles: face / hands / shelf. 9:16. 5 seconds.
|
|
176
|
+
|
|
177
|
+
SCENE 3 — Skeptic Pivot + Reveal
|
|
178
|
+
Same creator. TikTok comment bubble overlaid: 'Is this legit tho?' — she glances at it, smiles, looks at camera. Turns [PRODUCT_NAME] toward lens — [ACTIVE_STATE] faces camera. [ACTIVE_STATE] cinematic and warm. Handheld feel. 9:16. 5 seconds.
|
|
179
|
+
|
|
180
|
+
SCENE 4 — Product Demo
|
|
181
|
+
Extreme close-up of [PRODUCT_NAME] gliding along skin: [USE_AREA_1], [USE_AREA_2], [USE_AREA_3]. [ACTIVE_STATE] warm and cinematic. Dewy healthy skin texture. Micro-clips, cut every 1.5–2s. Creator's voice continues over. 9:16. 5 seconds.
|
|
182
|
+
|
|
183
|
+
SCENE 5 — Before/After + Flat Lay
|
|
184
|
+
CLIP 1: Split-screen. LEFT bare natural skin label 'before [BRAND_NAME]' / RIGHT [PRODUCT_NAME] in use label '[TIMEFRAME]'. Matching warm light both sides.
|
|
185
|
+
CLIP 2: [PRODUCT_NAME] centered on white/marble surface. [ACTIVE_STATE]. 3 white arrows pointing down. 'this is the real deal.' bold white text. 9:16. 3 seconds.
|
|
186
|
+
|
|
187
|
+
SCENE 6 — CTA
|
|
188
|
+
Creator energized, [PRODUCT_NAME] raised toward camera ([ACTIVE_STATE]). Warm, direct smile. Optional: meme bookend 0.5s. Fades to: '[OFFER_TEXT]' bold + '[LANDING_PAGE]' + 'Shop Now →'. 9:16. 2 seconds.
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## FIRST DEPLOYED — Solawave BOGO Campaign
|
|
194
|
+
|
|
195
|
+
- Brief: `~/Downloads/Solawave_VideoBrief_KoreanSkincaretruth_v1_20260409.docx`
|
|
196
|
+
- Brand kit: `brands/solawave/brand-kit.md`
|
|
197
|
+
- Script: `/tmp/docx_work/solawave_brief_v1.js`
|