全部技能 / 设计 / frame-data-chart-nyt
设计 · nexu-io/html-anything

frame-data-chart-nyt

NYT-newsroom 排版 + 错峰揭示动画 + 编辑级图表 (折线/柱/范围带)

风险提醒:绿色 · 放心使用AI 侦查报告
作者 nexu-ioGitHub nexu-io/html-anything ↗Stars 8827许可 Apache-2.0(仓库根 LICENSE;GitHub API spdx_id=Apache-2.0)commit 553ed98c28
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

这个 skill 不是可执行程序,而是注入给本机 coding-agent CLI 的一段提示词:宿主取 SKILL.md 正文,前面压一段全站共享设计指令、后面接用户内容,拼成一条 prompt 交给已登录的 agent,再把 agent 的 stdout 当 HTML 取回。

next/src/lib/templates/shared.ts
【输入格式】: ${opts.format} 【用户内容】: ${opts.content}
注:拼装模板 = 共享指令 → skill 正文 → 输入格式 → 用户内容;web 端 /api/convert 走同一函数:prompt = assemblePrompt({ body: skill.body, content, format });

共享指令层(不属于任何单个 skill,但每个模板都被它压着)把输出钉成『自包含单文件 HTML』,并明令禁止 agent 使用 Write/Edit/Bash 等文件系统工具,HTML 直接以对话正文流式输出。

next/src/lib/templates/shared.ts
- **禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何 \`.html\` 文件里。前端直接捕获你的 stdout 文本, 文件落盘由前端负责。
注:这是本批 skill 能力边界的来源:产出物只是文本,落盘与渲染由宿主前端负责;该禁令是 prompt 软约束,不是沙箱硬隔离。

SKILL.md 之外还有一条『内容驱动数量』覆盖规则:模板里写的任何页数/帧数/卡片数一律视为参考下限,实际数量由用户内容决定——防止 agent 用模板数字压缩用户内容。

next/src/lib/templates/shared.ts
- 模板只定义"可用版面 / 风格 / 配色 / 字体 / 组件库", **不定义** slide / 帧 / 卡片 / section 的数量。
注:对 frame-* 单帧模板尤其关键:它把模板里的版面描述定性为『可复用版面池』而非产量上限。

加载约定是『一个 skill = 一个文件夹』:SKILL.md(YAML frontmatter 供选择器 + 正文即模板 prompt),可选 example.md(样本输入)与 example.html(可直接打开的预览样张);新增模板只需加目录,不改 TS 代码。

next/src/lib/templates/loader.ts
* SKILL.md — frontmatter (id, scenario, tags, …) + prompt body * example.md — (optional) sample input content * example.html — (optional) pre-rendered preview, shown inline in the picker
注:loader 的 loadSkillFromDir 只读这三类文件,没有其它资产装载通道——第二遍据此核对本 skill 的资产可达性。

选择链路(CLI 侧)是三级漏斗:关键词强信号(每命中 1 词 2 分,阈值 3)→ 退化为 tags/scenario 打分 → 仍无把握就把用户内容前 800 字交给本地 agent 做一句话分类。

cli/src/skills-matcher.ts
const CONFIDENCE_THRESHOLD = 3;
注:AI 兜底的 prompt 原文:const prompt = `请用一句话(不超过15个字)描述以下内容最像什么类型的文档,只需回答类型名称:

预览链路独立于生成:/api/templates/<id>/preview 把 example.html 原样以 text/html 返回给 iframe;前端 iframe 用 sandbox="allow-scripts allow-same-origin"。

next/src/components/preview-pane.tsx
sandbox="allow-scripts allow-same-origin"
注:路由注释:* Returns the skill's `example.html` verbatim so it can be loaded into an(宿主侧取舍:allow-scripts + allow-same-origin 组合下,预览页脚本可自行摘掉 sandbox)。

模板把『一段数据 → 一帧《纽约时报》专栏感图表』拆成固定版面:顶部 kicker(数据来源+类目)、一句从数据里提炼的结论标题、占画布 55-65% 的图表区、底部 source + footnote,并按 16:9 单帧交付。

