Craft 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.

MITAuto-check: notesMedia & Creative

Install Hero

skills CLI
$ npx skills add QinghongLin/data2story-skill --skill hero -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install QinghongLin/data2story-skill hero --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/QinghongLin/data2story-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/data2story-pro/hero .claude/skills/hero && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
hero
GitHub stars
155
Token cost
~4.5k tokens
SKILL.md length
1,942 words
Files
3 (incl. references)
Skills in repo
31
Repo updated
First seen
Licence
MIT

At a glance

Craft 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.

  • Works in 3 steps: Resolve the source (the deterministic… → Render + optimize → Spec the on-page build (the Programmer…
  • Tasks that involve Motion graphics
  • SKILL.md covers Setup, When to run, Step 1 — Resolve the source… and Step 2 — Render + optimize, plus 4 more sections
  • Calls python3; needs OPENROUTER_API_KEY

What it does

Hero is an agent skill from QinghongLin/data2story-skill. Craft 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 hero video + its static furniture; the Interaction Engineer owns the pick-a-side overlay, the Cinematographer stages the cover as cin00. Reuses data-des=desherovideo (no new provenance prefix). Outputs hero.json + assets/teaser.webm +…

Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/hero_recipes.json` and `references/schema.json`).

It sits in Media & Creative, covering Motion graphics. It works with OpenRouter. The repository describes itself as: Data Journalist Agent: Transforming Data into Verifiable Multimodal Story. The licence is MIT.

When your agent uses it

  • Tasks that involve Motion graphics

Example prompts

  • “/hero”

Requirements

  • Python 3
  • A credential in OPENROUTER_API_KEY
  • Pre-approved tools (allowed-tools): Bash(*), Read, Write, Glob

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Resolve the source (the deterministic ladder)
  2. Render + optimize
  3. Spec the on-page build (the Programmer builds it; validate.py asserts it)

What it can do on your machine

Read from SKILL.md and the folder at commit 63a55c1. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash(*)
    • Read
    • Write
    • Glob

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OPENROUTER_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Hero loads about 4.5k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 137 tokens; SKILL.md has 1,942 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~137
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~13k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash(*), Read, Write, Glob

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from QinghongLin/data2story-skill at commit 63a55c1, republished under its MIT licence (© QinghongLin). 1,942 words, ~4,519 tokens.

Download SKILL.mdSave it as .claude/skills/hero/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
hero
description
Craft 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 hero video + its static furniture; the Interaction Engineer owns the pick-a-side overlay, the Cinematographer stages the cover as cin_00. Reuses data-des=des_hero_video (no new provenance prefix). Outputs hero.json + assets/teaser.webm + _web.mp4 + .jpg poster.
allowed-tools
Bash(*), Read, Write, Glob
argument-hint
[PROJECT_DIR]

Hero

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.

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.

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.

Setup

  • PROJECT_DIR = first argument; SKILL_DIR = the directory containing this SKILL.md (.../skills/data2story-pro/hero).
  • 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 (is_visual / tags — same classifier the Detective resolved).
  • 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).
  • Read references/hero_recipes.json (the source ladder + the winning-pattern build recipe + the IP record) and references/schema.json (the hero.json shape) before rendering.
  • Output: PROJECT_DIR/hero.json + assets → PROJECT_DIR/assets/teaser.webm + teaser_web.mp4 + teaser.jpg (poster). The hero IS the teaser section.

When to run

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.)

Step 1 — Resolve the source (the deterministic ladder)

Walk the rungs in 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:

  1. 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.
  2. Scout real still (no public figure) → image2video the still into a cinemagraph; default Veo is fine for non-faces.
  3. 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 (faces stay original pixels). Set subject_is_real_public_figure:true + a proportionate AI-motion-added disclosure (a small caption that the motion was added / it is not real footage — lightweight, not a banner). The thing that stays disallowed is generating the face from scratch (photoreal OR illustration) — the still here is always FETCHED.
  4. License-clean STOCK clip → a Scout sct_ kind:"video". R5 constraint: stock video isn't fetched today (fetch_stock.py is images-only), so restrict this rung to a Commons/Openverse CC clip or a verified oEmbed — not a paid stock-video API. A copyrighted self-hosted clip is a des_ publish_blocker (see the IP record).
  5. Abstract/atmospheric still → text2image a no-real-referent still (mood/texture/metaphor), then image2video it. The always-available floor that keeps even a sober cover moving.
  6. Static fallback (only) → ship the poster as a static <img>: kind:"image", assets.video_webm/_mp4 = null, with a recorded media_blocker. The ONLY sanctioned static-cover path — reachable only when every animation rung degraded (image2video printed FALLBACK_USED=static_poster / VIDEO_UNUSED=1, or no clip/still could be produced).

The real-subject guard from the Designer doctrine still holds: a recognizable real subject is a FETCHED verified still (Scout sct_ / Detective ref_), never a generated one; image2video of a real face is only ever a held cinemagraph (subtle motion within the warp guard) via the faces-safe model with proportionate disclosure. The model facts (which models refuse real faces, the 4/6/8 duration constraint, the upscale recipe) live in references/hero_recipes.json ip_record (and the Designer's video_pipeline.json).

Honor topic_profile.ai_face_policy (real-person subjects). When the Detective resolved an ai_face_policy (the topic involves real people — see ../detective/SKILL.md and ../references/topic_profile.json), it governs the cover. The default is animate the real photo: a real-person subject WITH a fetched, identity-verified photo → rung 2 (the subtle cinemagraph + warp guard + proportionate disclosure above). AI face is allowed-with-conditions, never blanket-banned here. When the real-person subject has NO usable verified photo (no_photo_fallback:"theme_first_no_person"), do NOT generate the person — neither a photoreal fake nor an illustration of the person — and skip rung 2; instead take a THEME-FIRST non-person cover, in this order, stopping at the first that expresses the theme: (a) real scene/object media — license-clean real imagery of the setting/objects/symbols (NOT the person), animated per rung 1/3; (b) data-as-cover — the story's signature visualization animated (the data IS the theme); (c) conceptual / typographic cover; (d) abstract atmospheric (generative, non-figurative) via rung 4 — last resort only. Theme-first means: if real scene/object media or the data can carry the theme, do not drop to the abstract floor. Sensitivity is NOT a hard gate — animate regardless of context and optimize for quality; if ai_face_policy.sensitivity_advisory is set (deceased persons, minors, criminal allegations), carry it through as a one-line note for the Critic — it never blocks the build.

Step 2 — Render + optimize

  • Animate with a motion-only prompt (describe only what moves: flags ripple, smoke drifts, floodlights flicker; subject and faces held still, no camera shake). The cover must read as ALIVE at a glance — never near-still. Require a clearly-visible PRIMARY motion + 1-2 strong SECONDARY motions. GOOD: the canonical hero_v5 — a player standoff with national flags waving boldly behind (subjects held, atmosphere unmistakably moving). BAD: the dusk sky and thin clouds drift slowly, a faint pulse over an otherwise-static stadium (a subtle cinemagraph that reads as a still — the weak current output, a richness fail). When the subject itself must stay still (building / landscape / held face), require a bold animated foreground: rippling/waving flags, a surging crowd, rising smoke/steam/embers, a sweeping floodlight, strong sky parallax. Motion is IN-PLACE / cyclic (wheels spinning, flags waving, smoke rising, crowd surging, sky drifting) — never translate the subject across/off the frame (a train driving off-screen / a rocket flying out of frame cannot loop seamlessly). Pick the concrete motion concept from references/hero_recipes.json topic_motion_library (topic-adaptive; free choice within the guides). Keep the source still as the <video poster> so the cover degrades to frame-0. Duration is one of 4 | 6 | 8 (the OpenRouter video endpoint accepts no other).
  • Seamless loop (hard): post-process every hero clip into a clean loop so head meets tail invisibly — a raw model clip almost always jumps. Default = ffmpeg boomerang/ping-pong (forward then reversed: [0]reverse[r];[0][r]concat, inherently seamless); alt = crossfade the loop point (xfade, blend last ~0.5s into first ~0.5s) when reverse looks unnatural. ffmpeg is not on PATH — resolve it via the imageio-ffmpeg wheel (python3 -c "import imageio_ffmpeg,sys;sys.stdout.write(imageio_ffmpeg.get_ffmpeg_exe())"), exactly as optimize_assets.py does. Record the technique in hero.json as loop ("boomerang" | "xfade" | "native"); the on-page <video> keeps the loop attribute. (The ffmpeg Ken-Burns fallback is already a boomerang.)
  • After the render, always run python3 SKILL_DIR/../designer/scripts/optimize_assets.py PROJECT_DIR/assets/ — it writes the VP9 .webm + H.264 _web.mp4 + poster and repoints filenames. Web-weight cover budget: < 3 MB. (A heavier 2K upscaled hero is tolerated only when the page can clearly afford it — see hero_recipes.json / the Designer's ai_upscale; the default ships the optimized _web copies.) Reference the _web copies in hero.assets.
  • Verify the files exist (ls -la PROJECT_DIR/assets/teaser.*). If image2video printed FALLBACK_USED=..., transcribe it into hero.source.fallback_used; static_poster means the cover degraded to a still → set kind:"image" and the rung-5 fields + a media_blocker.
Show full SKILL.md (598 more words)Show less

Step 3 — Spec the on-page build (the Programmer builds it; validate.py asserts it)

You spec this contract on the hero item; the Programmer builds it; do NOT edit the frozen verify engine — the .cin-stage wrapper makes the cover verify-immune with zero engine edits:

  • The cover is a <video webm+mp4+poster autoplay loop muted playsinline> (or a <img> on the rung-5 fallback), wrapped in .cin-stage — cinematic-ON it is the cin_00 layer of the live cinematic stage; cinematic-OFF a degenerate <div class="cin-stage hero-only-stage"> that still paints the poster as backdrop. Either way the existing isDecorative() (which excludes el.closest('.cin-stage')) auto-excludes the cover from Verify.
  • A reduced-motion <img> fallback (the poster) is always in the DOM; under prefers-reduced-motion / JS-off it shows and autoplay never fires. The <video> keeps autoplay muted loop playsinline (those attributes are correct — do not change them).
  • Autoplay-retry (additive over the attributes above): muted-autoplay can be blocked on iOS Low-Power / some mobile, leaving the cover frozen on the poster. So the Programmer also wires a JS video.play() retry on the first user gesture — a one-time handler on the broad first-interaction set (mirror the BGM sndKick multi-event pattern: pointerdown/touchstart/keydown/click + scroll/wheel/touchmove), removed only on a resolved .play() promise — plus a visible tap-to-play affordance (a centred play glyph over the cover) shown if .play() rejects. Skip the retry under prefers-reduced-motion.
  • A single .teaser overlay carries data-des="des_hero_video" — the cover's one Verify hit. Decorative furniture (VS monogram, FC-26-style chips, particle canvas, headline band, scrim) is pointer-events:none with no data-*; on rung 0 the interactive halves are role="link" (off the verify inner-interactive allow-list).
  • Reuse data-des="des_hero_video" — NO new provenance prefix is minted.

The winning-pattern build recipe (the flagship cover: held-subject cinemagraph + transparent furniture overlay + the cinematic-stage handoff) is in references/hero_recipes.json build_recipe.

Output — hero.json

Full schema in references/schema.json. hero is a single object (exactly one cover). Reuses data-des="des_hero_video" — no new prefix:

json
{
  "meta": { "role": "hero", "version": "1.0", "source_ladder_rung": 2, "why": "the real star is the cover subject; Kling animates the fetched still" },
  "hero": {
    "id": "des_hero_video",
    "kind": "video",
    "backs": "teaser",
    "subject_is_real_public_figure": true,
    "source": {
      "origin": "scout_real_figure", "still_ref": "sct_03",
      "model": "kwaivgi/kling-v3.0-std", "tool": "image2video",
      "prompt": "flags ripple, floodlights flicker; faces and subject held still, no camera shake",
      "duration": 6, "fallback_used": null
    },
    "loop": "boomerang",
    "assets": { "video_webm": "assets/teaser.webm", "video_mp4": "assets/teaser_web.mp4", "poster": "assets/teaser.jpg" },
    "reduced_motion_fallback": "assets/teaser.jpg",
    "furniture": { "headline_band": "Who wins 2026?", "kicker": "World Cup forecast",
                   "credit_line": "Photo: <author> / Wikimedia Commons (CC BY-SA 4.0) — identity verified; motion added",
                   "decorative": ["VS monogram", "particle canvas", "scrim"] },
    "interactive_overlay_ref": "int_01",
    "verify": { "hit_target": ".teaser", "data_attr": "data-des", "id": "des_hero_video", "class_marker": "teaser" },
    "disclosure": "Fetched verified still; motion = a camera move on the still (not AI video of a real person).",
    "publish_blocker": false,
    "ip_record_ref": "references/hero_recipes.json#ip_record"
  }
}

Team coordination

  • Interaction Engineer owns the pick-a-side overlay (int_01) when the Editor places the centerpiece on the teaser (rung 0); the Hero owns the video + static furniture and references it via interactive_overlay_ref. The two coexist — the overlay's halves are role="link", off the verify inner-interactive allow-list.
  • Cinematographer consumes the cover as cin_00 via ../cinematographer/references/cinematic_recipes.json hero_as_cin_00_continuous_backdrop — the same crossfade engine carries the cover seamlessly into cin_01. The hero's Verify hit stays on the .teaser overlay (data-des=des_hero_video), NOT on cin_00.
  • Designer hands over content.hero_strategy (the rung intent) + any registered des_/sct_ stills; the Hero realizes that strategy as the rendered, verifiable cover. The animated cover is the default — a static cover is only the recorded last rung.
  • Programmer builds the .cin-stage-wrapped <video>/<img> + the single .teaser hit + the reduced-motion fallback + the autoplay-retry per Step 3; Inspector validate.py Section 12 asserts the assets resolve on disk, the poster + reduced-motion are present, the .teaser carries data-des, the video sits inside a .cin-stage wrapper, hero.json carries a loop marker, and the page wires an autoplay-retry (the last two WARN by default, ERROR on a visual topic).

References

Done when the cover is a rendered, web-weight, animated <video> (or, only on the recorded last rung, a static <img> with a media_blocker), hero.json records the chosen ladder rung + the single data-des="des_hero_video" Verify hit, the assets resolve on disk, and the Programmer can wrap it in .cin-stage with a single .teaser provenance hit and a reduced-motion fallback.

© QinghongLin, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (references) in skills/data2story-pro/hero of QinghongLin/data2story-skill.

  • SKILL.md
  • references/hero_recipes.json
  • references/schema.json

Open the folder on GitHubat commit 63a55c1

Compare with similar skills

Hero next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Hero compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Hero this skillQinghongLin/data2story-skill155—~4.5kAutomated safety check: NotesMIT
HyperFrames Animationheygen-com/hyperframes60k3 repos~2.1kAutomated safety check: PassApache-2.0
Slack GIF Creatoranthropics/skills180k29 repos~2kAutomated safety check: PassApache-2.0
Stitch to Remotion Walkthrough Videosgoogle-labs-code/stitch-skills8.5k6 repos~3.2kAutomated safety check: NotesApache-2.0
Faceless Explainer Videoheygen-com/hyperframes60k3 repos~7.7kAutomated safety check: NotesApache-2.0
Video ShotcraftVincentwei1021/video-shotcraft11k—~2.6kAutomated safety check: PassApache-2.0

Similar skills

  • HyperFrames Animation

    heygen-com/hyperframes

    Collects motion rules, scene blueprints, transitions and runtime adapters for HyperFrames video compositions, with GSAP as the default animation runtime.

    60k GitHub starsUsed in 3 repos~2.1k tokens
    Media & CreativeAuto-check passed
  • Slack GIF Creator

    anthropics/skills

    Official

    Provides Slack size and frame limits, Python animation helpers and validators for building animated GIFs sized for emoji and messages.

    180k GitHub starsUsed in 29 repos~2k tokens
    Media & CreativeAuto-check passed
  • Stitch to Remotion Walkthrough Videos

    google-labs-code/stitch-skills

    Official

    Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.

    8.5k GitHub starsUsed in 6 repos~3.2k tokens
    Media & CreativeAuto-check: notes
  • Faceless Explainer Video

    heygen-com/hyperframes

    Turns an article, notes or a topic brief into an explainer video whose visuals are invented per scene, built frame by frame in HyperFrames with no footage.

    60k GitHub starsUsed in 3 repos~7.7k tokens
    Media & CreativeAuto-check: notes
  • Video Shotcraft

    Vincentwei1021/video-shotcraft

    Makes cinematic product videos with Remotion from shot recipe cards, a ready template, real page screenshots, camera moves and sound design, or builds a single animated shot.

    11k GitHub stars~2.6k tokensUpdated 5 days ago
    Media & CreativeAuto-check passed
  • Figma to HyperFrames

    heygen-com/hyperframes

    Imports Figma assets, brand tokens, components and motion into a HyperFrames video composition, using the Figma REST API with a connector or native export for shaders.

    60k GitHub starsUsed in 3 repos~4.5k tokens
    Media & CreativeAuto-check: notes

More from QinghongLin/data2story-skill

All 31 skills in this repo
  • Inspector

    QinghongLin/data2story-skill

    Run sentence-level traceability verification on a Data2Story blog (verify.py - verifier.json), then emit the in-page Inspector panel (the reader-facing runnable verifier) + the verify/ artifacts…

    155 GitHub stars~3.1k tokensUpdated 3 mo ago
    Auto-check: notes
  • Auditor

    QinghongLin/data2story-skill

    Audit a generated Data2Story blog for build correctness across ALL modalities by ACTUALLY RENDERING it in a real headless browser (when available) — catching blank/0-width charts, broken/oversized…

    155 GitHub stars~6.4k tokensUpdated 3 mo ago
    Auto-check: notes
  • Critic

    QinghongLin/data2story-skill

    Review a finished Data2Story blog against the 5 quality rubric dimensions (visualdesign, narrativepacing, datamethodtransparency, claimdataalignment, insightvalue), score each 1-7 with on-page…

    155 GitHub stars~4.7k tokensUpdated 3 mo ago
    Auto-check: notes
  • Detective

    QinghongLin/data2story-skill

    Research external context for a dataset — domain background, history, related studies, and why this data matters.

    155 GitHub stars~2.4k tokensUpdated 3 mo ago
    Auto-check: notes
  • Inspector

    QinghongLin/data2story-skill

    Run sentence-level traceability verification on a blog, then generate viewer.html with interactive evidence panel.

    155 GitHub stars~697 tokensUpdated 3 mo ago
    Auto-check: notes
  • Data2story Pro

    QinghongLin/data2story-skill

    A skill your agent uses to turn a dataset into a verifiable multimedia blog (a data story / data-driven article / interactive dashboard from a dataset).

    155 GitHub stars~14k tokensUpdated 3 mo ago
    Auto-check: notes

Works with

Questions about Hero

What does Hero do?

Craft 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. Hero is an agent skill from QinghongLin/data2story-skill. Craft 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.

When should I use Hero?

Hero fits situations like: tasks that involve Motion graphics.

How do I install Hero in Claude Code?

Run `npx skills add QinghongLin/data2story-skill --skill hero -a claude-code`. Or copy the skill folder (skills/data2story-pro/hero in QinghongLin/data2story-skill) into .claude/skills/hero in your project. Claude Code loads it when a task matches its description.

How do I install Hero in Codex?

Run `npx skills add QinghongLin/data2story-skill --skill hero -a codex`. Or copy the skill folder (skills/data2story-pro/hero in QinghongLin/data2story-skill) into .agents/skills/hero in your project. Codex loads it when a task matches its description.

Can I use Hero in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add QinghongLin/data2story-skill --skill hero -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hero, .gemini/skills/hero, .github/skills/hero and .opencode/skills/hero in your project.

What does Hero need to run?

Going by SKILL.md and its folder, Hero needs the command-line tools its instructions call (python3) and credentials named OPENROUTER_API_KEY. Our summary lists: Python 3; A credential in OPENROUTER_API_KEY. Its frontmatter pre-approves these tools: Bash(*), Read, Write, Glob.

Does Hero access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Hero safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Hero use?

Hero is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Hero use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.3k tokens, read only when the agent opens those files.

What are the alternatives to Hero?

Skills that share tags, products or a category with Hero: HyperFrames Animation (heygen-com/hyperframes, 60k stars), Slack GIF Creator (anthropics/skills, 180k stars), Stitch to Remotion Walkthrough Videos (google-labs-code/stitch-skills, 8.5k stars) and Faceless Explainer Video (heygen-com/hyperframes, 60k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Hero?

QinghongLin (a GitHub user) maintains it in QinghongLin/data2story-skill, which has 155 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on July 5, 2026.

Source: QinghongLin/data2story-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.