@growthub/cli 0.3.33 → 0.3.35

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 +46 -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 +72 -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,209 @@
1
+ # Frame-by-Frame Video Analysis — Full Methodology
2
+ > **Load this file only when:** a muse video is provided AND no frozen format matches in `INDEX.md`.
3
+ > **Skip this file when:** a matching format exists in `INDEX.md` — use the format file instead.
4
+ >
5
+ > Source of truth: proven on Clarifion ODRx brief (April 2026), TheraPet muse → 9-scene match.
6
+
7
+ ---
8
+
9
+ ## WHY THIS MATTERS
10
+
11
+ A muse video is not a reference for "tone and feel." It is a **performance-proven creative structure**.
12
+ When a user says "use this as the muse," they mean:
13
+ - Same number of scenes — same types in the same order
14
+ - Same visual character format (villain objects, product characters, UGC creator, etc.)
15
+ - Same karaoke text rhythm and placement
16
+ - Same emotional arc (where the tone shifts from problem → solution)
17
+ - Same CTA structure
18
+
19
+ Writing a brief based on vibes from the muse = wrong. Reverse engineering frame by frame = right.
20
+
21
+ ---
22
+
23
+ ## PHASE 1: VIDEO INGESTION
24
+
25
+ ```bash
26
+ # Get runtime + dimensions
27
+ ffprobe -v quiet -print_format json -show_format -show_streams "/path/to/video.mp4" \
28
+ | python3 -c "import sys,json; d=json.load(sys.stdin); \
29
+ [print(s.get('duration','?'),'sec |',s.get('width','?'),'x',s.get('height','?')) \
30
+ for s in d['streams'] if s.get('codec_type')=='video']"
31
+
32
+ # Create frame output dir + extract at 3-second intervals
33
+ mkdir -p /tmp/muse_frames
34
+ ffmpeg -i "/path/to/video.mp4" -vf fps=1/3 /tmp/muse_frames/frame_%ds.jpg 2>&1 | tail -3
35
+ ls /tmp/muse_frames/ | sort
36
+ ```
37
+
38
+ **Interval guide:**
39
+ - 90–120s video → fps=1/3 (~30 frames, covers every beat)
40
+ - 20–30s TikTok video → fps=1/2 (~12 frames)
41
+ - Already extracted? Check `/tmp/muse_frames/` before re-running ffmpeg.
42
+
43
+ **If URL only (no local file):** Note URL in brief as muse reference. Ask user for local copy.
44
+ Frames stored at: `/tmp/muse_frames/frame_Xs.jpg` (X = elapsed seconds)
45
+
46
+ ---
47
+
48
+ ## PHASE 2: FRAME READING — WHAT TO LOOK FOR
49
+
50
+ Read ALL frames using the Read tool. Never skip. Batch 3 frames per tool call for speed.
51
+
52
+ | Element | What to Note |
53
+ |---|---|
54
+ | **Setting** | Interior? Exterior? Warm? Clinical? Chaotic? |
55
+ | **Characters** | Real creator? Animated? Product objects with villain faces? Animals? |
56
+ | **Villain format** | Animated product objects with expressive faces + small arms? |
57
+ | **On-screen text** | Exact words. Which word is highlighted? Color? Position? |
58
+ | **Tone/lighting** | Warm golden? Cool clinical? Chaotic? Clean minimal? |
59
+ | **Scene energy** | Agitation/frustration OR resolution/warmth/calm? |
60
+
61
+ **6 structural questions — answer before writing a single word of the brief:**
62
+ 1. How many distinct scenes? (count by setting/character changes, not frame count)
63
+ 2. Exactly when does the tone flip from problem → solution? (which scene number?)
64
+ 3. What is the character format? (villain animated objects? UGC creator? doctor?)
65
+ 4. What is the on-screen text style? (karaoke word-by-word? full sentences? stacked?)
66
+ 5. When does the product first appear? (what scene? floor/wall/box/hand?)
67
+ 6. How does the CTA end? (stacked boxes? product close-up? person holding? static card?)
68
+
69
+ ---
70
+
71
+ ## PHASE 3: SCENE MAP FORMAT
72
+
73
+ ```
74
+ SCENE MAP: [Muse Title] — [Total Runtime]
75
+
76
+ SCENE N | 0–Xs
77
+ Setting: [description]
78
+ Character: [villain format or creator type]
79
+ Text: "[word1]" → "[WORD2 — highlighted]" → "[word3]" → ...
80
+ Beat: HOOK / AGITATION / PRODUCT INTRO / SOCIAL PROOF / CTA
81
+ Energy: CHAOTIC / WARM / CLINICAL / ASPIRATIONAL
82
+
83
+ KEY STRUCTURAL FINDINGS:
84
+ - Total scenes: N
85
+ - Tone flip at: Scene N
86
+ - Character format: [description]
87
+ - Text style: [karaoke / sentences / stacked]
88
+ - Product reveal: Scene N, [floor/wall/box]
89
+ - CTA end format: [description]
90
+ ```
91
+
92
+ ---
93
+
94
+ ## PHASE 4: ADAPTATION RULES
95
+
96
+ **The hierarchy — in order of priority:**
97
+ 1. **Scene count is sacred** — if the muse has 9 scenes, the brief has 9 scenes. No exceptions.
98
+ 2. **Scene TYPE is sacred** — if Scene 2 is "villain-inside-failed-product," the new brief Scene 2 must be villain-inside-failed-product equivalent.
99
+ 3. **Character format is sacred** — animated villain objects → stay animated villain objects. Never swap to real people.
100
+ 4. **Text rhythm is sacred** — karaoke word-by-word → specify karaoke word-by-word. Show exact muse text then new brand equivalent.
101
+ 5. **Tone shift scene is sacred** — the warmth flip happens at the same scene number.
102
+ 6. **Only the product + copy change** — everything else is replicated.
103
+
104
+ | Muse Element | Action |
105
+ |---|---|
106
+ | Animated product villain character | Keep format — swap to equivalent failed competitor product |
107
+ | Specific competitor brand names | Remove — use generic label ("Enzyme Cleaner," "Scented Plug-In") |
108
+ | Brand-specific animals | Keep same animals — emotional arc mirrors the problem/solution |
109
+ | Calendar on wall (60 days) | Adapt to match your guarantee period exactly |
110
+ | Social proof persona (gray-haired woman) | Match to target persona age and type |
111
+ | Product packaging color/design | Replace with real product from brand assets |
112
+ | Guarantee language | Must match brand compliance exactly |
113
+
114
+ ---
115
+
116
+ ## PHASE 5: BRIEF FORMAT FOR NEW MUSE-DRIVEN BRIEFS
117
+
118
+ Each scene must have:
119
+ ```
120
+ [SCENE N header bar — brand secondary color]
121
+ → Scene number + name + timecode
122
+
123
+ [MUSE reference strip — light gray, italics]
124
+ → "MUSE: [exact description of what the muse does + exact text shown]"
125
+
126
+ [3-column table: VISUAL DIRECTION | ON-SCREEN TEXT | VOICEOVER]
127
+ ```
128
+
129
+ **The ↑ mirrors: notation** — for every on-screen text line, show the muse equivalent:
130
+ ```
131
+ → RED LIGHT THERAPY
132
+ • AT HOME (highlight)
133
+ ↑ mirrors: MOTHER CAT PRODUCES / SAFE HERE 24
134
+ ```
135
+ This notation lets animators/editors confirm they are matching the muse, not improvising.
136
+
137
+ **Scene mapping table** — always the FIRST section of the brief:
138
+ ```
139
+ | # | Muse — What Happens | New Brand — Equivalent Beat |
140
+ |---|---|---|
141
+ | 1 | [timecode + muse beat + exact text] | [new brand equivalent] |
142
+ ```
143
+
144
+ ---
145
+
146
+ ## PHASE 6: FREEZE THE NEW FORMAT
147
+
148
+ After completing the brief, freeze the format so future sessions don't re-derive it:
149
+ 1. Create `templates/ad-formats/<new-id>.md` — copy any existing format file as schema
150
+ 2. Add row to `templates/ad-formats/INDEX.md`
151
+ 3. Extract any reusable scene modules → `templates/scene-modules/<type>/<id>.md`
152
+ 4. Add rows to `templates/scene-modules/INDEX.md`
153
+
154
+ ---
155
+
156
+ ## PROVEN EXAMPLE: TheraPet → Clarifion ODRx (April 2026)
157
+
158
+ **Muse:** TheraPet AI Animation | Runtime: 98.47s | 9:16 | 360×640 | 30fps
159
+ **URL:** facebook.com/100068524006696/posts/1227321179562004
160
+
161
+ | Scene | Timecode | Character | Text | Beat |
162
+ |---|---|---|---|---|
163
+ | 1 | 0–17s | Villain plug-in between 3 devices | WHY NOTHING CHANGED / AND YOU HAVE / MIGHT WORK | HOOK |
164
+ | 2 | 17–29s | Villain INSIDE litter box | YOU'VE SPENT $300 / IN EVERY ROOM / YOU ARE JUST | AGITATION 1 |
165
+ | 3 | 29–41s | Clay litter bag villain | YOU'VE TRIED CLAY / AND YOUR CATS / PROBLEM / SYSTEM | AGITATION 2 |
166
+ | 4 | 41–50s | Enzyme cleaner + vinegar villains | PROBLEM IS SOLVED / EXACTLY WHERE THEY | AGITATION 3 |
167
+ | 5 | 50–62s | Floxetine pill bottle villain | SURE THE SPRAYING / YOU GOT ZOMBIES / YOU'RE ZOMBIFYING | AGITATION 4 |
168
+ | 6 | 62–74s | **TONE FLIP** — 3 TheraPet units glowing | MARKING AND SPRAYING / ALL IN ONE | PRODUCT INTRO |
169
+ | 7 | 74–83s | Units plugged in, cat resting below | MOTHER CAT PRODUCES / SAFE HERE 24 | IN ACTION |
170
+ | 8 | 83–92s | Gray-haired woman + cats + calendar | 60 DAYS / NO MESS | SOCIAL PROOF |
171
+ | 9 | 92–98s | Stacked boxes + cats | PARENTS ALREADY / BACK GUARANTEED | CTA |
172
+
173
+ **Key findings:** 9 scenes. Tone flip at Scene 6. Karaoke word-by-word, green highlight. Villain objects with faces + arms. Product reveal in trio formation on floor.
174
+
175
+ **Frozen as:** `templates/ad-formats/villain-animation.md`
176
+
177
+ ---
178
+
179
+ ## CHECKLIST: BEFORE SUBMITTING A NEW MUSE-DRIVEN BRIEF
180
+
181
+ ```
182
+ [ ] All frames read — none skipped
183
+ [ ] Scene count matches muse exactly
184
+ [ ] Scene mapping table on page 1
185
+ [ ] Every scene has a MUSE: reference strip
186
+ [ ] On-screen text word-by-word with ↑ mirrors: notation
187
+ [ ] Tone shift scene identified and explicitly called out
188
+ [ ] Villain/character format described exactly as in muse
189
+ [ ] Product reveal scene matches muse scene number and format
190
+ [ ] Social proof persona age + calendar day count correct
191
+ [ ] CTA has correct offer + guarantee language (compliance checked)
192
+ [ ] Brief ≤ 7 pages — tight, editor-readable
193
+ [ ] No paragraph essays inside scene blocks — 3-column table format
194
+ [ ] Format frozen in templates/ad-formats/ after brief is done
195
+ ```
196
+
197
+ ---
198
+
199
+ ## CRITICAL FAILURE MODES (DO NOT REPEAT)
200
+
201
+ | Failure | What Happened | Correct Approach |
202
+ |---|---|---|
203
+ | Ignored muse structure | Wrote generic 5-section brief based on ad strategy, not the muse | Read every frame. Use the muse's scene count. |
204
+ | Wrong scene count | Brief had 5 sections, muse had 9 scenes | Scene count must match muse exactly — no exceptions |
205
+ | Generic visual direction | "animated home interior" — no villain spec | Describe character format exactly: animated object villains with faces and arms |
206
+ | Missing karaoke specifics | No ↑ mirrors notation | Every text line maps back to muse text |
207
+ | Prose-heavy scenes | Multi-paragraph essays in scene blocks | 3-column table, bullet-style, editor-readable |
208
+ | Re-extracting existing frames | Re-ran ffmpeg when frames already in /tmp/muse_frames/ | Always `ls /tmp/muse_frames/` before running ffmpeg |
209
+ | Skipping the freeze step | New format not added to template library | After every muse brief: freeze the format |
@@ -0,0 +1,105 @@
1
+ # Ad Format: "The Process Specialist"
2
+ **ID:** `process-specialist-medical`
3
+ **Category:** Medical / Regenerative Medicine / Healthcare Authority
4
+ **Length:** ~50 seconds
5
+ **Scene Count:** 5
6
+ **Status:** ✅ PROVEN (Greentree Medical Center — v1 April 2026)
7
+ **Muse:** None — original format built for Greentree Medical Center
8
+
9
+ ---
10
+
11
+ ## FORMAT OVERVIEW
12
+
13
+ **Core Premise:** Lead with WHY the category fails (lack of diagnosis), not with the problem symptom. Position the brand as an elite diagnostic facility before positioning it as a treatment clinic. The 90% success rate is the proof point — and the diagnostic process is the explanation.
14
+
15
+ **Primary Differentiator vs. Standard Doctor-Led Format:** Does NOT open with the doctor. Opens with an elderly UGC actor (patient voice) who experienced the category failure. Doctor appears in Scene 2 onward as the authority who explains the solution.
16
+
17
+ **Competitor Framing:** Indirect. "Some clinics / most practices" language — no brand names. Creates category contrast without direct attack.
18
+
19
+ ---
20
+
21
+ ## SCENE STRUCTURE
22
+
23
+ | Scene | Name | Timecode | Beat | Talent |
24
+ |-------|------|----------|------|--------|
25
+ | 1 | Opening Hook | 0–5s | Category failure question — scroll-stop | Elderly UGC actor OR Doctor clone |
26
+ | 2 | The Problem at Other Clinics | 5–18s | Why the category fails — diagnostic gap | VO + B-roll (institutional/cool grade) |
27
+ | 3 | The Brand's Diagnostic Process | 18–33s | The 3-step process that explains the success rate | Doctor AI clone + diagnostic B-roll |
28
+ | 4 | The 90% Proof + Patient Story | 33–43s | Earned proof point + relatable patient outcome | Elderly UGC actor (1 line) + Doctor close |
29
+ | 5 | CTA — Diagnostic Screening Request | 43–52s | Drive one action: screening request (NOT consultation) | Doctor AI clone + branded end card |
30
+
31
+ ---
32
+
33
+ ## SACRED ELEMENTS (never remove)
34
+
35
+ - **Scene 2 color contrast:** Must be cooler/more institutional than Scenes 3–5. The visual shift IS the argument.
36
+ - **Three B-roll badges in Scene 3:** Blood Work Reviewed → Imaging Analyzed → Candidate Confirmed. These make the process tangible.
37
+ - **90% stat with context:** Always paired with "because we screen first" framing. Stat alone is a boast. Stat with explanation is authority.
38
+ - **CTA language:** "Request a Diagnostic Screening" — NOT "schedule a consultation." This reframe attracts qualified prospects and repels passive/symptom-management patients.
39
+ - **Results may vary disclaimer:** Mandatory alongside the 90% claim.
40
+
41
+ ---
42
+
43
+ ## HOOK VARIATIONS (5 — Scene 1 only)
44
+
45
+ | Hook | Type | Talent | Hook Line |
46
+ |------|------|--------|-----------|
47
+ | A | Patient Story — Missed Step | Elderly woman 65–72 | "I went to one of those injection clinics. They didn't order a single blood test before they treated me." |
48
+ | B | Doctor Challenge | Doctor AI clone | "Before we do anything at Greentree, I need to know one thing first — are you actually a candidate for this therapy?" |
49
+ | C | Patient Story — Failed Attempt | Elderly man 67–74 | "I tried a regenerative treatment at another clinic. It didn't work. Took me a year to find out why." |
50
+ | D | Doctor Authority | Doctor AI clone | "If your doctor didn't review your bloodwork before recommending a regenerative treatment — that's a major problem." |
51
+ | E | Patient Story — Two Clinics | Elderly woman 65–73 | "Two different clinics told me I was a candidate for PRP. Neither one ever reviewed my imaging." |
52
+
53
+ ---
54
+
55
+ ## AI ACTOR SPECS
56
+
57
+ **Elderly UGC Actors (2 required):**
58
+ - Actor 1: Woman, 65–72, active-casual clothing, warm home or outdoor setting
59
+ - Actor 2: Man, 67–74, active-outdoor look (golf/outdoor casual), backyard or garage setting
60
+ - Both: Genuine expression, NOT stock-photo polished. NOT frail or clinical.
61
+
62
+ **Doctor AI Clone:**
63
+ - Physician, 50–60, white coat, clean clinic exam room background
64
+ - Direct to camera. Measured pace. Clinical-warm lighting.
65
+ - Must appear consistent across Scenes 2–5 (same clone instance)
66
+
67
+ ---
68
+
69
+ ## ADAPTATION RULES
70
+
71
+ | Adapt | Keep | Never |
72
+ |-------|------|-------|
73
+ | Client name, doctor name, location | Scene structure and timecodes | Pain med / pain management language |
74
+ | Specific services (PRP / Stem Cell / other regen modalities) | The diagnostic-process-as-differentiator angle | Direct competitor brand names |
75
+ | Success rate percentage (verify and source before use) | Three-step process revelation in Scene 3 | Imagery suggesting pain clinic / opioid context |
76
+ | Elderly UGC actor demographics (adjust for brand's target age) | CTA reframe as "Diagnostic Screening" | Guaranteed outcome claims |
77
+ | B-roll sources | Color contrast Scene 2 (cool) vs Scenes 3–5 (warm) | Generic stock clinic imagery |
78
+
79
+ ---
80
+
81
+ ## COMPLIANCE REQUIREMENTS (Medical Formats)
82
+
83
+ - All scripts referencing a specific doctor by name require doctor approval before publishing
84
+ - "Results may vary" required alongside any success rate or outcome claim
85
+ - PRP and stem cell claims may require FTC/FDA compliance review for paid social
86
+ - DO NOT claim to diagnose or cure any condition
87
+ - DO NOT make surgical-outcome comparison guarantees
88
+
89
+ ---
90
+
91
+ ## JS STUB REFERENCE
92
+
93
+ Source script: `/tmp/docx_work/greentree_process_specialist_v1.js`
94
+ Output: `~/Downloads/GreenTreeMedical_VideoBrief_ProcessSpecialist_v1_20260409.docx`
95
+
96
+ To adapt for a new medical client:
97
+ 1. Update `CONFIG` fields (client_name, doctor_name, campaign_name, colors)
98
+ 2. Update `CONFIG.brand_constraint` from new client's brand-kit.md guardrails
99
+ 3. Update all hook lines (Scene 1) and the 3-step process (Scene 3) with new client specifics
100
+ 4. Update CTA text and website/phone in Scene 5
101
+ 5. Rename output file per naming convention
102
+
103
+ ---
104
+
105
+ *Process Specialist format — frozen April 2026 — Greentree Medical Center v1*
@@ -0,0 +1,183 @@
1
+ # Ad Format: Villain Object Animation
2
+ > ID: `villain-animation`
3
+ > Category: Pet Products / Home Devices / Supplements / Any product displacing an incumbent
4
+ > Length: 90–120 seconds (proven at 98s)
5
+ > Scene Count: 9
6
+ > Hook Variations: 5 (A–E)
7
+ > Status: ✅ PROVEN — Clarifion ODRx brief, April 2026
8
+ > Aspect Ratios: 9:16 primary, 1:1 secondary
9
+
10
+ ---
11
+
12
+ ## MUSE REFERENCE
13
+
14
+ - **Creator/Brand:** TheraPet (AI animation ad)
15
+ - **URL:** https://www.facebook.com/100068524006696/posts/1227321179562004
16
+ - **Original product featured:** TheraPet pheromone plug-in device (pet behavior / cat marking)
17
+ - **Local muse file:** `~/Downloads/AQN2IbZ…mp4`
18
+ - **Runtime:** 98.47 seconds | 360×640 | 9:16 vertical | 30fps
19
+ - **Why it works:** Long-form agitation stack + villain character format creates emotional investment before the product appears. 4× agitation scenes build genuine frustration — by the time the hero product arrives, the viewer is psychologically primed to want it. Animated villain objects prevent competitor brand legal issues while being more visually memorable than live footage. Tone flip at Scene 6 is a hard emotional reset — the color/warmth change signals "it's over now."
20
+
21
+ ---
22
+
23
+ ## FORMAT SIGNALS (non-negotiable)
24
+
25
+ 1. **Animated villain objects** — competing/failed products rendered as cartoon characters with expressive faces, small arms, frustrated/evil expressions. Never show real competitor branding — use generic category labels ("Enzyme Cleaner," "Scented Plug-In," "Litter Bag").
26
+ 2. **4× agitation stack** — Scenes 2–5 are each a different failed solution. Each one ends with the villain still losing / the problem persisting. Do not compress to fewer agitation scenes — the stack is what builds the emotional case.
27
+ 3. **Karaoke word-by-word text** — 1–4 words at a time, key word highlighted in brand accent color. This text rhythm is sacred. Full sentences break the format.
28
+ 4. **Hard tone flip at Scene 6** — full color, lighting, energy reversal. Cold/chaotic/frustrated → warm/golden/calm. This scene flip is the emotional payoff. It must be distinct — not a gentle transition.
29
+ 5. **Product trio reveal** — 3 hero product units on the floor/surface in formation before being plugged in. This staging is consistent across the muse.
30
+ 6. **Gray-haired woman social proof** — Carol-type persona in Scene 8 with a calendar on the wall showing the guarantee period. This is the trust anchor before the CTA.
31
+ 7. **Stacked product boxes CTA** — Scene 9 shows bundled/stacked product boxes with satisfied animals/characters. Product must be in its packaging, not just the unit.
32
+
33
+ ---
34
+
35
+ ## PROVEN SCENE STRUCTURE
36
+
37
+ | # | Scene Name | Timecode | Beat | Sacred Element |
38
+ |---|------------|----------|------|----------------|
39
+ | 1 | Hook | 0–17s | Scroll stop — villain established | Villain between 3 competing devices. Agitation energy. Hook line variations A–E. |
40
+ | 2 | Agitation 1 | 17–29s | Failed solution #1 | Villain INSIDE the failed product. Specific dollar amount wasted. |
41
+ | 3 | Agitation 2 | 29–41s | Failed solution #2 | Different villain character / product category. "You've tried [X]..." |
42
+ | 4 | Agitation 3 | 41–50s | Failed solution #3 | Different villain — natural/DIY solutions that also fail. |
43
+ | 5 | Agitation 4 | 50–62s | Failed solution #4 | Most extreme failed solution — medical/pharmaceutical or highest-stakes option. |
44
+ | 6 | Product Intro — TONE FLIP | 62–74s | Hero enters — full emotional reset | Warm lighting ON. Hero product in trio formation on floor, glowing. Problem framing drops. |
45
+ | 7 | Product in Action | 74–83s | Mechanism proof | Product plugged in / in use. Animal/character calm below it. Low camera angle. |
46
+ | 8 | Social Proof | 83–92s | Trust anchor | Carol-type persona + satisfied animals + calendar (guarantee days). |
47
+ | 9 | CTA | 92–98s | Convert | Stacked product boxes + animals + satisfaction guarantee text. |
48
+
49
+ ---
50
+
51
+ ## SCENE MODULES USED IN THIS FORMAT
52
+
53
+ | Scene | Module ID | File |
54
+ |-------|-----------|------|
55
+ | 1 | `villain-hook` | `hooks/villain-hook.md` |
56
+ | 2–5 | `villain-agitation` × 4 | `body/villain-agitation.md` |
57
+ | 6–7 | product intro + in-action (format-specific — use inline, not modular) | — |
58
+ | 8 | social proof persona (format-specific — use inline) | — |
59
+ | 9 | `guarantee-close` | `cta/guarantee-close.md` |
60
+
61
+ ---
62
+
63
+ ## ADAPTATION RULES
64
+
65
+ ### Keep (sacred)
66
+ - 9 scenes — no exceptions
67
+ - 4 agitation scenes (Scenes 2–5) — never compress to fewer
68
+ - Animated villain object format — never swap to real competitor footage
69
+ - Hard tone flip at Scene 6 — warm/golden must be visually distinct from Scenes 1–5
70
+ - Karaoke word-by-word text rhythm — 1–4 words at a time
71
+ - Gray-haired woman persona in Scene 8 — age and warmth signal are part of the trust mechanic
72
+ - Stacked product boxes in CTA — not just the device
73
+
74
+ ### Swap (per brand)
75
+ - Villain character design — match the category (litter bag for pet, pill bottle for supplement, etc.)
76
+ - Dollar amounts — match what target audience actually spends ($300 on litter, etc.)
77
+ - Calendar day count — match guarantee period exactly (30 days for ODRx, 60 days for TheraPet)
78
+ - Animal type — match product's target animal (cats, dogs, etc.)
79
+ - Guarantee language — must match compliance exactly
80
+ - Product glow color — match brand's device color/LED color
81
+
82
+ ### Never
83
+ - Real competitor brand names — use generic labels
84
+ - "Home stops smelling" → check compliance, may need "room" instead
85
+ - Specific medical claims in agitation scenes — "zombifying" language only if cleared
86
+ - Tone flip before Scene 6 — the first 5 scenes must stay cold/frustrated
87
+
88
+ ---
89
+
90
+ ## AI ACTOR / ANIMATION SPEC
91
+
92
+ ```yaml
93
+ character_style: "Animated 3D — expressive faces, small arms, exaggerated frustrated emotions"
94
+ villain_format: "Product objects as characters — litter bags, pill bottles, spray cans, etc. each with villain face"
95
+ hero_product: "Clean, glowing, warm — NOT animated with face. Product is aspirational, not a character."
96
+ social_proof_persona: "Animated woman, 60–70, gray or white hair, warm smile. 'Carol'-type. Relatable grandmother energy."
97
+ setting_villain: "Chaotic, dark, cluttered — matches the frustration of the problem"
98
+ setting_hero: "Warm, golden, organized — immediate visual contrast from villain scenes"
99
+ ```
100
+
101
+ ---
102
+
103
+ ## DOCX JS STUBS
104
+
105
+ Paste these sceneBlock() calls. Replace `[PLACEHOLDERS]`.
106
+
107
+ ```js
108
+ // SCENE 1 — Hook (use sceneBlock + 5 hookCards above it)
109
+ sceneBlock("SCENE 1 — HOOK", "0–17s | MUST stop the scroll", [
110
+ ["Visual Direction", "Animated setting: [PROBLEM_ENVIRONMENT]. Villain character ([VILLAIN_1_TYPE] with angry face + small arms) positioned between 3 competing [PRODUCT_CATEGORY] devices. Chaotic, dim, frustrated energy."],
111
+ ["On-Screen Text", "Karaoke word-by-word: [HOOK_LINE] — 1–4 words at a time. Key word highlighted in [BRAND_ACCENT_COLOR]."],
112
+ ["VO", "[HOOK_VO_LINE]"],
113
+ ["Purpose", "Establish the problem AND the villain in one scene. Viewer must recognize their own frustration immediately."],
114
+ ])
115
+
116
+ // SCENE 2 — Agitation 1
117
+ sceneBlock("SCENE 2 — AGITATION 1", "17–29s | Consistent across all variations", [
118
+ ["Visual Direction", "[VILLAIN_1_TYPE] INSIDE the failed product ([SPECIFIC_PRODUCT]). [ANIMAL/CHARACTER] still frustrated. Same chaotic setting."],
119
+ ["On-Screen Text", "Karaoke: '[DOLLAR_AMOUNT_WASTED] / [PRODUCT_CATEGORY] / [FAILURE_STATEMENT]'"],
120
+ ["VO", "[AGITATION_1_VO]"],
121
+ ["Purpose", "Quantify the pain. Dollar amount makes it visceral. Villain inside the product = the problem is in the product, not the user."],
122
+ ])
123
+
124
+ // SCENES 3–5: repeat sceneBlock pattern with different villain types and products
125
+
126
+ // SCENE 6 — Tone Flip + Product Intro
127
+ sceneBlock("SCENE 6 — TONE FLIP + PRODUCT INTRO", "62–74s | EMOTIONAL RESET", [
128
+ ["Visual Direction", "FULL TONE FLIP: warm golden lighting replaces cold/chaotic. [HERO_PRODUCT] × 3 units in trio formation on [SURFACE], [ACTIVE_STATE] glowing. [ANIMAL/CHARACTER] present and CALM. No villain characters."],
129
+ ["On-Screen Text", "Karaoke: '[UNLIKE_THOSE / PRODUCT_NAME / ALL IN ONE]' — positive framing for first time"],
130
+ ["VO", "[PRODUCT_INTRO_VO — first mention of hero product by name]"],
131
+ ["Purpose", "Full emotional reset. Problem era is over. Every visual signal (color, warmth, calm animals) signals the solution has arrived."],
132
+ ])
133
+
134
+ // SCENE 7 — Product in Action
135
+ sceneBlock("SCENE 7 — PRODUCT IN ACTION", "74–83s | Mechanism proof", [
136
+ ["Visual Direction", "[HERO_PRODUCT] plugged in / in use. [ACTIVE_STATE] visible. [ANIMAL/CHARACTER] calm and resting below or near device. Low camera angle looking up at product."],
137
+ ["On-Screen Text", "Karaoke: '[MECHANISM] / [KEY_BENEFIT] / [TIME_CLAIM]'"],
138
+ ["VO", "[MECHANISM_VO — how it works, simply]"],
139
+ ["Purpose", "Show the product DOING SOMETHING. The [ACTIVE_STATE] is the proof. Low camera angle makes product feel significant."],
140
+ ])
141
+
142
+ // SCENE 8 — Social Proof
143
+ sceneBlock("SCENE 8 — SOCIAL PROOF", "83–92s | Trust anchor", [
144
+ ["Visual Direction", "Animated [PERSONA_AGE]-year-old woman, warm smile. [ANIMAL/CHARACTER] happy beside her. Calendar on wall showing [GUARANTEE_DAYS] days."],
145
+ ["On-Screen Text", "Karaoke: '[GUARANTEE_DAYS] DAYS / [PRODUCT_BENEFIT] / [ACTION]'"],
146
+ ["VO", "[SOCIAL_PROOF_VO]"],
147
+ ["Purpose", "Human trust anchor before the ask. Calendar = risk reversal is real. Persona age should match target audience."],
148
+ ])
149
+
150
+ // SCENE 9 — CTA
151
+ sceneBlock("SCENE 9 — CTA", "92–98s | Convert", [
152
+ ["Visual Direction", "Bokeh/clean background. Stacked [HERO_PRODUCT] boxes. [ANIMAL/CHARACTER] happy. Satisfaction guarantee badge visible."],
153
+ ["On-Screen Text", "Karaoke: '[SOCIAL_PROOF_NUMBER] / [OFFER_TEXT] / [GUARANTEE_TEXT]'"],
154
+ ["VO", "[CTA_VO — product name + action + guarantee]"],
155
+ ["Purpose", "Drive the one action. Stacked boxes signal availability/popularity. Guarantee removes final objection."],
156
+ ])
157
+ ```
158
+
159
+ ---
160
+
161
+ ## AI GENERATION PROMPTS (per-scene stubs)
162
+
163
+ ```
164
+ SCENE 1 — Villain Hook
165
+ 3D animated [PROBLEM_ENVIRONMENT]. [VILLAIN_1_TYPE] character with angry cartoon face and small arms stands between 3 competing [PRODUCT_CATEGORY] devices. Dark, chaotic, frustrated color palette. [ANIMAL/CHARACTER] present looking unhappy. Karaoke text overlaid word-by-word. 9:16. 17 seconds.
166
+
167
+ SCENES 2–5 — Agitation Stack
168
+ 3D animated [VILLAIN_N_TYPE] character inside/near [FAILED_PRODUCT]. Same chaotic setting. Each scene ends with villain laughing or problem persisting. 9:16. 8–12 seconds each.
169
+
170
+ SCENE 6 — Tone Flip
171
+ DRAMATIC TRANSITION: cold/chaotic → warm/golden. [HERO_PRODUCT] × 3 units on [SURFACE] glowing [ACTIVE_COLOR]. [ANIMAL/CHARACTER] calm and peaceful. Soft warm ambient lighting replaces all previous harsh tones. 9:16. 12 seconds.
172
+
173
+ SCENE 9 — CTA Close
174
+ Clean bokeh background. Stacked [HERO_PRODUCT] boxes in pyramid/stack arrangement. [ANIMAL/CHARACTER] happy sitting nearby. Satisfaction guarantee badge in corner. Warm, aspirational lighting. 9:16. 6 seconds.
175
+ ```
176
+
177
+ ---
178
+
179
+ ## FIRST DEPLOYED — Clarifion ODRx Campaign
180
+
181
+ - Brief: `~/Downloads/Clarifion_ODRx_VideoBrief_TheraPetAI_v1_20260408.docx`
182
+ - Brand kit: `brands/clarifion/brand-kit.md`
183
+ - Script: `/tmp/docx_work/odrx_brief_v3.js`