@growthub/cli 0.3.34 → 0.3.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/assets/worker-kits/creative-strategist-v1/brands/_template/brand-kit.md +123 -0
- package/assets/worker-kits/creative-strategist-v1/brands/solawave/brand-kit.md +139 -0
- package/assets/worker-kits/creative-strategist-v1/bundles/creative-strategist-v1.json +47 -0
- package/assets/worker-kits/creative-strategist-v1/growthub-meta/README.md +14 -0
- package/assets/worker-kits/creative-strategist-v1/growthub-meta/kit-standard.md +47 -0
- package/assets/worker-kits/creative-strategist-v1/kit.json +82 -0
- package/assets/worker-kits/creative-strategist-v1/skills.md +341 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/INDEX.md +94 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/bedroom-minimic-talk.md +197 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/frame-analysis.md +209 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/process-specialist-medical.md +105 -0
- package/assets/worker-kits/creative-strategist-v1/templates/ad-formats/villain-animation.md +183 -0
- package/assets/worker-kits/creative-strategist-v1/templates/brief-template.js +470 -0
- package/assets/worker-kits/creative-strategist-v1/templates/hooks-library/500-winning-hooks.csv +539 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/INDEX.md +151 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/before-after-flatlay.md +143 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/minimic-problem.md +109 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/product-demo-glow.md +123 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/tiktok-skeptic-pivot.md +119 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/villain-agitation.md +156 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/bogo-meme-bookend.md +144 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/guarantee-close.md +143 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/dollar-amount.md +105 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/meme-overlay.md +104 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/pov-confession.md +92 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/tiktok-comment.md +116 -0
- package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/villain-hook.md +134 -0
- package/assets/worker-kits/creative-strategist-v1/workers/creative-strategist/CLAUDE.md +440 -0
- package/dist/index.js +206 -0
- package/package.json +3 -2
package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/body/villain-agitation.md
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Scene Module: Villain Agitation Stack
|
|
2
|
+
> ID: `villain-agitation`
|
|
3
|
+
> Type: body (Scenes 2–5)
|
|
4
|
+
> Compatible Formats: `villain-animation`
|
|
5
|
+
> Timecode: ~12s per scene (in 98s format); stack 4× for full agitation arc
|
|
6
|
+
> Status: ✅ PROVEN — Clarifion ODRx brief (Scenes 2–5)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## WHAT IT DOES
|
|
11
|
+
|
|
12
|
+
Each agitation scene introduces a different failed solution as an animated villain character. The viewer has tried this product too — and it failed them. Four stacked scenes build frustration to a crescendo before the hero product arrives. Each scene must feature a DIFFERENT villain and a DIFFERENT angle on the failure (cost, effort, danger, futility).
|
|
13
|
+
|
|
14
|
+
**Why it works:** The agitation stack is the emotional engine of this format. One failed solution is forgivable. Four failed solutions, each with its own villain character, builds a case that the problem is systemic — not the viewer's fault. By Scene 5, the viewer is primed to accept anything that actually works. The villain character format externalises the blame onto the product, not the person.
|
|
15
|
+
|
|
16
|
+
**Critical rule:** Stack exactly 4 agitation scenes (Scenes 2–5). Never fewer. The emotional build requires the full stack to work.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## SCENE STRUCTURE (one agitation = one villain)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Per-scene structure:
|
|
24
|
+
Setting: Same problem environment as Scene 1, slightly different angle/focus.
|
|
25
|
+
Villain: Different villain character than previous scene.
|
|
26
|
+
Focus: A different dimension of failure: COST / EFFORT / RISK / FUTILITY.
|
|
27
|
+
Text: Karaoke word-by-word, 1–4 words per beat.
|
|
28
|
+
VO: Direct address — "You've tried X. And Y. Because Z. But [problem] is still there."
|
|
29
|
+
End beat: Villain triumphant OR problem persisting — reinforces futility.
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**4-Agitation Arc (proven order):**
|
|
33
|
+
| # | Villain Type | Failure Dimension | Karaoke Focus |
|
|
34
|
+
|---|---|---|---|
|
|
35
|
+
| Agitation 1 | Most common solution in category | COST ("You've spent $X") | Dollar amount wasted |
|
|
36
|
+
| Agitation 2 | Secondary common solution | EFFORT ("You've tried everything in X") | Number of attempts |
|
|
37
|
+
| Agitation 3 | Natural/DIY alternatives | FUTILITY ("Natural options that still failed") | Still happening |
|
|
38
|
+
| Agitation 4 | Most extreme/medical solution | RISK ("Even the risky option didn't help") | Side effects / extremity |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## VISUAL DIRECTION (per agitation scene)
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Villain: New character — different product category from previous scenes.
|
|
46
|
+
Same animation style: expressive face, small arms, frustrated/smug emotion.
|
|
47
|
+
Specific to the failed product: litter bag, pill bottle, spray can, serum tube, etc.
|
|
48
|
+
|
|
49
|
+
Setting: Same core environment. Small variation in angle or focus area.
|
|
50
|
+
Lighting: still dark/cool/chaotic — no warmth enters until Scene 6.
|
|
51
|
+
|
|
52
|
+
Animals/characters: Present in every scene. Still unhappy/frustrated.
|
|
53
|
+
Emotional state mirrors the ongoing problem, not resolution.
|
|
54
|
+
|
|
55
|
+
Beat: Scene ends with villain still "winning" — problem unresolved.
|
|
56
|
+
This is CRITICAL — do not let agitation scenes accidentally imply progress.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## ON-SCREEN TEXT (karaoke)
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Format: 1–4 words per beat, 0.5–1 second each. Key word in [BRAND_ACCENT_COLOR].
|
|
65
|
+
|
|
66
|
+
Agitation 1 — COST:
|
|
67
|
+
"YOU'VE SPENT" → "$[AMOUNT]" → "IN EVERY" → "[ROOM/AREA]"
|
|
68
|
+
"RIGHT NEXT TO" → "[ANIMAL/PERSON]" → "YOU ARE JUST" → "[FAILURE_OUTCOME]"
|
|
69
|
+
|
|
70
|
+
Agitation 2 — EFFORT:
|
|
71
|
+
"YOU'VE TRIED" → "[PRODUCT_CATEGORY]" → "AND YOUR [ANIMAL/PERSON]" → "[PROBLEM_PERSISTS]"
|
|
72
|
+
"[SPECIFIC_PROBLEM]" → "SYSTEM" → "[STILL]" → "HAPPENING"
|
|
73
|
+
|
|
74
|
+
Agitation 3 — FUTILITY (natural/DIY):
|
|
75
|
+
"YOU'VE TRIED" → "[NATURAL_SOLUTION_1]" → "AND [SOLUTION_2]" → "AND [SOLUTION_3]"
|
|
76
|
+
"PROBLEM IS" → "[STILL]" → "EXACTLY WHERE" → "[THEY/IT] [LEFT/IS]"
|
|
77
|
+
|
|
78
|
+
Agitation 4 — RISK/EXTREME:
|
|
79
|
+
"[EXTREME_OPTION]" → "SURE [SIDE_EFFECT]" → "WON'T [POSITIVE_THING]" → "WON'T [ANOTHER_POSITIVE]"
|
|
80
|
+
"YOU GOT" → "[NEGATIVE_OUTCOME]" → "YOU'RE [VERB]-ING" → "THEM"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## ACTOR/VO DIALOGUE (per scene)
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Pattern: [acknowledges the solution tried] + [why it seemed reasonable] + [why it still failed]
|
|
89
|
+
|
|
90
|
+
Agitation 1 template:
|
|
91
|
+
"You've spent [AMOUNT] on [PRODUCT_CATEGORY]. Put [PRODUCT] in every [LOCATION].
|
|
92
|
+
Right next to [ANIMAL/PERSON]. You are just [FAILURE_OUTCOME]."
|
|
93
|
+
|
|
94
|
+
Agitation 2 template:
|
|
95
|
+
"You've tried [PRODUCT_TYPE_1]. And [PRODUCT_TYPE_2]. And [PRODUCT_TYPE_3].
|
|
96
|
+
[PROBLEM] is [still exactly where it was / happening every day]."
|
|
97
|
+
|
|
98
|
+
Agitation 3 template:
|
|
99
|
+
"You've tried [NATURAL_1] and [NATURAL_2] and [NATURAL_3].
|
|
100
|
+
The problem doesn't care. [VILLAIN] is still [LAUGHING / THERE / WINNING]."
|
|
101
|
+
|
|
102
|
+
Agitation 4 template:
|
|
103
|
+
"Sure — [EXTREME_OPTION] works. But [SIDE_EFFECT_1] and [SIDE_EFFECT_2].
|
|
104
|
+
[NEGATIVE_FRAMING]. You're [VERB]-ing [THEM/IT]."
|
|
105
|
+
|
|
106
|
+
Delivery: Tone escalates across the 4 scenes — empathetic (S2) → exasperated (S3) → incredulous (S4) → almost absurd (S5).
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## BRAND-KIT PLACEHOLDERS
|
|
112
|
+
|
|
113
|
+
| Placeholder | Source | Example (ODRx) |
|
|
114
|
+
|-------------|--------|----------------|
|
|
115
|
+
| `[VILLAIN_N_TYPE]` | Brief content | "animated litter bag" / "pill bottle" / "enzyme cleaner" |
|
|
116
|
+
| `[PRODUCT_CATEGORY]` | Brief content | "litter boxes" / "serums" / "supplements" |
|
|
117
|
+
| `[AMOUNT]` | Brief content | "$300" / "$500" |
|
|
118
|
+
| `[NATURAL_SOLUTION_N]` | Brief content | "vinegar" / "baking soda" / "enzyme spray" |
|
|
119
|
+
| `[EXTREME_OPTION]` | Brief content | "Floxetine" / "prescription topicals" / "laser" |
|
|
120
|
+
| `[BRAND_ACCENT_COLOR]` | `brand-kit.md → colors.secondary` | "2C7FF8" |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## ADAPTATION RULES
|
|
125
|
+
|
|
126
|
+
- **Agitation 1** always = the most common/expected solution (highest viewer recognition)
|
|
127
|
+
- **Agitation 4** always = the most extreme option (creates emotional peak before the flip)
|
|
128
|
+
- Never use real competitor brand names — use generic category labels
|
|
129
|
+
- Each villain must be visually distinct from all others — different shape, color, personality
|
|
130
|
+
- Dollar amounts should reflect real category spend — research before writing
|
|
131
|
+
- Never let any agitation scene accidentally solve the problem or imply partial improvement
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## JS STUB (sceneBlock — replicate 4× with different values)
|
|
136
|
+
|
|
137
|
+
```js
|
|
138
|
+
// Agitation 1
|
|
139
|
+
sceneBlock("SCENE 2 — AGITATION 1", "17–29s | Consistent across all variations", [
|
|
140
|
+
["Visual Direction", "[VILLAIN_1_TYPE] character INSIDE / ON [FAILED_PRODUCT_1]. [ANIMAL/CHARACTER] still frustrated. Dark chaotic setting. Same environment as Scene 1."],
|
|
141
|
+
["On-Screen Text", "Karaoke: 'YOU\\'VE SPENT' → '$[AMOUNT]' → '[FAILURE_CONTEXT]' — key word in [ACCENT_COLOR]."],
|
|
142
|
+
["VO", "'You\\'ve spent [AMOUNT] on [PRODUCT_CATEGORY]. [FAILURE_DETAIL]. You are just [FAILURE_OUTCOME].'"],
|
|
143
|
+
["Purpose", "Quantify the cost of the problem. Dollar amount makes the pain visceral. Villain inside the product = problem is IN the product, not the viewer."],
|
|
144
|
+
])
|
|
145
|
+
|
|
146
|
+
// Replicate for Agitation 2, 3, 4 — change villain, product, failure dimension
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## AI GENERATION PROMPT STUB
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
AGITATION [N]:
|
|
155
|
+
3D animated [PROBLEM_ENVIRONMENT]. New villain: [VILLAIN_N_TYPE] with expressive cartoon face ([EMOTION]) and small arms. Positioned in/near [FAILED_PRODUCT_N]. [ANIMAL/CHARACTER] nearby, still unhappy. Dark cool chaotic lighting — identical to previous agitation scenes. Villain ends scene still triumphant / problem unresolved. Karaoke text overlaid. 9:16. 12 seconds.
|
|
156
|
+
```
|
package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/bogo-meme-bookend.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Scene Module: BOGO + Meme Bookend Close
|
|
2
|
+
> ID: `bogo-meme-bookend`
|
|
3
|
+
> Type: cta (Scene 6 / final scene)
|
|
4
|
+
> Compatible Formats: `bedroom-minimic-talk`
|
|
5
|
+
> Timecode: 21–23s (in 23s format)
|
|
6
|
+
> Status: ✅ PROVEN — Solawave BOGO (Scene 6)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## WHAT IT DOES
|
|
11
|
+
|
|
12
|
+
The ad closes with two elements in rapid sequence: (1) the meme bookend — same character from Scene 1, now in an approving/satisfied state — and (2) a clean offer overlay with the BOGO/discount and landing page. The meme bookend is the emotional payoff: the journey from tired/frustrated to approved/satisfied, visualised in the same character.
|
|
13
|
+
|
|
14
|
+
**Why it works:** The meme bookend creates a narrative closure that feels earned, not manufactured. The viewer subconsciously tracks the character from Scene 1 (problem state) to Scene 6 (resolved state) — it's a micro-story arc in 2 seconds. The offer overlay follows immediately so the emotional high converts to action before the feeling fades. "link in bio" is the lowest-friction CTA on TikTok/Reels.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## VISUAL DIRECTION
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Opening (0.5–1s): Optional meme bookend
|
|
22
|
+
Same meme character from Scene 1, now in APPROVING / SATISFIED state.
|
|
23
|
+
e.g. D.W. Arthur meme — smiling version / "we did it" version
|
|
24
|
+
Overlaid on creator as in Scene 1 — creator's face visible above.
|
|
25
|
+
Duration: 0.5–1 second max. Blink-and-you-see-it.
|
|
26
|
+
|
|
27
|
+
Main CTA (1–1.5s): Creator on camera
|
|
28
|
+
Actor back on camera, energized. Mini-mic in one hand.
|
|
29
|
+
[PRODUCT_NAME] raised toward camera — [ACTIVE_STATE] facing lens.
|
|
30
|
+
Expression: warm, direct, genuine "you should do this" energy.
|
|
31
|
+
NOT a scripted-looking smile — real confidence.
|
|
32
|
+
|
|
33
|
+
Outro (0.5s): Offer graphic overlay
|
|
34
|
+
Clean graphic appears over or after creator:
|
|
35
|
+
Large: "[OFFER_TEXT]" — bold, brand primary or white on dark
|
|
36
|
+
Medium: "[LANDING_PAGE]"
|
|
37
|
+
Small: "Shop Now →" or "Link in bio →"
|
|
38
|
+
Optional strip: "Limited time | Results may vary"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## ON-SCREEN TEXT
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
OFFER_TEXT options (bold, large, centered):
|
|
47
|
+
"BUY 1 GET 1 FREE"
|
|
48
|
+
"[X]% OFF — TODAY ONLY"
|
|
49
|
+
"FREE [GIFT/TRIAL] WITH ORDER"
|
|
50
|
+
"LIMITED TIME OFFER"
|
|
51
|
+
|
|
52
|
+
LANDING_PAGE:
|
|
53
|
+
"[BRAND_SLUG].co" or full URL — white, smaller than offer text.
|
|
54
|
+
|
|
55
|
+
CTA BUTTON TEXT:
|
|
56
|
+
"Shop Now →"
|
|
57
|
+
"Link in bio →"
|
|
58
|
+
"Grab yours →"
|
|
59
|
+
|
|
60
|
+
COMPLIANCE STRIP (bottom, very small):
|
|
61
|
+
"Limited time offer | Results may vary"
|
|
62
|
+
Only include if making outcome claims elsewhere in the ad.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## ACTOR DIALOGUE
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Pattern: [offer text spoken directly] + [lowest-friction action]
|
|
71
|
+
|
|
72
|
+
Templates:
|
|
73
|
+
"[OFFER_TEXT] right now — link in bio."
|
|
74
|
+
"It's [OFFER_TEXT] right now. Link in bio, go."
|
|
75
|
+
"[OFFER_TEXT] at [LANDING_PAGE] — I'll link it."
|
|
76
|
+
"[OFFER_TEXT]. Link below."
|
|
77
|
+
|
|
78
|
+
Delivery: Direct, energetic, brief. Max 8 words. No explanation of the offer.
|
|
79
|
+
The viewer already knows what Solawave is — just close.
|
|
80
|
+
The meme bookend (if used) covers the one second before this line.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## OFFER TYPES THIS MODULE SUPPORTS
|
|
86
|
+
|
|
87
|
+
| Offer | CTA Text | Urgency Signal |
|
|
88
|
+
|-------|----------|----------------|
|
|
89
|
+
| Buy 1 Get 1 Free | "BUY 1 GET 1 FREE" | Default urgency inherent |
|
|
90
|
+
| % Discount | "[X]% OFF — TODAY ONLY" | "TODAY ONLY" adds scarcity |
|
|
91
|
+
| Free gift with order | "FREE [GIFT] WITH YOUR ORDER" | Limited supply implied |
|
|
92
|
+
| Bundle deal | "[BUNDLE NAME] — [PRICE]" | Value framing |
|
|
93
|
+
| Free trial | "TRY FREE — LINK IN BIO" | Risk-free conversion |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## MEME BOOKEND SELECTION
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Rule: Same meme character as Scene 1, emotional state FLIPPED.
|
|
101
|
+
Problem state in Scene 1 → Resolved/approving state in Scene 6.
|
|
102
|
+
|
|
103
|
+
Pairings:
|
|
104
|
+
Scene 1: D.W. (tired, dark circles) → Scene 6: D.W. (smiling, "old rebecca approves")
|
|
105
|
+
Scene 1: Crying meme → Scene 6: Same character happy/relieved
|
|
106
|
+
Scene 1: "this is fine" dog → Scene 6: Dog in better situation / unbothered
|
|
107
|
+
Scene 1: Sad Keanu → Scene 6: Content Keanu (rare but works)
|
|
108
|
+
Scene 1: "me after $300 on serums" → Scene 6: "me after [PRODUCT_NAME]" same format
|
|
109
|
+
|
|
110
|
+
If no meme was used in Scene 1: skip the bookend. Use creator-only CTA.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## BRAND-KIT PLACEHOLDERS
|
|
116
|
+
|
|
117
|
+
| Placeholder | Source | Example |
|
|
118
|
+
|-------------|--------|---------|
|
|
119
|
+
| `[OFFER_TEXT]` | `brand-kit.md → cta_offer` | "BUY 1 GET 1 FREE" |
|
|
120
|
+
| `[LANDING_PAGE]` | `brand-kit.md → landing_page` | "solawave.co" |
|
|
121
|
+
| `[PRODUCT_NAME]` | `brand-kit.md → primary_service` | "Solawave wand" |
|
|
122
|
+
| `[ACTIVE_STATE]` | Brief content | "red light glowing" |
|
|
123
|
+
| `[MEME_CHARACTER_RESOLVED]` | Matches Scene 1 meme | "D.W. from Arthur — smiling version" |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## JS STUB (sceneBlock row content)
|
|
128
|
+
|
|
129
|
+
```js
|
|
130
|
+
// Drop into sceneBlock() rows array for Scene 6
|
|
131
|
+
["Visual Direction", "Optional: [MEME_CHARACTER_RESOLVED] bookend overlaid 0.5–1s (same character as Scene 1, approving state).\n\nActor: mini-mic in hand, [PRODUCT_NAME] raised toward camera ([ACTIVE_STATE]). Warm energized expression.\n\nOutro graphic: '[OFFER_TEXT]' bold + '[LANDING_PAGE]' + 'Shop Now →'. Optional strip: 'Limited time | Results may vary'."],
|
|
132
|
+
["Actor Line", "'[OFFER_TEXT] right now — link in bio.'"],
|
|
133
|
+
["On-Screen Text", "'[OFFER_TEXT]' — large bold\n'[LANDING_PAGE]'\n'Shop Now →'\n(Optional: 'Limited time | Results may vary')"],
|
|
134
|
+
["Mirrors (muse)", "Meme bookend close mirrors muse's 'old rebecca approves' exit. Humor register stays through CTA — doesn't feel like an ad break.\n\nActor holding product up = muse holding products throughout."],
|
|
135
|
+
["Purpose", "Drive the one action: click the link. [OFFER] is the urgency mechanism. 2 seconds max — viewer already knows. Just close."],
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## AI GENERATION PROMPT STUB
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
Photoreal female creator, [AI_ACTOR_AGE], energized expression. Bedroom setting with slightly brighter warm light than previous scenes. Mini-mic in one hand, [PRODUCT_NAME] raised toward camera in other hand ([ACTIVE_STATE] facing lens). Warm, direct smile — genuine not performative. Optional opening 0.5s: [MEME_CHARACTER_RESOLVED] overlay (approving/satisfied version of Scene 1 meme). Transitions to clean offer graphic overlay: '[OFFER_TEXT]' bold + '[LANDING_PAGE]' + 'Shop Now →'. 9:16. 2 seconds.
|
|
144
|
+
```
|
package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/cta/guarantee-close.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Scene Module: Guarantee Calendar Close
|
|
2
|
+
> ID: `guarantee-close`
|
|
3
|
+
> Type: cta (Scene 9 / final scene)
|
|
4
|
+
> Compatible Formats: `villain-animation`
|
|
5
|
+
> Timecode: 92–98s (in 98s format)
|
|
6
|
+
> Status: ✅ PROVEN — Clarifion ODRx brief (Scene 9)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## WHAT IT DOES
|
|
11
|
+
|
|
12
|
+
Closes the ad with stacked product boxes, satisfied animals/characters, and a satisfaction guarantee badge. The guarantee is the final objection remover — it converts "this looks good but I'm not sure" into "what do I have to lose?" The bokeh/clean background isolates the product and the proof, removing all cognitive clutter before the ask.
|
|
13
|
+
|
|
14
|
+
**Why it works:** After 4 agitation scenes and a product reveal, the viewer wants the product but fears waste. The guarantee calendar (already seen in Scene 8 social proof) is called back here — but now it's in the context of the CTA, not just social proof. Stacked product boxes signal popularity and availability. Satisfied animals complete the emotional arc: problem → solution → peace.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## VISUAL DIRECTION
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Setting: Clean bokeh background. Soft warm out-of-focus environment.
|
|
22
|
+
No environment clutter — complete contrast to Scenes 1–5.
|
|
23
|
+
|
|
24
|
+
Products: [HERO_PRODUCT] × 1–3 boxes stacked or arranged.
|
|
25
|
+
Shows product packaging (box), not just the device.
|
|
26
|
+
Stacking implies popularity/bundle/value.
|
|
27
|
+
|
|
28
|
+
Animals/Characters: [ANIMAL/CHARACTER] present and visibly calm/happy.
|
|
29
|
+
Positioned near or beside the product stack.
|
|
30
|
+
This is the "everything is resolved" signal.
|
|
31
|
+
|
|
32
|
+
Badge: Satisfaction guarantee badge visible in corner or overlaid.
|
|
33
|
+
Shows [GUARANTEE_DAYS]-day guarantee explicitly.
|
|
34
|
+
|
|
35
|
+
Animation: Subtle particle or glow effect optional — aspirational, not distracting.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## ON-SCREEN TEXT
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Karaoke beats (continue word-by-word rhythm from throughout the ad):
|
|
44
|
+
"[SOCIAL_PROOF_NUMBER]" → "PARENTS/CUSTOMERS" → "ALREADY" → "[TRIED/TRUSTED]"
|
|
45
|
+
"[OFFER_TEXT]" → "FREE [BENEFIT]" → "IN [TIMEFRAME]"
|
|
46
|
+
"[GUARANTEE_DAYS] DAY" → "[GUARANTEE_TYPE]" → "GUARANTEED"
|
|
47
|
+
|
|
48
|
+
CTA overlay (final 2 seconds):
|
|
49
|
+
Line 1: "[OFFER_TEXT]" — large, bold
|
|
50
|
+
Line 2: "[LANDING_PAGE]"
|
|
51
|
+
Line 3: "Shop Now →" or "Order Today →"
|
|
52
|
+
Badge: "[GUARANTEE_DAYS]-Day Satisfaction Guarantee"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## ACTOR/VO DIALOGUE
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Pattern: [social proof number] + [offer] + [guarantee as risk-removal]
|
|
61
|
+
|
|
62
|
+
Full template:
|
|
63
|
+
"[NUMBER] [CUSTOMERS/PET PARENTS] already [trusted/tried] [PRODUCT_NAME].
|
|
64
|
+
[OFFER_TEXT]. And if it doesn't work — [GUARANTEE_DAYS]-day money back. Guaranteed."
|
|
65
|
+
|
|
66
|
+
Short template:
|
|
67
|
+
"[OFFER_TEXT] at [LANDING_PAGE]. [GUARANTEE_DAYS] days, money back. Try it."
|
|
68
|
+
|
|
69
|
+
Delivery: Confident, calm, direct. The VO has earned trust through the ad — no need to push.
|
|
70
|
+
"Guaranteed" is the last word heard — it neutralises the final hesitation.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## GUARANTEE CALIBRATION
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Match EXACTLY to brand-kit.md → compliance_notes and the actual guarantee offered.
|
|
79
|
+
|
|
80
|
+
Common guarantee periods:
|
|
81
|
+
30 days: Standard consumer product guarantee
|
|
82
|
+
60 days: Premium / higher-ticket product
|
|
83
|
+
90 days: Supplement category standard
|
|
84
|
+
|
|
85
|
+
Language compliance:
|
|
86
|
+
✅ "[N]-Day Satisfaction Guarantee"
|
|
87
|
+
✅ "[N]-Day Money Back Guarantee"
|
|
88
|
+
✅ "Try it risk-free for [N] days"
|
|
89
|
+
❌ "It will definitely work" — never
|
|
90
|
+
❌ "100% guaranteed results" — never (results may vary required)
|
|
91
|
+
|
|
92
|
+
Always verify against brand-kit.md → compliance_notes before finalizing.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## SOCIAL PROOF NUMBER
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Use a real number if available from brand assets.
|
|
101
|
+
If not available, use ranges: "thousands of" / "over 10,000" / "[X]K+ customers"
|
|
102
|
+
|
|
103
|
+
Sources to check:
|
|
104
|
+
- brand-kit.md → previous_ads / asset_links
|
|
105
|
+
- Brand website (review count, customer count)
|
|
106
|
+
- Instagram / TikTok (follower / engagement signal)
|
|
107
|
+
|
|
108
|
+
Never fabricate a specific number without brand confirmation.
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## BRAND-KIT PLACEHOLDERS
|
|
114
|
+
|
|
115
|
+
| Placeholder | Source | Example |
|
|
116
|
+
|-------------|--------|---------|
|
|
117
|
+
| `[HERO_PRODUCT]` | `brand-kit.md → primary_service` | "Clarifion ODRx" |
|
|
118
|
+
| `[ANIMAL/CHARACTER]` | Brief content | "happy cats" / "calm dog" |
|
|
119
|
+
| `[GUARANTEE_DAYS]` | `brand-kit.md → compliance_notes` | "30" / "60" |
|
|
120
|
+
| `[OFFER_TEXT]` | `brand-kit.md → cta_offer` | "Buy 1 Get 1 FREE" |
|
|
121
|
+
| `[LANDING_PAGE]` | `brand-kit.md → landing_page` | "info.clarifionodrx.com" |
|
|
122
|
+
| `[SOCIAL_PROOF_NUMBER]` | Brand research | "10,000+" / "thousands of" |
|
|
123
|
+
| `[BRAND_ACCENT_COLOR]` | `brand-kit.md → colors.secondary` | "2C7FF8" |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## JS STUB (sceneBlock row content)
|
|
128
|
+
|
|
129
|
+
```js
|
|
130
|
+
// Drop into sceneBlock() rows array for final CTA scene
|
|
131
|
+
["Visual Direction", "Bokeh/clean background. [HERO_PRODUCT] × 1–3 boxes stacked. [ANIMAL/CHARACTER] calm and happy nearby. Satisfaction guarantee badge visible. Subtle warm glow — aspirational, not clinical."],
|
|
132
|
+
["On-Screen Text", "Karaoke: '[SOCIAL_PROOF_NUMBER]' → 'ALREADY' → '[TRUSTED]'\n\nCTA overlay: '[OFFER_TEXT]' large bold + '[LANDING_PAGE]' + 'Shop Now →' + '[GUARANTEE_DAYS]-Day Satisfaction Guarantee' badge."],
|
|
133
|
+
["VO", "'[SOCIAL_PROOF_NUMBER] [customers] already [trusted] [PRODUCT_NAME]. [OFFER_TEXT]. [GUARANTEE_DAYS] days, money back. Guaranteed.'"],
|
|
134
|
+
["Purpose", "Remove the final objection: risk of waste. Guarantee converts hesitation to action. Stacked boxes = popularity signal."],
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## AI GENERATION PROMPT STUB
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
3D animated bokeh background — clean, warm, soft focus. [HERO_PRODUCT] boxes stacked in pyramid or neat stack (2–3 boxes, packaging visible). [ANIMAL/CHARACTER] seated calmly beside the stack — happy, peaceful expression. Satisfaction guarantee badge in lower corner. Warm aspirational lighting. Subtle particle glow effect optional. Karaoke text overlaid word-by-word. Final 2s: CTA overlay '[OFFER_TEXT]' + '[LANDING_PAGE]' + 'Shop Now →'. 9:16. 6 seconds.
|
|
143
|
+
```
|
package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/dollar-amount.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Scene Module: Dollar Amount Confession Hook
|
|
2
|
+
> ID: `dollar-amount`
|
|
3
|
+
> Type: hook (Scene 1)
|
|
4
|
+
> Compatible Formats: `bedroom-minimic-talk`, `villain-animation`
|
|
5
|
+
> Status: ✅ PROVEN — Solawave BOGO (Hook C)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## WHAT IT DOES
|
|
10
|
+
|
|
11
|
+
Opens with a specific dollar amount the viewer has already wasted on the category. No product shown. No solution yet. Just the number — and the frustration. The specificity of the dollar amount is what makes it land: "spent $300 on serums" is a receipt the viewer recognizes from their own life.
|
|
12
|
+
|
|
13
|
+
**Why it works:** Specificity creates credibility. "$300" is a real number that signals the creator has lived the same experience. Vague language ("I tried so many things") is forgettable. A dollar amount is a memory trigger. Works across all demographics — everyone has overspent on something that didn't work.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## VISUAL DIRECTION
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Frame: Creator at desk, mini-mic in hand. Leaning slightly toward camera.
|
|
21
|
+
No product shown. No meme overlay. Pure spoken confession.
|
|
22
|
+
Expression: slightly exasperated → resolving to knowing.
|
|
23
|
+
Lighting: Warm ambient bedroom. Consistent with rest of format.
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Variation: Text-over-shoulder stack**
|
|
27
|
+
Dollar amount and product list appear as stacked text overlaid beside the creator's face:
|
|
28
|
+
```
|
|
29
|
+
"$300 on serums ❌"
|
|
30
|
+
"$120 eye cream ❌"
|
|
31
|
+
"red light panel $600 ❌"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## ON-SCREEN TEXT
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Option A — Single stat:
|
|
40
|
+
"spent $[AMOUNT] on [CATEGORY]. still [PROBLEM]."
|
|
41
|
+
|
|
42
|
+
Option B — Stack:
|
|
43
|
+
"$[AMOUNT_1] on [PRODUCT_1] ❌"
|
|
44
|
+
"$[AMOUNT_2] on [PRODUCT_2] ❌"
|
|
45
|
+
"$[AMOUNT_3] on [PRODUCT_3] ❌"
|
|
46
|
+
|
|
47
|
+
Style: White text, black outline. Dollar amounts bolded.
|
|
48
|
+
❌ emoji optional — signals failure visually without words.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## ACTOR DIALOGUE
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Pattern: [dollar amount + category] + [the failure] + [discovery pivot]
|
|
57
|
+
|
|
58
|
+
Templates:
|
|
59
|
+
"I was that person. [AMOUNT] on [CATEGORY]. Zero results. Then I found this."
|
|
60
|
+
"Spent [AMOUNT] on [CATEGORY_PRODUCTS]. Nothing was working. Until [PRODUCT_NAME]."
|
|
61
|
+
"I did the [AMOUNT] routine. The whole thing. Didn't move the needle."
|
|
62
|
+
|
|
63
|
+
Delivery: Matter-of-fact. Not self-pitying. She's moved past it — this is the origin story.
|
|
64
|
+
Slight emphasis on the dollar amount.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## BRAND-KIT PLACEHOLDERS
|
|
70
|
+
|
|
71
|
+
| Placeholder | Source | Example |
|
|
72
|
+
|-------------|--------|---------|
|
|
73
|
+
| `[AMOUNT]` | Brief context / category research | "$300" / "$500" / "$150" |
|
|
74
|
+
| `[CATEGORY]` | `brand-kit.md → industry` | "serums" / "supplements" / "litter" |
|
|
75
|
+
| `[CATEGORY_PRODUCTS]` | Brief content | "serums, eye creams, sheet masks" |
|
|
76
|
+
| `[PROBLEM]` | `brand-kit.md → target_pain_point` | "still saw fine lines" |
|
|
77
|
+
| `[PRODUCT_NAME]` | `brand-kit.md → primary_service` | "Solawave" |
|
|
78
|
+
|
|
79
|
+
**Amount calibration by category:**
|
|
80
|
+
- Skincare/beauty: $150–$400
|
|
81
|
+
- Pet products: $200–$500
|
|
82
|
+
- Home devices: $300–$800
|
|
83
|
+
- Supplements: $100–$300
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## JS STUB (hookCard)
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
hookCard("C", "Dollar Amount Confession",
|
|
91
|
+
"VISUAL: Actor at desk, mini-mic in hand, leaning toward camera. No meme, no product. Pure confession.\n" +
|
|
92
|
+
"Optional: stacked text overlay beside face listing products + prices + ❌.\n\n" +
|
|
93
|
+
"ON-SCREEN TEXT: 'spent $[AMOUNT] on [CATEGORY]. still [PROBLEM].'\n\n" +
|
|
94
|
+
"ACTOR LINE: 'I was that person. [AMOUNT] on [CATEGORY_PRODUCTS]. Zero results. Then I found [PRODUCT_NAME].'\n\n" +
|
|
95
|
+
"NOTE: Dollar-amount specificity is the credibility signal. Pick an amount the target audience actually spends."
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## AI GENERATION PROMPT STUB
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
Photoreal female creator, [AI_ACTOR_AGE], natural look, warm skin tone. Bedroom desk. Silver mini-mic in hand, leaning slightly toward camera. Expression: slightly exasperated at first, resolving to knowing confidence. No meme overlay. Warm ambient light. Optional: stacked text overlaid beside face ('$[AMOUNT] on [PRODUCT] ❌'). Direct, candid delivery. 9:16. 3 seconds.
|
|
105
|
+
```
|
package/assets/worker-kits/creative-strategist-v1/templates/scene-modules/hooks/meme-overlay.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Scene Module: Meme Overlay Hook
|
|
2
|
+
> ID: `meme-overlay`
|
|
3
|
+
> Type: hook (Scene 1)
|
|
4
|
+
> Compatible Formats: `bedroom-minimic-talk`
|
|
5
|
+
> Status: ✅ PROVEN — Solawave BOGO (Hook A)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## WHAT IT DOES
|
|
10
|
+
|
|
11
|
+
Opens with a viral meme character overlaid on the creator's frame (lower 60% of screen). Creator's eyes are visible above the meme. The meme character expresses the target audience's pain state (tired, stressed, broke, defeated). The meme clears at ~2 seconds and the creator speaks — now the viewer is already emotionally calibrated.
|
|
12
|
+
|
|
13
|
+
**Why it works:** The meme is a pre-loaded emotional shorthand. The viewer sees "D.W. Arthur tired face" and instantly downloads 8 words of emotional context in 0.5 seconds. It also signals "this person has the same taste as me" — a micro-trust signal before any product is mentioned.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## VISUAL DIRECTION
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Frame: Creator at bedroom desk, mini-mic at chin level.
|
|
21
|
+
Meme: [MEME_CHARACTER] overlaid — fills lower 60% of frame.
|
|
22
|
+
Creator's eyes and forehead visible above.
|
|
23
|
+
Meme should match the pain state (tired = dark circles, broke = crying money, etc.)
|
|
24
|
+
Duration: 1.5–2 seconds of meme before it clears or fades.
|
|
25
|
+
Lighting: Warm ambient — bedroom or desk lamp.
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Meme selection guide:**
|
|
29
|
+
- Under-eye / tired skin → D.W. from Arthur (dark circles), "4am" memes
|
|
30
|
+
- Wasted money on skincare → Sad Keanu, Crying Jordan, "SPENT $300" text meme
|
|
31
|
+
- Feeling old → Miss Minutes, aging character memes
|
|
32
|
+
- Frustrated with solutions not working → "This is fine" dog, "I've tried everything" formats
|
|
33
|
+
- Skepticism → "well yes but actually no" meme, Pacha "ugh finally" reverse
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## ON-SCREEN TEXT
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Line 1: "[RELATABLE_PAIN_STATEMENT]"
|
|
41
|
+
e.g. "me looking at my forehead every morning"
|
|
42
|
+
e.g. "oh hey 4am its me"
|
|
43
|
+
e.g. "me after spending $300 on skincare"
|
|
44
|
+
|
|
45
|
+
Style: White text, black outline. Bold key words. Bottom third.
|
|
46
|
+
Timing: Text appears with meme, stays through creator's first spoken word.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## ACTOR DIALOGUE (spoken after meme clears)
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
Pattern: [acknowledgment of meme state] + [pivot to discovery]
|
|
55
|
+
|
|
56
|
+
Templates:
|
|
57
|
+
"ok but actually... I found something."
|
|
58
|
+
"real. and then I found [PRODUCT_NAME]."
|
|
59
|
+
"been that person. here's what actually worked."
|
|
60
|
+
"[laugh/exhale] — ok so this changed it."
|
|
61
|
+
|
|
62
|
+
Delivery: Casual, slightly conspiratorial. NOT an announcer voice.
|
|
63
|
+
Like texting a friend the thing that fixed it.
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## BRAND-KIT PLACEHOLDERS
|
|
69
|
+
|
|
70
|
+
| Placeholder | Source | Example |
|
|
71
|
+
|-------------|--------|---------|
|
|
72
|
+
| `[MEME_CHARACTER]` | User direction or brief | "D.W. from Arthur (tired face)" |
|
|
73
|
+
| `[RELATABLE_PAIN_STATEMENT]` | `brand-kit.md → target_pain_point` | "me looking at my forehead every morning" |
|
|
74
|
+
| `[PRODUCT_NAME]` | `brand-kit.md → primary_service` | "Solawave wand" |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## MUSE REFERENCE
|
|
79
|
+
|
|
80
|
+
Muse: @frankyshaw — frame_1s.jpg, frame_2s.jpg
|
|
81
|
+
Text: "oh hey 4am its me" + "getting five"
|
|
82
|
+
Meme: D.W. from Arthur (cartoon character with dark circles, tired expression)
|
|
83
|
+
Format: Meme overlay on creator's face. Eyes visible above. Mini-mic in hand.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## JS STUB (hookCard)
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
hookCard("A", "Tired Skin Meme — Direct Muse Mirror",
|
|
91
|
+
"VISUAL: [MEME_CHARACTER] overlaid on lower 60% of frame. Actor's eyes visible above. Mini-mic in hand.\n\n" +
|
|
92
|
+
"ON-SCREEN TEXT: '[RELATABLE_PAIN_STATEMENT]'\n\n" +
|
|
93
|
+
"ACTOR LINE (after meme clears): '[PIVOT_LINE_TO_PRODUCT]'\n\n" +
|
|
94
|
+
"NOTE: Direct mirror of muse format. Test first — highest muse fidelity."
|
|
95
|
+
)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## AI GENERATION PROMPT STUB
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Photoreal female creator, [AI_ACTOR_AGE], natural look, warm skin tone. Bedroom desk. Casual [OUTFIT]. Silver condenser mini-mic held at chin. [MEME_CHARACTER] overlay fills lower 60% of frame — creator's eyes and forehead visible above. She glances slightly downward at the meme, looks up with a knowing half-smile. Warm ambient light from left (bedside lamp). Handheld feel. Authentic TikTok creator bedroom aesthetic. 9:16. 3 seconds.
|
|
104
|
+
```
|