@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.
Files changed (31) hide show
  1. package/README.md +21 -0
  2. package/assets/worker-kits/creative-strategist-v1/brands/_template/brand-kit.md +123 -0
  3. package/assets/worker-kits/creative-strategist-v1/brands/solawave/brand-kit.md +139 -0
  4. package/assets/worker-kits/creative-strategist-v1/bundles/creative-strategist-v1.json +47 -0
  5. package/assets/worker-kits/creative-strategist-v1/growthub-meta/README.md +14 -0
  6. package/assets/worker-kits/creative-strategist-v1/growthub-meta/kit-standard.md +47 -0
  7. package/assets/worker-kits/creative-strategist-v1/kit.json +82 -0
  8. package/assets/worker-kits/creative-strategist-v1/skills.md +341 -0
  9. package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/INDEX.md +94 -0
  10. package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/bedroom-minimic-talk.md +197 -0
  11. package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/frame-analysis.md +209 -0
  12. package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/process-specialist-medical.md +105 -0
  13. package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/villain-animation.md +183 -0
  14. package/assets/worker-kits/creative-strategist-v1/templates/brief-template.js +470 -0
  15. package/assets/worker-kits/creative-strategist-v1/templates/hooks-library/500-winning-hooks.csv +539 -0
  16. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/INDEX.md +151 -0
  17. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/before-after-flatlay.md +143 -0
  18. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/minimic-problem.md +109 -0
  19. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/product-demo-glow.md +123 -0
  20. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/tiktok-skeptic-pivot.md +119 -0
  21. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/villain-agitation.md +156 -0
  22. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/bogo-meme-bookend.md +144 -0
  23. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/guarantee-close.md +143 -0
  24. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/dollar-amount.md +105 -0
  25. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/meme-overlay.md +104 -0
  26. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/pov-confession.md +92 -0
  27. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/tiktok-comment.md +116 -0
  28. package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/villain-hook.md +134 -0
  29. package/assets/worker-kits/creative-strategist-v1/workers/creative-strategist/CLAUDE.md +440 -0
  30. package/dist/index.js +206 -0
  31. 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*
@@ -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`