# Module production shot plan

Auto-generated from `scripts/pipeline/configs/mod-XX.json`. Regenerate:

```powershell
node workshop-2026-v2/scripts/pipeline/build-module-configs.js
node workshop-2026-v2/scripts/pipeline/sync-config-durations.js
node workshop-2026-v2/scripts/pipeline/generate-shot-plan-doc.js
```

## Shot design rules

| Pattern | When to use | Example |
|---------|-------------|---------|
| **Single VO shot** | One speaker, one idea; ≤~35s speech | Sofia mentors (mod-02) |
| **VO + B-roll pair** | Viewer needs ~4s to absorb diagram/dashboard after VO | Architecture whiteboard → layer hold |
| **Split dialogue** | Two speakers with distinct reactions; avoid talking over visuals | Marcus concern → B-roll → Elena response (mod-03/04) |
| **Split long monologue** | One speaker >~40s or multiple visual topics | Priya dashboard tour (mod-07) |
| **Montage VO + montage B-roll** | Narrator lists steps; cards continue **6s** after VO ends | Pipeline montage (mod-02) |
| **Trainer pause cue** | **3s** on-screen prompt only — trainer presses **pause** for discussion/writing | mod-07 write + discussion; transition “Discuss:” lines |

**Two layers**:

1. **Narrative beat** — story unit in [animation-production-scripts.md](animation-production-scripts.md) (often 5–7 per module).
2. **Production shot** — one LibTV script row / one `videoDuration` clip (may be 2–3 shots per narrative beat).

---


## Story — Welcome & Setup

**File**: `media/modules/mod-00-welcome.mp4` · **Pipeline duration**: 3:11 · **Production shots**: 18

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 1 | 1 — The problem | VO | 15s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 2 | 1 — The problem | VO | 9s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 3 | 1 — The problem | VO | 12s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 4 | 2 — The guessing game | VO | 8s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 5 | 2 — The guessing game | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 6 | 3 — MHP arrives | VO | 19s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 7 | 3 — MHP arrives | VO | 22s | [elena] + [bob] + [sofia] | Split VO — two speakers or beats separated for pacing |
| 8 | 4 — Priya questions | VO | 15s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 9 | 4 — Priya questions | VO | 12s | [james] | VO single shot — one narrative beat, dialogue fits one clip |
| 10 | 4 — Priya questions | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 11 | 5 — Medallion preview | VO | 20s | [elena] + [narrator] | Split VO — two speakers or beats separated for pacing |
| 12 | 5 — Medallion preview | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 13 | 5 — Medallion preview | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 14 | 6 — Tools ahead | VO | 15s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 15 | 6 — Tools ahead | VO | 7s | [bob] | VO single shot — one narrative beat, dialogue fits one clip |
| 16 | 7 — Call to action | VO | 13s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 17 | 7 — Call to action | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 18 | 7 — Call to action | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |

**Summary**: 12 VO shots, 6 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-00.json` · **Master prompt**: `prompts/mod-00-master.txt`

## Module 01 — Data Engineering Fundamentals

**File**: `media/modules/mod-01-fundamentals.mp4` · **Pipeline duration**: 2:45 · **Production shots**: 14

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 1 | 1 — Architecture first | VO | 25s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 2 | 1 — Architecture first | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 3 | 2 — ETL vs ELT | VO | 20s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 4 | 2 — ETL vs ELT | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 5 | 2 — ETL vs ELT (dataset) | VO | 12s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 6 | 2 — ETL vs ELT (dataset) | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 7 | 3 — Priya waits | VO | 19s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 8 | 3 — Priya waits | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 9 | 3 — Priya waits (James) | VO | 14s | [james] | VO single shot — one narrative beat, dialogue fits one clip |
| 10 | 4 — Tool landscape | VO | 21s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 11 | 4 — Tool landscape | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 12 | 4 — Tool landscape (Bob) | VO | 12s | [bob] | VO single shot — one narrative beat, dialogue fits one clip |
| 13 | Transition | VO | 18s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 14 | Transition — chapter card hold | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |

**Summary**: 8 VO shots, 6 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-01.json` · **Master prompt**: `prompts/mod-01-master.txt`

## Module 02 — Databricks Pipeline

**File**: `media/modules/mod-02-databricks.mp4` · **Pipeline duration**: 1:50 · **Production shots**: 8

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 1 | Bob's pitch | VO | 25s | [bob] + [elena] | Split VO — two speakers or beats separated for pacing |
| 2 | Bob's pitch — meeting hold | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 3 | Sofia mentors | VO | 15s | [sofia] | VO single shot — one narrative beat, dialogue fits one clip |
| 4 | 3 — Pipeline montage | VO | 19s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 5 | 3 — Pipeline montage | B-roll | 6s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 6 | 3 — Pipeline montage (punchline) | VO | 7s | [bob] | VO single shot — one narrative beat, dialogue fits one clip |
| 7 | Priya's Overview page | VO | 18s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 8 | Transition | VO | 16s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |

**Summary**: 6 VO shots, 2 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-02.json` · **Master prompt**: `prompts/mod-02-master.txt`

## Module 03 — Snowflake Pipeline

**File**: `media/modules/mod-03-snowflake.mp4` · **Pipeline duration**: 1:38 · **Production shots**: 6

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 1 | 1 — Marcus pushes back | VO | 20s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 2 | 1 — Marcus pushes back (response) | VO | 12s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 3 | Same KPIs, new engine | VO | 24s | [narrator] + [bob] | Split VO — two speakers or beats separated for pacing |
| 4 | Snowflake montage | VO | 12s | [sofia] | VO single shot — one narrative beat, dialogue fits one clip |
| 5 | Priya's Map page | VO | 15s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 6 | Transition | VO | 15s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |

**Summary**: 6 VO shots, 0 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-03.json` · **Master prompt**: `prompts/mod-03-master.txt`

## Module 04 — dbt Pipeline

**File**: `media/modules/mod-04-dbt.mp4` · **Pipeline duration**: 1:51 · **Production shots**: 7

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 1 | 1 — Audit requirement | VO | 20s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 2 | 1 — Audit requirement (dbt answer) | VO | 19s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 3 | 2 — dbt lineage | VO | 17s | [bob] | VO single shot — one narrative beat, dialogue fits one clip |
| 4 | 2 — dbt lineage (tagline) | VO | 6s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 5 | Priya's revenue & quality pages | VO | 19s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 6 | Portability note | VO | 12s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 7 | Transition | VO | 18s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |

**Summary**: 7 VO shots, 0 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-04.json` · **Master prompt**: `prompts/mod-04-master.txt`

## Module 05 — Production Patterns

**File**: `media/modules/mod-05-production.mp4` · **Pipeline duration**: 1:19 · **Production shots**: 8

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 1 | 1 — The nightly question | VO | 18s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 2 | 1 — The nightly question | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 3 | 1 — The nightly question (Marcus) | VO | 7s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 4 | 2 — Platform patterns | VO | 17s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 5 | 2 — Platform patterns | B-roll | 4s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 6 | 2 — Platform patterns (punchline) | VO | 9s | [bob] | VO single shot — one narrative beat, dialogue fits one clip |
| 7 | 3 — Transition | VO | 14s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 8 | 3 — Transition | B-roll | 6s | — | B-roll hold — silent visual digest after prior VO (~4s) |

**Summary**: 5 VO shots, 3 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-05.json` · **Master prompt**: `prompts/mod-05-master.txt`

## Module 06 — AI Features

**File**: `media/modules/mod-06-ai.mp4` · **Pipeline duration**: 1:20 · **Production shots**: 6

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 1 | 1 — Marcus AI question | VO | 17s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 2 | 1 — Marcus AI question (Elena) | VO | 9s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 3 | 2 — AI demos | VO | 11s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 4 | 2 — AI demos (validation) | VO | 12s | [james] | VO single shot — one narrative beat, dialogue fits one clip |
| 5 | 2 — AI demos (governed stack) | VO | 13s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 6 | Transition | VO | 18s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |

**Summary**: 6 VO shots, 0 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-06.json` · **Master prompt**: `prompts/mod-06-master.txt`

## Module 07 — Dashboard Payoff & Tool Choice

**File**: `media/modules/mod-07-wrapup.mp4` · **Pipeline duration**: 2:32 · **Production shots**: 14

| Shot | Narrative beat | Type | Dur | VO | Strategy |
|------|----------------|------|-----|-----|----------|
| 0 | Time jump | VO | 15s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 1 | 1 — Full dashboard (part 1) | VO | 12s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 2 | 1 — Full dashboard (part 2) | VO | 15s | [priya] | VO single shot — one narrative beat, dialogue fits one clip |
| 3 | 1 — Full dashboard (reaction) | VO | 10s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 4 | 2 — Production question | VO | 15s | [marcus] | VO single shot — one narrative beat, dialogue fits one clip |
| 5 | 2 — Production question (Elena) | VO | 12s | [elena] | VO single shot — one narrative beat, dialogue fits one clip |
| 6 | Recap montage | VO | 15s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 7 | Recap montage — flashback hold | B-roll | 6s | — | B-roll hold — silent visual digest after prior VO (~4s) |
| 8 | Silent prompt | VO | 12s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 9 | 4 — Silent prompt (write time) | B-roll | 3s | — | Trainer pause cue — ~3s on-screen prompt; facilitator pauses playback for discussion/writing |
| 10 | Open discussion | VO | 14s | [narrator] | VO single shot — one narrative beat, dialogue fits one clip |
| 11 | Open discussion — whiteboard hold | B-roll | 3s | — | Trainer pause cue — ~3s on-screen prompt; facilitator pauses playback for discussion/writing |
| 12 | Closing | VO | 14s | [elena] + [narrator] | Split VO — two speakers or beats separated for pacing |
| 13 | 6 — Closing (cards) | B-roll | 6s | — | B-roll hold — silent visual digest after prior VO (~4s) |

**Summary**: 10 VO shots, 4 B-roll holds. Estimated speech must fit within each VO shot (`videoDuration ≥ minRequired`).

**Canonical config**: `scripts/pipeline/configs/mod-07.json` · **Master prompt**: `prompts/mod-07-master.txt`
