$npx -y skills add QinghongLin/data2story-skill --skill heroCraft the COVER — the one animated <video> hero that opens the page above the headline, built from a Scout-verified still (or an abstract generated still) via a deterministic source ladder. The cover is animated by DEFAULT; a static <img> is only the recorded last rung. Owns the
| 1 | # Hero |
| 2 | |
| 3 | > **Premium-profile stage.** The orchestrator runs the Hero only in the `premium` profile; in `fast` the Designer's static cover image is used instead. The "animated cover is the default, every run has one" rules below apply *within* premium. |
| 4 | |
| 5 | Your job is **the cover** — the first thing the reader sees, before the headline, before any prose. The cover is the most load-bearing detail of the whole page: it is the hook. **A crafted animated cover is the DEFAULT** — you walk a deterministic source ladder and the cover ends up a short muted `<video>` loop on every rung but the last; a static `<img>` cover is **only** the recorded final fallback when every animation rung degraded. |
| 6 | |
| 7 | You own the **hero video + its static furniture** (headline band, kicker, credit, decorative monogram/chips/particles/scrim). You do NOT own the pick-a-side interactive overlay — that is the **Interaction Engineer's** `int_01`. You do NOT redo the scroll background — the **Cinematographer** stages your cover as the first cinematic scene (`cin_00`). You realize the Designer's `content.hero_strategy` as a rendered, verifiable cover. |
| 8 | |
| 9 | ## Setup |
| 10 | - `PROJECT_DIR` = first argument; `SKILL_DIR` = the directory containing this `SKILL.md` (`.../skills/data2story-pro/hero`). |
| 11 | - Read: `editor.json` (`interactives.hero` — does the centerpiece front-load on the teaser?), `scout.json` (verified `sct_` stills / clips), `designer.json` (`content.hero_strategy` + any registered `des_` stills), `interaction.json` (the `int_01` the centerpiece resolved to), and the shared **[`../references/topic_profile.json`](../references/topic_profile.json)** (`is_visual` / `tags` — same classifier the Detective resolved). |
| 12 | - Reuse the Designer's media scripts: `image2video` (`SKILL_DIR/../designer/scripts/openrouter-image2video/scripts/generate_video_from_image.py`), `text2image` (`.../openrouter-text2image/...`), and `optimize_assets.py` (`SKILL_DIR/../designer/scripts/optimize_assets.py`). Generation routes through OpenRouter (`OPENROUTER_API_KEY` must be set). |
| 13 | - Read [`references/hero_recipes.json`](references/hero_recipes.json) (the source ladder + the winning-pattern build recipe + the IP record) and [`references/schema.json`](references/schema.json) (the `hero.json` shape) before rendering. |
| 14 | - Output: `PROJECT_DIR/hero.json` + assets → `PROJECT_DIR/assets/teaser.webm` + `teaser_web.mp4` + `teaser.jpg` (poster). The hero IS the `teaser` section. |
| 15 | |
| 16 | ## When to run |
| 17 | **Always** — every run has exactly one cover. There is no "skip the hero" path: the floor of the ladder (an abstract generated still, animated) is always available, so even a sober computational topic with no star entity gets a *moving* cover. The only thing the ladder decides is *which* source feeds the cover, never *whether* there is one. (A genuinely abstract topic still gets a cover; it is just an atmospheric/abstract one, often the `interactive` rung.) |
| 18 | |
| 19 | ## Step 1 — Resolve the source (the deterministic ladder) |
| 20 | Walk the rungs in [`references/hero_recipes.json`](references/hero_recipes.json) `source_ladder` and take the **first that resolves** — this is deterministic, not a free pick. Record the chosen rung in `meta.source_ladder_rung` + a one-line `meta.why`: |
| 21 | |
| 22 | 0. **Interactive-hero passthrough** — if `editor.json.interactives.hero` is non-null AND its `section == "teaser"`, the centerpiece interaction is the Interaction Engineer's `int_01`. Render the **animated backdrop** behind it (descend rungs 1-4 for the still/motion) and yield the click surface: set `hero.interactive_overlay_ref = "int_01"`. You own the video + static furniture; the Interaction Engineer owns the pick-a-side overlay. |
| 23 | 1. **Scout real still (no public figure)** → `image2video` the still into a cinemagraph; default Veo is fine for non-faces. |
| 24 | 2. **Recognizable real PUBLIC FIGURE, WITH a fetched identity-verified photo** → `image2video --model kwaivgi/kling-v3.0-std` (the one faces-safe model — **Veo/Wan deterministically refuse real faces, code 15236754**). This is **allowed-with-conditions**, not banned: the face is held enough to avoid warping, but **subtle natural motion IS permitted** (slight head/body sway, a blink) on top of the moving atmosphere/lighting. **Warp-quality guard:** reject any candidate where the face distorts → fall back to ffmpeg Ken-Burns + boomerang on the same still (f |