@growthub/cli 0.3.41 → 0.3.43

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 (23) hide show
  1. package/README.md +87 -220
  2. package/assets/shared-templates/ad-formats/INDEX.md +94 -0
  3. package/assets/shared-templates/ad-formats/bedroom-minimic-talk.md +197 -0
  4. package/assets/shared-templates/ad-formats/frame-analysis.md +209 -0
  5. package/assets/shared-templates/ad-formats/process-specialist-medical.md +105 -0
  6. package/assets/shared-templates/ad-formats/villain-animation.md +183 -0
  7. package/assets/shared-templates/manifest.json +23 -0
  8. package/assets/shared-templates/scene-modules/INDEX.md +151 -0
  9. package/assets/shared-templates/scene-modules/body/before-after-flatlay.md +143 -0
  10. package/assets/shared-templates/scene-modules/body/minimic-problem.md +109 -0
  11. package/assets/shared-templates/scene-modules/body/product-demo-glow.md +123 -0
  12. package/assets/shared-templates/scene-modules/body/tiktok-skeptic-pivot.md +119 -0
  13. package/assets/shared-templates/scene-modules/body/villain-agitation.md +156 -0
  14. package/assets/shared-templates/scene-modules/cta/bogo-meme-bookend.md +144 -0
  15. package/assets/shared-templates/scene-modules/cta/guarantee-close.md +143 -0
  16. package/assets/shared-templates/scene-modules/hooks/dollar-amount.md +105 -0
  17. package/assets/shared-templates/scene-modules/hooks/meme-overlay.md +104 -0
  18. package/assets/shared-templates/scene-modules/hooks/pov-confession.md +92 -0
  19. package/assets/shared-templates/scene-modules/hooks/tiktok-comment.md +116 -0
  20. package/assets/shared-templates/scene-modules/hooks/villain-hook.md +134 -0
  21. package/dist/index.js +2606 -600
  22. package/package.json +4 -4
  23. package/dist/index.js.map +0 -7
@@ -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`
@@ -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*