@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.
- package/README.md +87 -220
- package/assets/shared-templates/ad-formats/INDEX.md +94 -0
- package/assets/shared-templates/ad-formats/bedroom-minimic-talk.md +197 -0
- package/assets/shared-templates/ad-formats/frame-analysis.md +209 -0
- package/assets/shared-templates/ad-formats/process-specialist-medical.md +105 -0
- package/assets/shared-templates/ad-formats/villain-animation.md +183 -0
- package/assets/shared-templates/manifest.json +23 -0
- package/assets/shared-templates/scene-modules/INDEX.md +151 -0
- package/assets/shared-templates/scene-modules/body/before-after-flatlay.md +143 -0
- package/assets/shared-templates/scene-modules/body/minimic-problem.md +109 -0
- package/assets/shared-templates/scene-modules/body/product-demo-glow.md +123 -0
- package/assets/shared-templates/scene-modules/body/tiktok-skeptic-pivot.md +119 -0
- package/assets/shared-templates/scene-modules/body/villain-agitation.md +156 -0
- package/assets/shared-templates/scene-modules/cta/bogo-meme-bookend.md +144 -0
- package/assets/shared-templates/scene-modules/cta/guarantee-close.md +143 -0
- package/assets/shared-templates/scene-modules/hooks/dollar-amount.md +105 -0
- package/assets/shared-templates/scene-modules/hooks/meme-overlay.md +104 -0
- package/assets/shared-templates/scene-modules/hooks/pov-confession.md +92 -0
- package/assets/shared-templates/scene-modules/hooks/tiktok-comment.md +116 -0
- package/assets/shared-templates/scene-modules/hooks/villain-hook.md +134 -0
- package/dist/index.js +2606 -600
- package/package.json +4 -4
- package/dist/index.js.map +0 -7
|
@@ -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`
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"frozenAt": "2026-04-12T00:00:00.000Z",
|
|
4
|
+
"source": "creative-strategist-v1",
|
|
5
|
+
"templates": [
|
|
6
|
+
{ "id": "ad-formats/bedroom-minimic-talk", "slug": "bedroom-minimic-talk", "type": "ad-format", "family": "video-creative", "path": "ad-formats/bedroom-minimic-talk.md" },
|
|
7
|
+
{ "id": "ad-formats/villain-animation", "slug": "villain-animation", "type": "ad-format", "family": "video-creative", "path": "ad-formats/villain-animation.md" },
|
|
8
|
+
{ "id": "ad-formats/process-specialist-medical","slug": "process-specialist-medical","type": "ad-format", "family": "video-creative", "path": "ad-formats/process-specialist-medical.md" },
|
|
9
|
+
{ "id": "ad-formats/frame-analysis", "slug": "frame-analysis", "type": "ad-format", "family": "video-creative", "path": "ad-formats/frame-analysis.md" },
|
|
10
|
+
{ "id": "scene-modules/hooks/meme-overlay", "slug": "meme-overlay", "type": "scene-module", "subtype": "hook", "family": "video-creative", "path": "scene-modules/hooks/meme-overlay.md" },
|
|
11
|
+
{ "id": "scene-modules/hooks/tiktok-comment", "slug": "tiktok-comment", "type": "scene-module", "subtype": "hook", "family": "video-creative", "path": "scene-modules/hooks/tiktok-comment.md" },
|
|
12
|
+
{ "id": "scene-modules/hooks/pov-confession", "slug": "pov-confession", "type": "scene-module", "subtype": "hook", "family": "video-creative", "path": "scene-modules/hooks/pov-confession.md" },
|
|
13
|
+
{ "id": "scene-modules/hooks/dollar-amount", "slug": "dollar-amount", "type": "scene-module", "subtype": "hook", "family": "video-creative", "path": "scene-modules/hooks/dollar-amount.md" },
|
|
14
|
+
{ "id": "scene-modules/hooks/villain-hook", "slug": "villain-hook", "type": "scene-module", "subtype": "hook", "family": "video-creative", "path": "scene-modules/hooks/villain-hook.md" },
|
|
15
|
+
{ "id": "scene-modules/body/minimic-problem", "slug": "minimic-problem", "type": "scene-module", "subtype": "body", "family": "video-creative", "path": "scene-modules/body/minimic-problem.md" },
|
|
16
|
+
{ "id": "scene-modules/body/tiktok-skeptic-pivot","slug": "tiktok-skeptic-pivot", "type": "scene-module", "subtype": "body", "family": "video-creative", "path": "scene-modules/body/tiktok-skeptic-pivot.md" },
|
|
17
|
+
{ "id": "scene-modules/body/product-demo-glow","slug": "product-demo-glow", "type": "scene-module", "subtype": "body", "family": "video-creative", "path": "scene-modules/body/product-demo-glow.md" },
|
|
18
|
+
{ "id": "scene-modules/body/villain-agitation","slug": "villain-agitation", "type": "scene-module", "subtype": "body", "family": "video-creative", "path": "scene-modules/body/villain-agitation.md" },
|
|
19
|
+
{ "id": "scene-modules/body/before-after-flatlay","slug": "before-after-flatlay", "type": "scene-module", "subtype": "body", "family": "video-creative", "path": "scene-modules/body/before-after-flatlay.md" },
|
|
20
|
+
{ "id": "scene-modules/cta/bogo-meme-bookend", "slug": "bogo-meme-bookend", "type": "scene-module", "subtype": "cta", "family": "video-creative", "path": "scene-modules/cta/bogo-meme-bookend.md" },
|
|
21
|
+
{ "id": "scene-modules/cta/guarantee-close", "slug": "guarantee-close", "type": "scene-module", "subtype": "cta", "family": "video-creative", "path": "scene-modules/cta/guarantee-close.md" }
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Scene Module Library — INDEX
|
|
2
|
+
> These are the plug-in building blocks. Each module = one scene or one hook variation.
|
|
3
|
+
> Pull a module file → swap `[PLACEHOLDERS]` from brand-kit.md → paste into brief JS.
|
|
4
|
+
> All modules are format-compatible as noted. Mix across formats where marked.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## HOW MODULES WORK
|
|
9
|
+
|
|
10
|
+
Every module contains:
|
|
11
|
+
- **What it does** — the job this scene performs in the ad
|
|
12
|
+
- **Visual direction** — camera, character, setting, lighting
|
|
13
|
+
- **On-screen text** — exact template with `[PLACEHOLDERS]`
|
|
14
|
+
- **Actor dialogue** — full template with delivery notes
|
|
15
|
+
- **JS stub** — ready-to-paste `sceneBlock()` or `hookCard()` row content
|
|
16
|
+
- **AI generation prompt** — ready-to-paste Veo 3 / Runway prompt stub
|
|
17
|
+
- **Brand-kit placeholders** — maps each `[PLACEHOLDER]` to its source field
|
|
18
|
+
|
|
19
|
+
**Placeholder schema (universal across all modules):**
|
|
20
|
+
```
|
|
21
|
+
[BRAND_NAME] → brand-kit.md → client_name
|
|
22
|
+
[PRODUCT_NAME] → brand-kit.md → primary_service
|
|
23
|
+
[PRICE] → brief content / website
|
|
24
|
+
[OFFER_TEXT] → brand-kit.md → cta_offer
|
|
25
|
+
[LANDING_PAGE] → brand-kit.md → landing_page
|
|
26
|
+
[PAIN_POINT] → brand-kit.md → target_pain_point
|
|
27
|
+
[MECHANISM] → brand-kit.md → approved_phrases
|
|
28
|
+
[ACTIVE_STATE] → brief content (device glow, motion, effect)
|
|
29
|
+
[AI_ACTOR_AGE] → brand-kit.md → ai_actor_age_range
|
|
30
|
+
[ACCENT_COLOR] → brand-kit.md → colors.secondary (hex, no #)
|
|
31
|
+
[GUARANTEE_DAYS] → brand-kit.md → compliance_notes
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## HOOKS
|
|
37
|
+
|
|
38
|
+
> Scene 1 only. One hook per variation (A–E). Scenes 2–N identical across all variations.
|
|
39
|
+
|
|
40
|
+
| File | ID | Best For | Format |
|
|
41
|
+
|------|----|----------|--------|
|
|
42
|
+
| `hooks/meme-overlay.md` | `meme-overlay` | Relatable lifestyle pain (tired, broke, frustrated) | `bedroom-minimic-talk` |
|
|
43
|
+
| `hooks/tiktok-comment.md` | `tiktok-comment` | High-skepticism categories; objection-first opens | `bedroom-minimic-talk` |
|
|
44
|
+
| `hooks/pov-confession.md` | `pov-confession` | Mirror moment; female 25–35 demo; skincare/beauty | `bedroom-minimic-talk` |
|
|
45
|
+
| `hooks/dollar-amount.md` | `dollar-amount` | Any category where overspending is the shared pain | `bedroom-minimic-talk`, `villain-animation` |
|
|
46
|
+
| `hooks/villain-hook.md` | `villain-hook` | Animated format; any product displacing incumbents | `villain-animation` |
|
|
47
|
+
|
|
48
|
+
**Recommended hook pairings (5-variation set):**
|
|
49
|
+
```
|
|
50
|
+
bedroom-minimic-talk (skincare/beauty tech):
|
|
51
|
+
A: meme-overlay ← direct muse mirror — test first
|
|
52
|
+
B: tiktok-comment ← highest persuasion for skeptical categories
|
|
53
|
+
C: dollar-amount ← works for 28–40 Facebook/Meta feed
|
|
54
|
+
D: product-reveal* ← custom hook; device with active glow in frame 1
|
|
55
|
+
E: pov-confession ← native TikTok; mirror moment
|
|
56
|
+
|
|
57
|
+
villain-animation (pet / home / supplement):
|
|
58
|
+
A–E: villain-hook × 5 with different VO lines (see villain-hook.md → Hook Variations section)
|
|
59
|
+
```
|
|
60
|
+
*product-reveal hook = custom variant; write inline in brief, no module file needed.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## BODY SCENES
|
|
65
|
+
|
|
66
|
+
> Scenes 2–N. Identical across all hook variations.
|
|
67
|
+
|
|
68
|
+
| File | ID | Scene # | Format | Beat |
|
|
69
|
+
|------|----|---------|--------|------|
|
|
70
|
+
| `body/minimic-problem.md` | `minimic-problem` | 2 | `bedroom-minimic-talk` | Authority + failed solutions confession |
|
|
71
|
+
| `body/tiktok-skeptic-pivot.md` | `tiktok-skeptic-pivot` | 3 | `bedroom-minimic-talk` | Skeptic disarm + product intro |
|
|
72
|
+
| `body/product-demo-glow.md` | `product-demo-glow` | 4 | `bedroom-minimic-talk` | Product in active use (glow/effect visible) |
|
|
73
|
+
| `body/villain-agitation.md` | `villain-agitation` | 2–5 (×4) | `villain-animation` | Stacked failed solutions as villain characters |
|
|
74
|
+
| `body/before-after-flatlay.md` | `before-after-flatlay` | 5 | `bedroom-minimic-talk` | Split-screen + "this is the real deal." flat lay |
|
|
75
|
+
|
|
76
|
+
**Sequencing rules:**
|
|
77
|
+
```
|
|
78
|
+
bedroom-minimic-talk order:
|
|
79
|
+
minimic-problem → tiktok-skeptic-pivot → product-demo-glow → before-after-flatlay → [CTA]
|
|
80
|
+
|
|
81
|
+
villain-animation order:
|
|
82
|
+
villain-agitation × 4 → [product intro inline] → [social proof inline] → [CTA]
|
|
83
|
+
(product intro + social proof are format-specific — write inline, not from modules)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## CTAs
|
|
89
|
+
|
|
90
|
+
> Final scene only. One CTA per brief. Select based on offer type + format.
|
|
91
|
+
|
|
92
|
+
| File | ID | Format | Offer Type |
|
|
93
|
+
|------|----|--------|------------|
|
|
94
|
+
| `cta/bogo-meme-bookend.md` | `bogo-meme-bookend` | `bedroom-minimic-talk` | BOGO / % off / any flash offer |
|
|
95
|
+
| `cta/guarantee-close.md` | `guarantee-close` | `villain-animation` | Guarantee + social proof number |
|
|
96
|
+
|
|
97
|
+
**Offer → module mapping:**
|
|
98
|
+
```
|
|
99
|
+
Buy 1 Get 1 FREE → bogo-meme-bookend
|
|
100
|
+
% Discount → bogo-meme-bookend (swap offer text)
|
|
101
|
+
Free trial → bogo-meme-bookend (swap offer text)
|
|
102
|
+
Satisfaction guarantee → guarantee-close
|
|
103
|
+
Bundle deal → guarantee-close or bogo-meme-bookend depending on format
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## ASSEMBLY RECIPES
|
|
109
|
+
|
|
110
|
+
Copy-paste these to brief the production team or start a new JS file.
|
|
111
|
+
|
|
112
|
+
### Recipe 1: Skincare/Beauty Tech — 23s BOGO (bedroom-minimic-talk)
|
|
113
|
+
```
|
|
114
|
+
Scene 1: hooks/meme-overlay.md (Hook A — test first)
|
|
115
|
+
hooks/tiktok-comment.md (Hook B)
|
|
116
|
+
hooks/dollar-amount.md (Hook C)
|
|
117
|
+
[custom product-reveal hook] (Hook D — write inline)
|
|
118
|
+
hooks/pov-confession.md (Hook E)
|
|
119
|
+
Scene 2: body/minimic-problem.md
|
|
120
|
+
Scene 3: body/tiktok-skeptic-pivot.md
|
|
121
|
+
Scene 4: body/product-demo-glow.md
|
|
122
|
+
Scene 5: body/before-after-flatlay.md
|
|
123
|
+
Scene 6: cta/bogo-meme-bookend.md
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Recipe 2: Pet / Home / Supplement — 90–120s Villain Format
|
|
127
|
+
```
|
|
128
|
+
Scene 1: hooks/villain-hook.md (5 variations A–E)
|
|
129
|
+
Scene 2: body/villain-agitation.md (Agitation 1 — COST)
|
|
130
|
+
Scene 3: body/villain-agitation.md (Agitation 2 — EFFORT)
|
|
131
|
+
Scene 4: body/villain-agitation.md (Agitation 3 — FUTILITY)
|
|
132
|
+
Scene 5: body/villain-agitation.md (Agitation 4 — RISK)
|
|
133
|
+
Scene 6: [product intro — write inline]
|
|
134
|
+
Scene 7: [product in action — write inline]
|
|
135
|
+
Scene 8: [social proof persona — write inline]
|
|
136
|
+
Scene 9: cta/guarantee-close.md
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## ADDING NEW MODULES
|
|
142
|
+
|
|
143
|
+
When you build a new brief and a scene is clearly reusable:
|
|
144
|
+
1. Create `scene-modules/<type>/<new-id>.md` using any existing module as the template
|
|
145
|
+
2. Add a row to the relevant table above
|
|
146
|
+
3. Add it to `ad-formats/INDEX.md` under the compatible format
|
|
147
|
+
4. Note which brief it was first deployed in at the bottom of the module file
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
*Scene Module Library — Creative Strategy Worker Kit — April 2026*
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Scene Module: Before/After + Product Flat Lay
|
|
2
|
+
> ID: `before-after-flatlay`
|
|
3
|
+
> Type: body (Scene 5)
|
|
4
|
+
> Compatible Formats: `bedroom-minimic-talk`
|
|
5
|
+
> Timecode: 18–21s (in 23s format)
|
|
6
|
+
> Status: ✅ PROVEN — Solawave BOGO (Scene 5)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## WHAT IT DOES
|
|
11
|
+
|
|
12
|
+
Two rapid clips back-to-back. First: a split-screen before/after that delivers the social proof in a single glance. Second: a product flat lay with arrows pointing at it and the phrase "this is the real deal." — the product authority close. Together these 3 seconds are the brief's receipt: proof it works, proof of what to buy.
|
|
13
|
+
|
|
14
|
+
**Why it works:** The split-screen is the most trusted visual format for product proof on TikTok/Reels — viewers parse it instantly. The flat lay + arrows is borrowed from the muse's most persuasive moment — it says "I'm putting the camera on the thing that actually matters" without any words needing to explain it. "this is the real deal." is the copy that closes this scene — it's been proven in the muse and should not be paraphrased.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## VISUAL DIRECTION
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
CLIP 1 — Split-Screen (1.5 seconds):
|
|
22
|
+
LEFT side: Bare, natural skin (or before-product state). Label: "before [BRAND_NAME]"
|
|
23
|
+
RIGHT side: Same creator/subject with [PRODUCT_NAME] in use ([ACTIVE_STATE]). Label: "[TIMEFRAME]"
|
|
24
|
+
Lighting: Matching warm light both sides. NOT dramatic — subtle, believable difference.
|
|
25
|
+
Note: "Before" should look normal/real — not intentionally bad. Authenticity > drama.
|
|
26
|
+
|
|
27
|
+
CLIP 2 — Product Flat Lay (1.5 seconds):
|
|
28
|
+
Subject: [PRODUCT_NAME] centered on clean surface (white, marble, or warm wood).
|
|
29
|
+
[ACTIVE_STATE] ON — product facing camera.
|
|
30
|
+
Arrows: 3 white animated arrows pointing DOWN toward the product.
|
|
31
|
+
Appear in sequence (staggered 0.2s each) — not all at once.
|
|
32
|
+
Text: "this is the real deal." — bold white text. Appears after arrows.
|
|
33
|
+
Brand: "[BRAND_NAME]" in smaller text below.
|
|
34
|
+
Lighting: Warm, slightly aspirational. Clean but not clinical.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## ON-SCREEN TEXT
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
CLIP 1 — Split-Screen labels:
|
|
43
|
+
Left: "before [BRAND_NAME]" — small, white, top or bottom of left panel
|
|
44
|
+
Right: "[TIMEFRAME]" — e.g. "week 3" / "day 14" / "30 days"
|
|
45
|
+
Small, white, top or bottom of right panel.
|
|
46
|
+
|
|
47
|
+
Note: "week 3" not "after 3 weeks" — brevity is required.
|
|
48
|
+
Note: do not use "after" label — it implies a clinical claim. Use timeframe only.
|
|
49
|
+
|
|
50
|
+
CLIP 2 — Flat Lay:
|
|
51
|
+
Line 1: "this is the real deal." — bold, white, all lowercase (muse style)
|
|
52
|
+
Line 2: "[BRAND_NAME]" — slightly smaller, white
|
|
53
|
+
Arrows: animated (not static) — stagger entry for dynamism
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## ACTOR DIALOGUE
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Spoken over BOTH clips (continuous):
|
|
62
|
+
|
|
63
|
+
Pattern: [personal result statement — specific but not a clinical claim]
|
|
64
|
+
|
|
65
|
+
Template:
|
|
66
|
+
"This is the real deal. [PERSONAL_RESULT] since before I had a reason to worry about it."
|
|
67
|
+
|
|
68
|
+
Examples:
|
|
69
|
+
"This is the real deal. My skin hasn't looked this good since before I had a reason to worry about it."
|
|
70
|
+
"This is the real deal. The marking stopped. Week 3 — completely different house."
|
|
71
|
+
"This is the real deal. I stopped counting how many serums are in the trash."
|
|
72
|
+
|
|
73
|
+
Delivery: Quiet conviction. Not shouting. Not a sales line. Just the truth.
|
|
74
|
+
"This is the real deal." — slight pause before it. Let it land.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## TIMEFRAME CALIBRATION
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
Use a timeframe that is:
|
|
83
|
+
- Long enough to be believable (not "next day")
|
|
84
|
+
- Short enough to be motivating (not "after 6 months")
|
|
85
|
+
- Consistent with brand compliance guidelines
|
|
86
|
+
|
|
87
|
+
Calibration guide:
|
|
88
|
+
Skincare device: "week 3" / "week 4" / "day 21"
|
|
89
|
+
Supplement: "day 30" / "week 6"
|
|
90
|
+
Pet behavior: "week 2" / "week 3" (behavior changes faster)
|
|
91
|
+
Air quality: "day 3" / "first week" (immediate-ish results credible)
|
|
92
|
+
|
|
93
|
+
Check brand-kit.md → compliance_notes before setting timeframe.
|
|
94
|
+
Never use exact % improvement without clinical backing.
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## BRAND-KIT PLACEHOLDERS
|
|
100
|
+
|
|
101
|
+
| Placeholder | Source | Example |
|
|
102
|
+
|-------------|--------|---------|
|
|
103
|
+
| `[BRAND_NAME]` | `brand-kit.md → client_name` | "Solawave" |
|
|
104
|
+
| `[PRODUCT_NAME]` | `brand-kit.md → primary_service` | "Solawave wand" |
|
|
105
|
+
| `[ACTIVE_STATE]` | Brief content | "red light glowing" |
|
|
106
|
+
| `[TIMEFRAME]` | Brief content (compliance-checked) | "week 3" |
|
|
107
|
+
| `[PERSONAL_RESULT]` | Brief content | "My skin hasn't looked this good..." |
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## COMPLIANCE CHECK (run before finalizing)
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
[ ] No "before/after" labels (use timeframe on right side only)
|
|
115
|
+
[ ] No specific % improvement claim
|
|
116
|
+
[ ] "Results may vary" included in Scene 6 bottom strip if making any outcome statement
|
|
117
|
+
[ ] Timeframe is plausible and consistent with brand-kit.md → compliance_notes
|
|
118
|
+
[ ] "this is the real deal." is a subjective personal statement — not a clinical claim ✓
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## JS STUB (sceneBlock row content)
|
|
124
|
+
|
|
125
|
+
```js
|
|
126
|
+
// Drop into sceneBlock() rows array for Scene 5
|
|
127
|
+
["Visual Direction", "(1) Split-screen 1.5s: bare [skin/state] LEFT 'before [BRAND_NAME]' — [PRODUCT_NAME] in use RIGHT '[TIMEFRAME]'. Matching warm light both sides.\n\n(2) Product flat lay: [PRODUCT_NAME] centered on [SURFACE]. [ACTIVE_STATE]. 3 staggered white arrows pointing down. 'this is the real deal.' bold white. '[BRAND_NAME]' below."],
|
|
128
|
+
["Actor Line", "'This is the real deal. [PERSONAL_RESULT_STATEMENT].'"],
|
|
129
|
+
["On-Screen Text", "Split: LEFT 'before [BRAND_NAME]' / RIGHT '[TIMEFRAME]'\n\nFlat lay: 'this is the real deal.' bold white + 3 animated arrows + '[BRAND_NAME]'"],
|
|
130
|
+
["Compliance note", "No % claims. No 'after' label. '[TIMEFRAME]' only. 'Results may vary' in Scene 6 strip."],
|
|
131
|
+
["Purpose", "Social proof + product authority. Split-screen is the receipt. 'this is the real deal.' closes the credibility loop before CTA."],
|
|
132
|
+
["Transition", "Hard cut to CTA frame."],
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## AI GENERATION PROMPT STUB
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
CLIP 1 (split-screen): Two-panel vertical split. LEFT: creator bare natural [skin/state], soft warm light, small label 'before [BRAND_NAME]'. RIGHT: same creator with [PRODUCT_NAME] in use [ACTIVE_STATE], small label '[TIMEFRAME]'. Matching warm ambient light both panels. Authentic, subtle difference — not dramatic. 9:16. 1.5 seconds.
|
|
141
|
+
|
|
142
|
+
CLIP 2 (flat lay): [PRODUCT_NAME] centered on [white marble/warm wood] surface. [ACTIVE_STATE] facing camera. Warm soft light. 3 white arrows animated in sequence pointing down at product. 'this is the real deal.' appears in bold white after arrows. Clean, minimal. 9:16. 1.5 seconds.
|
|
143
|
+
```
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Scene Module: Mini-Mic Problem Confession
|
|
2
|
+
> ID: `minimic-problem`
|
|
3
|
+
> Type: body (Scene 2)
|
|
4
|
+
> Compatible Formats: `bedroom-minimic-talk`
|
|
5
|
+
> Timecode: 3–8s (in 23s format)
|
|
6
|
+
> Status: ✅ PROVEN — Solawave BOGO (Scene 2)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## WHAT IT DOES
|
|
11
|
+
|
|
12
|
+
The creator lists the things she's already tried — with specificity. Mini-mic in hand, product held casually in the other (not showcasing it yet). The point is to establish shared experience: she's not naive, she's done the work, nothing worked. This converts the viewer from skeptic to peer before the product is ever named.
|
|
13
|
+
|
|
14
|
+
**Why it works:** Shared struggle = trust. If she's tried the same $300 serums and $120 eye creams the viewer has, she has earned the right to recommend something. The casual product hold (not presenting it) creates subconscious anticipation — the viewer wonders what she's holding — without feeling sold to.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## VISUAL DIRECTION
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Frame: Creator close-up. Mini-mic in one hand at chin/chest level.
|
|
22
|
+
[PRODUCT_NAME] held casually in OTHER hand — not presented, just held.
|
|
23
|
+
Skincare/category items slightly out-of-focus in background (shelf, counter).
|
|
24
|
+
Lighting: Warm ambient — same bedroom setup as hook scene.
|
|
25
|
+
Camera: Tight angles alternating: face → hands/product → face.
|
|
26
|
+
Slight low angle — intimate, confiding.
|
|
27
|
+
Duration: 4–5 seconds.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## ON-SCREEN TEXT
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Lists the failed products/attempts the creator has tried.
|
|
36
|
+
Appears as stacked caption beats, not all at once.
|
|
37
|
+
|
|
38
|
+
Template:
|
|
39
|
+
"[FAILED_CATEGORY_1]. [FAILED_CATEGORY_2]. [FAILED_CATEGORY_3]."
|
|
40
|
+
Key words bolded. White text, black outline. Bottom third.
|
|
41
|
+
|
|
42
|
+
Examples:
|
|
43
|
+
"serums. eye creams. sheet masks."
|
|
44
|
+
"$600 red light panels. microneedling. facials."
|
|
45
|
+
"clay litter. crystal litter. enzyme cleaner."
|
|
46
|
+
"supplements. probiotics. prescription topicals."
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## ACTOR DIALOGUE
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
Pattern: [category items tried + dollar anchor] + [the honest failure] + [leads into product]
|
|
55
|
+
|
|
56
|
+
Full template:
|
|
57
|
+
"I've tried [FAILED_1]. [FAILED_2]. [FAILED_3]. [DOLLAR_AMOUNT] later.
|
|
58
|
+
Nothing was giving me what I actually needed for [PAIN_POINT]."
|
|
59
|
+
|
|
60
|
+
Short template (for tighter edits):
|
|
61
|
+
"[DOLLAR_AMOUNT] on [CATEGORY_PRODUCTS]. Nothing for [PAIN_POINT]. Until this."
|
|
62
|
+
|
|
63
|
+
Delivery: Candid, slightly frustrated — but resolved. She's past the frustration.
|
|
64
|
+
This is the origin story, not the complaint. Keep it moving.
|
|
65
|
+
Target: 4–5 seconds spoken, ~30–35 words max.
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## TRANSITION OUT
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Direct cut to the product being lifted into frame (Scene 3 — Skeptic Pivot).
|
|
74
|
+
OR: Creator lifts the product naturally at end of line — camera follows.
|
|
75
|
+
Do NOT fade or wipe — this format uses hard cuts throughout.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## BRAND-KIT PLACEHOLDERS
|
|
81
|
+
|
|
82
|
+
| Placeholder | Source | Example |
|
|
83
|
+
|-------------|--------|---------|
|
|
84
|
+
| `[FAILED_1/2/3]` | Brief content + category research | "serums / eye creams / sheet masks" |
|
|
85
|
+
| `[DOLLAR_AMOUNT]` | Brief content | "$300" |
|
|
86
|
+
| `[CATEGORY_PRODUCTS]` | Brief content | "serums and red light panels" |
|
|
87
|
+
| `[PAIN_POINT]` | `brand-kit.md → target_pain_point` | "fine lines" / "cat odor" |
|
|
88
|
+
| `[PRODUCT_NAME]` | `brand-kit.md → primary_service` | "Solawave wand" |
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## JS STUB (sceneBlock row content)
|
|
93
|
+
|
|
94
|
+
```js
|
|
95
|
+
// Drop into sceneBlock() rows array for Scene 2
|
|
96
|
+
["Visual Direction", "AI actor close-up, mini-mic in one hand at chin level. [PRODUCT_NAME] held casually in other hand — not presenting, just holding. [CATEGORY_ITEMS] slightly out-of-focus on shelf behind. Warm ambient light. Tight alternating angles: face / hands."],
|
|
97
|
+
["Actor Line", "'I've tried [FAILED_1], [FAILED_2], [FAILED_3]. [DOLLAR_AMOUNT] later. Nothing was giving me what I actually needed for [PAIN_POINT].'"],
|
|
98
|
+
["On-Screen Text", "'[FAILED_1]. [FAILED_2]. [FAILED_3].' — stacked caption beats. Key words bold."],
|
|
99
|
+
["Purpose", "Build credibility through shared experience. Positions [PRODUCT_NAME] reveal as earned discovery, not ad pitch."],
|
|
100
|
+
["Transition", "Direct cut to [PRODUCT_NAME] lifted into frame for Scene 3."],
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## AI GENERATION PROMPT STUB
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
Photoreal female creator, [AI_ACTOR_AGE], natural look. Bedroom desk. Silver mini-mic in left hand at chin level. [PRODUCT_NAME] held casually in right hand (not presenting — just in hand). [CATEGORY_ITEMS] slightly blurred on shelf behind. She speaks directly and candidly — slightly frustrated resolving to confident. Warm golden ambient light. Tight alternating angles: face close-up / hands + product. Handheld feel. 9:16. 5 seconds.
|
|
109
|
+
```
|