# 🎬 Video Template — 30-Second Birthday Video

**Purpose:** Master template. Every name video follows this second-by-second structure. The name slot is the only thing that changes between videos.

**Output:** 30s MP4, 1920x1080, 30fps, H.264, ~10-15 MB

**Tone:** Bright, celebratory, kid-friendly but "Not made for kids" classified (per channel_plan.md § 4A — non-COPPA framing is a 10-20x RPM lever).

---

## Structure (30 seconds)

### 0:00–0:03 — HOOK (3 seconds)

| Element | Spec |
|---|---|
| **Visual** | Black/gradient fade-in. Tiny dots / sparkle particles. Luna's tail wags in from the right edge. |
| **Music** | Music start — upbeat, party-style, +2-3 keys. Drums hit at 0:01. |
| **Text on screen** | None yet (build suspense). |
| **Animation cue** | Sparkle particles converge to center, leaving a glow. |
| **SFX** | Tiny "pop" / chime at 0:02.5 as particles converge. |

**Why 3 seconds:** YouTube's algorithm rewards early retention. If we don't hook by 3s, viewer bounces. The sparkle → Luna reveal is a known kid-content hook pattern.

---

### 0:03–0:08 — NAME REVEAL (5 seconds)

| Element | Spec |
|---|---|
| **Visual** | Luna bounds to center, sits, looks up at camera. Behind her, the NAME explodes into frame as giant bubbly text. Slight bounce-in animation (3 frames scale 0% → 110% → 100%). |
| **Music** | Name chord hits at 0:03.5 — major key, bright. |
| **Text on screen** | `[NAME]` in 200pt bubbly font (Comic Neue, Fredoka, or Baloo), centered, multi-color outline (yellow fill, pink stroke). |
| **Animation cue** | Confetti burst behind the name at 0:04.5. Streamers fall for 2s. |
| **SFX** | Chime / bell — one clear note. Optional: synthesized voice says "[NAME]!" |
| **Music vocal cue** | First sung line begins: *"Happy birthday to you, happy birthday to you..."* |

**This is the money beat.** Every personalized birthday video MUST nail the name reveal — it's the moment the viewer is here for. Test 3-4 font + color combos in the first 5 videos and pick the winner based on CTR data.

---

### 0:08–0:22 — MESSAGE + SONG VERSE (14 seconds)

| Element | Spec |
|---|---|
| **Visual** | Luna dances (bouncing, spinning, jumping) against a scene background (balloons, party hats, cake). Scene rotates every 4s: balloons → cake → presents → outdoor (sky/grass). |
| **Music** | First chorus of birthday song plays through. Name appears 2 more times during this segment. |
| **Text on screen** | Lower-third lyric bar with karaoke-style highlight (current word in yellow, rest in white). Lyrics: *"Happy birthday dear [NAME], happy birthday to you!"* |
| **Animation cue** | At 0:12, scene crossfades to "cake" — candle flames flicker. At 0:16, scene crossfades to "presents" — wrapped boxes bounce. At 0:20, scene crossfades to "outdoor" — sky + clouds drift. |
| **SFX** | Background party ambience (faint crowd cheering, balloon pops, kids laughing — all subtle). |
| **Music vocal cue** | Sung name: *"Happy birthday dear [NAME]!"* at 0:11 (during "cake" scene). Sung name again at 0:18 (during "presents" scene). |

**Personalization lines overlay (one of three, picked at render time):**

> Line A (wonder): *"Today is YOUR day, [NAME]! You are [AGE] years old, and the world is celebrating YOU!"*
> Line B (love): *"[NAME], you make the world brighter. We love you to the moon and back!"*
> Line C (playful): *"Hip hip hooray for [NAME]! Time for cake, candles, and a whole lot of fun!"*

The line is voice-over or on-screen text (subtitled) — depends on whether we have a voice actor or TTS.

---

### 0:22–0:28 — BIRTHDAY WISH + SENDER (6 seconds)

| Element | Spec |
|---|---|
| **Visual** | Luna sits next to a giant birthday cake with [AGE] candles, all lit and flickering. Background softens (slight bokeh). |
| **Music** | Music softens to a tender bridge — minor key moment. |
| **Text on screen** | Two stacked lines: <br/>**Top:** *"Wishing you the happiest birthday, [NAME]!"* <br/>**Bottom:** *"With love from [SENDER NAME]"* (small italic) |
| **Animation cue** | At 0:25, all [AGE] candles blow out in one breath — small puff of smoke, then sparkles. |
| **SFX** | Soft "whoosh" as candles blow out. |
| **Music vocal cue** | Optional sung "[SENDER NAME] loves you!" at 0:26. |