next/src/lib/templates/skills/frame-data-chart-nyt/SKILL.md
【画布】1920×1080, 暖白底 `#f7f5ee` 或墨黑底 `#0e0e0e` 二选一; 文字色和背景相反。 【布局】 - **顶部 kicker** (11px uppercase letterspace 0.14em, 颜色 = accent 红 `#a91d1d` 或 mint `#5fb38a`): 数据来源 + 类目, 如 "GLOBAL · WEEKLY ACTIVE USERS · 2018–2026"。 - **大字标题** (Cheltenham / Playfair / Source Serif Pro, 5.6vw, italic 副标可选): 一句结论。**结论必须从用户数据中提炼**, 不是描述图。 - **图表区** (占画布 55-65%): - 折线: 1-2 条线, 主线 ink 实心 2.5px, 次线 dashed 1.5px; 数据点用 6px 实心圆; 关键点旁标注 `2024 · 412M` 黑色 mono 小字。 - 柱状: 全部 ink 单色或加 1 道 accent 高亮柱; 柱顶大数字; 柱底类目斜体 (Cheltenham italic)。 - 范围带 (range band): 浅灰填充 `#e6e2d2` 包络 + 中线 ink。 - **底部 source + footnote** (10px mono, opacity 0.6): "Source: 用户数据 · Chart by html-anything"。
注:kicker/结论标题/图表区/source 行的四段式,把新闻图表的阅读路径固定下来。

图表实现路线被限定为手写 SVG:明确禁止 chart.js / d3(除非 jsdelivr CDN 引入),并给出行数上限,避免生成一个重型图表工程。

next/src/lib/templates/skills/frame-data-chart-nyt/SKILL.md
- **绝不**: 使用 chart.js / d3 库 (除非 jsdelivr CDN 引入); 推荐手写 SVG, 不超过 80 行 inline。
注:分界线划得很硬:默认手写 SVG,库图表只是例外条款。

三种图型各自给规格:折线(1-2 条,主线 ink 2.5px 实心、次线 1.5px dashed、6px 实心圆数据点);柱状(单色或 1 道 accent 高亮 + 柱顶大数字 + 斜体类目);范围带(浅灰包络 + 中线)。

next/src/lib/templates/skills/frame-data-chart-nyt/SKILL.md
- 折线: 1-2 条线, 主线 ink 实心 2.5px, 次线 dashed 1.5px; 数据点用 6px 实心圆; 关键点旁标注 `2024 · 412M` 黑色 mono 小字。
注:三种图型各给线宽/点径/刻度规格,产出观感稳定。

动画纪律是错峰揭示:标题 0s、kicker 200ms、折线 stroke-dashoffset 1.2s ease-out(400ms 起)、数据标签每 100ms 依次出现,且可被 prefers-reduced-motion 关闭。

next/src/lib/templates/skills/frame-data-chart-nyt/SKILL.md
description: "NYT-newsroom 排版 + 错峰揭示动画 + 编辑级图表 (折线/柱/范围带)"
注:把动画顺序与时长写死,避免动画喧宾夺主。

数据真实性有退化规则:必须用用户数据;若输入只是文字结论,可估算坐标但必须标注 schematic;CSV/JSON 则直接绘制。

next/src/lib/templates/skills/frame-data-chart-nyt/SKILL.md
- 必须用用户提供的数据。如果输入是文本结论, 自动估算合理坐标 (但要标注 "schematic"); 如果是 CSV/JSON, 直接绘制。
注:schematic 标注是数据伦理条款:估算坐标必须自曝。

2核心能力

