Skip to content
Content
Skill

/designer

Read editor.md, editor.json, and analyst.json. Make data-driven creative visual decisions for every section — teaser, charts, images, videos, audio, maps, and interactive demos when they fit the data. Generate selected assets. No HTML. Outputs designer.json with des_xx IDs.

BOOST
From plugin
data2story-skill
15827 skills
Install
$ npx -y skills add QinghongLin/data2story-skill --skill designer --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/designer

Context preview

The summary Claude sees to decide when to auto-load this skill.

Read editor.md, editor.json, and analyst.json. Make data-driven creative visual decisions for every section — teaser, charts, images, videos, audio, maps, and interactive demos when they fit the data. Generate selected assets. No HTML. Outputs designer.json with des_xx IDs.

SKILL.md

designer.SKILL.md
name: designer
description: "Read editor.md, editor.json, and analyst.json. Make data-driven creative visual decisions for every section — teaser, charts, images, videos, audio, maps, and interactive demos when they fit the data. Generate selected assets. No HTML. Outputs designer.json with des_xx IDs."
argument-hint: [PROJECT_DIR]
allowed-tools: Bash(*), Read, Write, Glob

Designer

Your job is **creative visual thinking**. For every section of the blog, decide how to make the finding land in the most engaging, memorable way **based on the data's actual properties**. You do not write HTML — that is the Programmer's job.

Think like a creative director, not a developer. Your output is a precise visual brief that tells the Programmer exactly what to build. Do not satisfy a fixed media checklist. Let the data, story, and editorial rhythm determine whether each section needs a chart, image, video, audio, map, interactive, stat callout, instance, or text-only treatment.

> **Fast profile.** When `run_config.json` says `run_profile: "fast"`, design **charts + static images only** — no `text2video` / `image2video` / `text2music` generation, no animated hero (a static cover image is fine), and no cinematic scroll (those roles are skipped in fast). Charts plus a few license-clean / fetched (or a single generated) static images carry the page. The full five-channel multimedia brief below is the **premium** profile.

Setup

  • `PROJECT_DIR` = first argument
  • Resolve `SKILL_DIR` = the directory containing this `SKILL.md` (`.../skills/data2story-pro/designer`). Replace `SKILL_DIR` placeholders with the resolved, quoted path before running Bash. Do not hard-code machine-local paths.
  • Read `PROJECT_DIR/editor.md`, `PROJECT_DIR/editor.json`, `PROJECT_DIR/analyst.json`, and `PROJECT_DIR/scout.json` (if present) before doing anything
  • Read the shared design system in [`../../frontend-design-pro/`](../../frontend-design-pro/) (`SKILL.md` + `references/`) and choose a **theme** + component vocabulary for this story
  • Assets go in `PROJECT_DIR/assets/`
  • Output: `PROJECT_DIR/designer.json`

How to read the input files

  • **`editor.md`**: the prose document with section structure. Each section has an `edt_xx` ID, lists its evidence (`ana_xx`) and context (`det_xx`), and contains the verbatim text.
  • **`editor.json`**: machine-readable sections. Each `edt_xx` has `findings`, `chart_placeholder` (which ana_xx drives the chart), a typed `media_placeholder`, and `editorial_notes`.
  • **`analyst.json`**: items keyed by `ana_xx`. Each has `content`, `calculation`, and crucially **`data_table`** (chart-ready data) — review it to understand what data is available for each chart.

Tools

Media tools route through OpenRouter (`OPENROUTER_API_KEY` must be set): **text2image**, **text2video**, **image2video**, **text2music**, and **embeddings** — co-located under `SKILL_DIR/scripts/openrouter-*/`. Default models and exact invocations are in [`references/tools.json`](references/tools.json); full per-tool docs are each tool's own `SKILL.md` under `SKILL_DIR/scripts/openrouter-*/`. Use `image2video` to animate a strong still you already generated; `text2video` when motion itself is the point. For the **moving-hero / cinemagraph pipeline** (still → animate → upscale), the OpenRouter video-model facts (models are listed only via `GET /api/v1/videos/models`; duration is only 4/6/8; **Kling v3 std is the faces-safe model** — Veo/Wan refuse real faces, seedance moves the subject), and the AI-upscale recipe (Real-ESRGAN x4plus **4×→downscale**, avoid the 2× tile bug), read [`references/video_pipeline.json`](references/video_pipeline.json) before animating anything.

Step 1: Design the Hero (REQUIRED on every run)

The hero is the first thing the reader sees — before the headline, before any prose. It must create curiosity on its own. **A hero is REQUIRED on every run** — never `none`. You do not "choose one teaser type" freely; you **walk a recorded ladder** and take the first rung that the data and your verified assets actually support, then **record the chosen rung in a new `content.hero_strategy` field** on the hero item (so the gate and the Critic can see which path was taken and why):

1. **`interactive`** — an interactive hero, used **only when the centerpiece finding can be front-loaded** (the reader produces the hook in the first screen: a guess-then-reveal, a mini live recompute, a pick-your-side). Prefer this when the story's one contestable number can open the page without spoiling the rest. This is often the **best rung for a computational topic with no star entity** — e.g. "guess this year's inflation rate before we reveal it", a swing-the-vote recompute on an election margin, or a slider that re-runs a public-health projection — letting a sober numbers story lead with its hook instead of hunting for a face. 2. **`real_still`** — a **verified real-subject still, FETCHED not generated**: the Scout's `sct_` asset (license- + identity-checked in `scout.json`) or the Detective's `ref_` asset. Use this when a specific real subject (a real person, trophy, stadium, landmark) is the natural face of the story. **Never *generate* a recognizable real subject from scratch** (photoreal or illustration) — but **animating a FETCHED real photo into a subtle cinemagraph** (faces held within the warp guard, with proportionate disclosure) **is sanctioned**; see the real-subject rule in Step 3 and `topic_profile.ai_face_policy`. 3. **`abstract_still`** — an **abstract / atmospheric generated still** (`text2image`) with no specific real referent (a mood scene, texture, metaphor). This was the gold blog's choice (an empty floodlit pitch) — it carries **zero real-subject risk** and is always available as the floor of the ladder when rungs 1–2 don't fit.

**An animated cover is the DEFAULT; a static cover is only a recorded fallback.** The **Hero role** (a Designer-team member, Stage 4.6 — see Team coordination) OWNS

Read more
Ships withdata2story-skill

A data-journalist agent skill that turns any dataset into a verifiable, evidence-grounded multimodal story — a self-contained HTML article where every sentence traces back to the data or source that justifies it.

Get the whole plugin
Stats
158
Stars
23
Forks
Maintained
Maintenance
Python
Language
MIT
License
3mo ago
Last commit
5mo ago
Created
6d ago
Added

Repo: QinghongLin/data2story-skill

Other skills on data2story-skill.