デザイン&モーション · nexu-io/html-anything

frame-data-chart-nyt

NYTニュースルーム組版 + 時差フェードインアニメーション + エディトリアル級チャート(折れ線/棒/レンジバンド)

L1 基本 · ソース登録のみV1 コミット固定Dual-pass Audit
Author nexu-ioGitHub nexu-io/html-anything ↗Stars 8827License Apache-2.0(仓库根 LICENSE;GitHub API spdx_id=Apache-2.0)Commit 553ed98c28
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

本スキルは実行可能プログラムではなく、ローカルの coding-agent CLI に注入されるプロンプトです。ホストが SKILL.md 本文を取得し、先頭にサイト共通デザイン指示を付加、末尾にユーザーコンテンツを結合して1つのプロンプトを生成し、ログイン済み agent に渡して stdout を HTML として受け取ります。

next/src/lib/templates/shared.ts
【输入格式】: ${opts.format} 【用户内容】: ${opts.content}
組み立てテンプレート = 共通指示 → スキル本文 → 入力フォーマット → ユーザーコンテンツ。Web側の /api/convert も同一関数を使用:prompt = assemblePrompt({ body: skill.body, content, format });

共通指示レイヤー(単一のスキルに属さず、全テンプレートの上に配置)が出力を「自己完結型シングルファイル HTML」に固定し、agent による Write/Edit/Bash などのファイルシステムツールの使用を明示的に禁止して、HTML を対話本文として直接ストリーミング出力させます。

next/src/lib/templates/shared.ts
- **禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何 \`.html\` 文件里。前端直接捕获你的 stdout 文本, 文件落盘由前端负责。
これが本バッチのスキルの能力境界の由来です。成果物はテキストに過ぎず、保存とレンダリングはホストのフロントエンドが担当します。この禁止令はプロンプトによるソフトな制約であり、サンドボックスのハードな隔離ではありません。

SKILL.md の外側に「コンテンツ駆動型数量」の上書きルールが存在します。テンプレートに記載されたページ数/フレーム数/カード数はすべて下限の目安とみなされ、実際の数量はユーザーコンテンツによって決定されます。これにより、agent がテンプレートの数値に合わせてユーザーコンテンツを圧縮するのを防ぎます。

next/src/lib/templates/shared.ts
- 模板只定义"可用版面 / 风格 / 配色 / 字体 / 组件库", **不定义** slide / 帧 / 卡片 / section 的数量。
特に frame-* シングルフレームテンプレートにおいて重要です。テンプレート内のレイアウト記述を上限ではなく「再利用可能なレイアウトプール」として定義します。

読み込み規約は「1スキル = 1フォルダ」です。SKILL.md(セレクター用 YAML frontmatter + テンプレートプロンプト本文)、任意の 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
ローダーの loadSkillFromDir はこれら3種類のファイルのみを読み込み、他のアセット読み込みルートはありません。2回目のチェックで本スキルのアセット到達可能性を確認する基準となります。

選択パイプライン(CLI側)は3段階のファネルです。キーワードによる強力なシグナル(1語一致ごとに2点、閾値3)→ tags/scenario によるスコアリングへフォールバック → それでも判定できない場合はユーザーコンテンツの先頭800文字をローカル agent に渡し、一言分類を実行します。

cli/src/skills-matcher.ts
const CONFIDENCE_THRESHOLD = 3;
AIフォールバックのプロンプト原文: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 の組み合わせにより、プレビューページのスクリプトが自らサンドボックスを解除可能です)。

テンプレートは「一連のデータ → ニューヨーク・タイムズ風コラム図表1フレーム」を固定レイアウトに分解します。上部 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 行の4段構成により、報道グラフィックの閲覧フローを固定化します。

チャートの実装方式は手書き 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 であり、ライブラリの使用は例外条項に過ぎません。

3種類のチャートタイプに個別の仕様を規定:折れ線(1〜2本、主線 ink 2.5px 実線、副線 1.5px dashed、6px 実心円データポイント)、棒グラフ(単色またはアクセント1色ハイライト + 柱頂部に大きな数値 + イタリック表記のカテゴリ)、レンジバンド(薄グレーの包絡線 + 中央線)。

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エディトリアル級のチャート仕様:折れ線 / 棒 / レンジバンドの3択
03結論見出しはデータから抽出必須(図の単なる説明は不可)
04時差フェードインアニメーション + prefers-reduced-motion フォールバック
05データラベルの固定注釈表記
06単一メインカラー + 単一アクセントのカラーパレット(NYT red / エディトリアル mint / ウォーム amber の3択)
07禁止事項リスト:画面全体のグリッド線、ドロップシャドウ、3D立体バー、絵文字
08セレクターキーワード:chart / NYT / 数据图 / 新闻图表 / infographic

3外部依存関係

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

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
自動ロード可能
管理者向け
ソースとバージョンの記録
判定根拠(ファイルパスと抜粋)
  • SKILL.md: 純粋なプロンプト指示およびルールテキストのみであり、スクリプト実行や外部影響はありません
監査ノート: 。評価対象は本スキル自身のディレクトリです(評価基準: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"、ホストは全権限モード("bypassPermissions", / "--yolo",)で agent を起動します。追記: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結論

  • エディトリアル図表の暗黙知を厳格な仕様(線幅、点径、目盛り数、注釈の記述法、source行)に落とし込み、ニュースルーム水準の安定した出力を実現。
  • 「結論はデータから抽出必須」というルールにより、モデルに図の名称を付けさせるのではなく、考察を行わせてから描画させます。
  • チャートライブラリ不使用、手書きSVG ≤80行、ダブルクリックで開ける単一ファイル、ビルド不要、依存関係なしで、動画の1フレームやツイートカードに最適。
  • アニメーションのフォールバック機構(prefers-reduced-motion による無効化)を備え、アクセシビリティや画面録画シナリオに配慮。
  • 最適な用途: ビジネスデータや結論を動画の1フレーム、ツイートカード、スライドの表紙に仕立てるのに最適。NYT風の抑制された組版を求める編集部やブランドコンテンツチームにも適しています。フロントエンド開発力を持たず、1フレームの出力を求めるユーザーに最大の価値を提供します。
    不向きな用途: インタラクティブなチャート、ドリルダウン、リアルタイム更新が必要なシーンには不向き(テンプレートでチャートライブラリを禁止)。極めて大規模なデータセットには不向き(手書きSVGが破綻)。ピクセル単位の厳密なデータ精度が要求されるシーンには不向き(結論のみ入力された場合は schematic を出力)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload frame-data-chart-nyt.tar.gz
    sha256: bb37abe4f6f66d85…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 553ed98c28.