0116:9 单帧画布(1920×1080,暖白 #f7f5ee / 墨黑 #0e0e0e 二选一)
02编辑级图型规格:折线 / 柱状 / 范围带三选
03结论标题必须从数据中提炼(不是描述图)
04错峰揭示动画 + prefers-reduced-motion 降级
05数据标签的固定标注写法
06单主色 + 单 accent 色板(NYT red / 编辑 mint / 暖橙 三选一)
07禁项清单:grid 全屏铺线、阴影、3D 立体柱、emoji
08选择器关键词:chart / NYT / 数据图 / 新闻图表 / infographic

3外部依赖

类型依赖
networkGoogle Fonts(Source Serif Pro / IBM Plex Sans / IBM Plex Mono / Noto Sans SC,示例页实际引用)
networkTailwind Play CDN(共享指令强制;示例页亦引用)
networkjsdelivr CDN(仅出现在『禁止图表库』的例外条款,条件性、非默认路径)
networkhyperframes 目录页(frontmatter 出处标注,非运行时请求)

4风险提醒 风险提醒:绿色 · 放心使用

风险提醒:绿色 · 放心使用
  • 手写 SVG 的代价:无交互、无自适应,多序列大数据集全靠模型手算坐标,复杂数据易退化。 — SKILL.md 限制不超过 80 行 inline SVG
  • schematic 风险:输入只有一句文字结论时允许估算坐标,画面精确度是示意性的,误当真实数据会有误导。 — SKILL.md:自动估算合理坐标 (但要标注 "schematic")
  • 宿主侧:预览 iframe sandbox="allow-scripts allow-same-origin";生成物的动画脚本在预览环境权限宽松。 — sandbox="allow-scripts allow-same-origin"(next/src/components/preview-pane.tsx)
  • 注入面:用户数据(CSV/JSON 全文)被逐字拼进 prompt 交给本地 agent。 — assemblePrompt 末尾直接拼接【用户内容】
风险提醒:绿色,放心使用。判级对象是本 skill 自身目录(口径:照 SKILL.md 执行后实际会发生什么):SKILL.md 为纯指令文本,随附 example.md/example.html 是样本与预览样张,目录内无脚本、无运行时网络调用、无凭证读取、无 agent 侧文件写入;SKILL.md 也未点名任何外部生成/服务后端(对照 orange 先例 ai-image-generation / seedance:后者把素材送外部生成后端并消耗账号额度;本模板不产生素材外发)。不影响档位的说明项:目录内 example.html 会外链 cdn.tailwindcss.com 与 fonts.googleapis.com(批4 口径:example.html 外链属产物示例,不判级);共享指令层同样要求生成物在 head 里 CDN 引 Tailwind 与 Google Fonts(- 在 \`<head>\` 中通过 CDN 引入 Tailwind v3 Play (https://cdn.tailwindcss.com) 与所需的 Google Fonts。),那是宿主壳层行为。宿主背景(不计入档位,见 verdict.risks):预览 iframe sandbox="allow-scripts allow-same-origin";宿主以全权模式拉起 agent("bypassPermissions", / "--yolo",)。另注:SKILL.md:37 的 jsdelivr 只出现在『绝不使用 chart.js / d3(除非 jsdelivr CDN 引入)』的例外条款中,属条件性许可而非明确要求,故未升 🟡;hyperframes.heygen.com 为 frontmatter 出处标注(非运行时请求)。

5第二遍独立确认

  • [ok] 图型与动画规格 — 重读 SKILL.md 折线/柱状/范围带与『错峰揭示动画』两段,引用逐字一致。
  • [ok] 『不引图表库』结论 — 示例页仅一个 <script src="https://cdn.tailwindcss.com">,无 d3/chart.js 引用,与 SKILL.md 的手写 SVG 路线一致。
  • [ok] jsdelivr 条目定性 — source 中该词仅出现在 `- **绝不**: 使用 chart.js / d3 库 (除非 jsdelivr CDN 引入); 推荐手写 SVG, 不超过 80 行 inline。`(SKILL.md:37);按批4 口径(非明确强制)未升档,已在 deps/reason 标注。
  • [ok] 外部端点存在性 — example.html 实测命中 cdn.tailwindcss.com 与 fonts.googleapis.com;example_source_url 指向 heygen 的 hyperframes 目录页,仅作出处标注。
  • [ok] 数据真实性条款 — SKILL.md『必须用用户提供的数据…自动估算合理坐标 (但要标注 "schematic")』逐字复核通过。
  • [ok] 安全面 — skill 目录 3 个文件无自写脚本/凭证/写盘;示例页无 fetch、无表单外发。
  • [ok] meta 元数据 — GitHub API 实查 stars=8827、pushed_at=2026-09-15T03:36:24Z、license Apache-2.0。

6结论

  • 把编辑级图表的隐性经验写成硬规格(线宽、点径、tick 数、标注写法、source 行),出图观感稳定,接近新闻编辑室口径。
  • 『结论必须从数据中提炼』逼模型先做判断再画图,而不是给图起个名字。
  • 不引图表库、手写 SVG ≤80 行,单文件可双击打开、无构建、无依赖,适合当视频单帧或推文卡。
  • 动画有降级路径(prefers-reduced-motion 关闭),对无障碍与录屏场景友好。
  • 适合:适合把一段业务数据/结论做成视频单帧、推文卡、slide 封面;也适合需要 NYT 式克制排版的编辑部/品牌内容团队。无前端工程能力、要一帧出图的人收益最大。
    不适合:不适合需要交互式图表、下钻、实时更新的场景(模板禁用图表库);不适合超大数据集(手写 SVG 会崩);不适合要求像素级数据准确的场景——输入只有结论时它给的是 schematic。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-15
    方式 A · 人下载镜像包下载 frame-data-chart-nyt.tar.gz
    sha256: bb37abe4f6f66d85…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit 553ed98c28;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库nexu-io / nexu-io/html-anything
    Stars8827
    最近推送2026-09-15
    本 skill commit553ed98c28
    许可Apache-2.0(仓库根 LICENSE;GitHub API spdx_id=Apache-2.0)
    本站信息
    收录日期2026-09-06
    分类设计
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近