**Sender slot:** This is the viral hook. Free version = "From Your Friends at Smart Stuff Studios." Paid custom version = the buyer's chosen name (drives the $20-50 commission).

---

### 0:28–0:30 — OUTRO (2 seconds)

| Element | Spec |
|---|---|
| **Visual** | Luna holds up a "Share this video!" sign with a paw pointing to the side (where the share/end-screen elements will appear). Channel logo bottom-right. |
| **Music** | Final chord — bright, resolved. |
| **Text on screen** | *"🎂 Happy Birthday! Share with a friend →"* + arrow pointing to right edge. |
| **Animation cue** | Logo fade-in. End-screen card slot appears. |
| **SFX** | Final bell chime. |

---

## Template Variables (one per video)

```yaml
NAME: "[child's name, capitalized]"
AGE: "[number]"
SENDER: "[default: 'Your Friends at Smart Stuff Studios']"
SCENE_THEME: "[balloons|cake|presents|outdoor|space|beach|zoo]"
SONG_STYLE: "[pop|country|lullaby|rock]"
LYRIC_VARIANT: "[A|B|C]"
COLOR_PALETTE: "[pink-blue|yellow-purple|red-green|rainbow]"
```

These 7 variables are the ONLY things that change between videos. Everything else is fixed template. This means each new video is a 30-second config edit + render, not a creative rebuild.

---

## Asset Layers Per Video

| Layer | Type | Source | Slot |
|---|---|---|---|
| Background scene | Static image (1920x1080) | MiniMax image_generate | Variable |
| Luna character | Animated PNG (Luna sprite, 5-frame walk cycle) | Pre-rendered, reused across videos | Fixed |
| Name text | Rendered text overlay | ffmpeg drawtext | Variable |
| Lyric bar | Rendered text overlay | ffmpeg drawtext | Variable |
| Party props (balloons, cake, presents) | PNG overlays | Stock or generated | Variable per scene |
| Music | 30s MP3 | Suno / MusicGen / stock | Variable per song_style |
| SFX | Layered WAV | Stock | Fixed |
| Confetti / sparkles | Pre-rendered transparent GIF | Fixed | Fixed |

---

## Render Pipeline (cron-driven, per `daily_workflow.md`)

1. Read config from `birthday_queue.json` (one entry per video)
2. Pull/generate background scene → `spreads/<NAME>_bg.png`
3. Pull Luna sprite + scene props → compose via ffmpeg
4. Burn name + lyric text → `out/<NAME>_video.mp4`
5. Generate thumbnail → `out/<NAME>_thumb.jpg`
6. Upload via `yt_batch_upload.py`

Estimated render time: 2-3 min per video on M-series Mac. Fully scriptable.

---

## Animation Cue Cheat Sheet (for editor)

| Cue | Effect | Frame timing |
|---|---|---|
| Sparkle converge | 12 particle dots → center | 0:00-0:02.5 (75 frames at 30fps) |
| Luna bounce-in | Scale 0% → 110% → 100% | 0:03-0:04.5 (45 frames) |
| Name pop | Scale + rotate -5° → 0° + bounce | 0:04-0:05 (30 frames) |
| Confetti burst | 30 streamers spawn + fall | 0:04.5-0:07 (75 frames) |
| Scene crossfade | Old scene fades + new scene fades in | 0:12, 0:16, 0:20 (8-frame crossfades) |
| Candles flicker | Flame opacity 0.8-1.0 loop | 0:22-0:25 (90 frames loop) |
| Candles blow-out | Flame scale → 0 + smoke puff | 0:25 (15 frames) |
| Logo fade-in | Opacity 0 → 1 | 0:29-0:30 (30 frames) |

---

## Why This Template Works (vs EpicHappyBirthdays)

| Theirs | Ours |
|---|---|
| ~60s videos | 30s — modern attention span, higher completion rate |
| Loud + chaotic rock vibe (single style) | Multi-style (pop/country/lullaby) per video |
| Stock character heads with rotating eyes | Luna — animated character with personality + brand |
| Generic text overlay | Lyric bar with karaoke highlight (proven retention) |
| Outro is just a logo | Outro has explicit "share this" CTA |
| No scene transitions | 3 scene crossfades per video — visual variety |
