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

sprite-animation

ドット絵+キネティックタイポグラフィの解説フレーム、純粋なCSSループ、動画録画に対応

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

1仕組みと動作原理

本テンプレートは「フォルダ=テンプレート」構造における純粋なデータです。SKILL.md はセレクター用の YAML frontmatter と agent 向けレイアウト指示の本文で構成され、リポジトリはテンプレート個別のコードを持たず、テンプレートの追加=フォルダの追加となります。

next/src/lib/templates/loader.ts
SKILL.md — frontmatter (id, scenario, tags, …) + prompt body
loader.ts のファイル先頭コメントにディレクトリ規約が明記されています。frontmatter はプロセス内正規表現で解析され(YAML 依存関係なし)、本文はそのまま prompt body として取り出され、フロントエンドには渡されません(「Body is excluded so we can return the entire registry in one cheap fetch without shipping prompt text to the browser.」)。

ランタイム時、ホストが本テンプレートの本文を共有デザイン指示とユーザーコンテンツの間に挟み込んで1つのプロンプトを構築します。テンプレートの「知能」はこの自然言語のみに依存し、実行可能コードは含まれません。

next/src/lib/templates/shared.ts
return `${SHARED_DESIGN_DIRECTIVES} ${opts.body.trim()}
assemblePrompt の戻り値は「SHARED_DESIGN_DIRECTIVES + テンプレート本文 + 【入力形式】+【ユーザーコンテンツ】」です。共有セクション(同一ファイル内の SHARED_DESIGN_DIRECTIVES)は、単一ファイル HTML、Tailwind/フォント CDN、コンテンツ駆動の数量、ファイルシステムツールの使用禁止などの厳格な要件を担い、全テンプレート共通であり本テンプレート独自のものではありません。

ホストの /api/convert は本テンプレートをロードした後、これらのテキストをローカルでログイン済みの coding-agent CLI に渡し、stdout のみを HTML としてストリーミング回収します。テンプレート自体はネットワーク通信、認証情報取得、ファイル書き込みを行いません。

next/src/app/api/convert/route.ts
prompt = assemblePrompt({ body: skill.body, content, format });
同一ルートが続いて invokeAgent({ … }) を呼び出して CLI(claude / codex / cursor-agent など、ホストの PATH から検出)を起動します。これに付随する共有指示にも「**Write / Edit / MultiEdit / Bash / Create / ファイルシステムツールの使用を一切禁止**」と明記されています。

テンプレートに付属する example.html は「事前レンダリング済みサンプル」であり、プレビューAPIからそのまま出力されてセレクターやギャラリーの iframe に表示されます。テンプレートカードのプレビュー表示を担うのみで、コンテンツ生成には関与しません。

next/src/app/api/templates/[id]/preview/route.ts
Returns the skill's `example.html` verbatim so it can be loaded into an
プレビューは skill id ごとにキャッシュされます(Cache-Control: public, max-age=300)。フロントエンドはプレビューパネル内の iframe に sandbox="allow-scripts allow-same-origin" を付与しています(ホスト側の実装であり、本テンプレート側では制御不能)。

frontmatter のフィールドはセレクターのメタデータに1対1でマッピングされ(featured は全体ソート、recommended は上部「★ おすすめ」枠、example_* はサンプルカード文面を生成)、カテゴリやシナリオのフィルタリング表示位置を決定します。

next/src/lib/templates/loader.ts
if (typeof fm.featured === "number") meta.featured = fm.featured;
fmToMeta は category/scenario/aspectHint/tags を直接 SkillMeta に転記します。example ブロックは example_id または example.{md,html} が存在する場合に生成されます(id/name/format/tagline/desc + 任意の source)。これらのフィールドは表示とソートにのみ影響し、生成動作には影響しません。

本テンプレートの生成能力はすべて自身の本文によって担保されています。sprite-animation/SKILL.md はレイアウト、配色、フォント、コンテンツ規律のみを規定し、agent に対してツールの実行、API 取得、外部データ読み込みを指示する記述は一切ありません。

next/src/lib/templates/skills/sprite-animation/SKILL.md
【模板: 像素 / 8-bit 动画解说】
skill ディレクトリは計2〜3ファイル(SKILL.md + example.html[+ example.md])で構成され、scripts/references/データファイルは存在しません。example.html は同一テンプレートの手動作成サンプル成果物にすぎません(internal_assets を参照)。

教育系アニメーションの「1フレームポスター」を意図しており、JS を使わず純粋な CSS keyframes ループを用いることを明確に定めています。

next/src/lib/templates/skills/sprite-animation/SKILL.md
【意图】教育型动画的单帧海报, 纯 CSS keyframes 循环, 不用 JS。

画面構成はフルブリードのクリーム色ステージ、大きな年号/数字、中央のドット絵マスコット、キネティックな中・日ディスプレイ文字、下部の timeline ribbon のようにリスト化されています。

next/src/lib/templates/skills/sprite-animation/SKILL.md
【意图】教育型动画的单帧海报, 纯 CSS keyframes 循环, 不用 JS。 【布局】 - Full-bleed cream stage

JS 不使用は厳格な制約であり、アニメーションは @keyframes のみで実現されます。これにより、成果物をオフライン環境でダブルクリックして開くことや、直接画面録画することが可能です。

next/src/lib/templates/skills/sprite-animation/SKILL.md
- 动画用 @keyframes, 不依赖 JS

カラーパレットはレトロレッド、ベージュ、ダークグリーンの3色に限定され、「8-bit レトロ」の一貫したトーンを担保します。

next/src/lib/templates/skills/sprite-animation/SKILL.md
- 复古调色板: 红 / 米 / 墨绿

サンプル成果物は --pixel 変数で Press Start 2P ピクセルフォントを指定し、5箇所の @keyframes でループアニメーションを実装しています。

next/src/lib/templates/skills/sprite-animation/example.html
--pixel: 'Press Start 2P', monospace;

2コア機能

01純粋な CSS ループアニメーション(@keyframes 駆動、JS 不使用)
02ピクセル/8-bit ビジュアル(ピクセルフォント+ドット絵マスコット)
03フルブリードのクリーム色ステージ+特大の年号/数字
04キネティックな中国語/日本語ディスプレイ文字
05継続的にスクロールする下部 timeline ribbon(電光掲示板スタイル)
06レトロな3色パレット(レッド/ベージュ/ダークグリーン)
07サンプル成果物:任天堂1889年花札テーマのピクセル解説フレーム(インライン SVG 花札カード)

3外部依存関係

KindDependency / Endpoint
networkGoogle Fonts(仅出现在产物示例 example.html)
cli本地 coding-agent CLI(宿主提供,模板自身不调用)

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

安全運用のための推奨統制措置
Agent 向け
アクセス可能ドメインとキー範囲を宣言
管理者向け
最小権限のキー、リクエストログを保持
判定根拠(ファイルパスと抜粋)
  • 网络端点: 外部ネットワークアクセスの宣言: fonts.googleapis.com(example.html の <link>。プレビュー時にブラウザからフォントをリクエスト)
監査ノート: 判定対象=本 skill ディレクトリ(SKILL.md + example.html [+ example.md]):組み込みスクリプトなし、認証情報読み取りなし、ディスク書き込み指示なし、ランタイム時の外部エンドポイント要求なし。本文はレイアウト/配色/フォントファミリー名とコンテンツ規律のみを規定しており、フォントファミリー名は通信を発生させません。ディレクトリ内に実際に現れる外部リンクはすべて「成果物サンプル」に属し、内訳は以下の通りです:fonts.googleapis.com(example.html 9行目の <link>、Press Start 2P / DM Serif Display / IBM Plex Mono / Noto Serif JP)。なお、SVG の xmlns="http://www.w3.org/2000/svg" は XML 名前空間リテラルでありネットワーク通信は発生しません。第4バッチ基準(エンドポイントが成果物サンプル/引用元表記にのみ存在 → green)に基づき、判定区分には影響しません。ホスト側の動作(loader.ts のディスク読み込み、assemblePrompt のプロンプト構築、agents/invoke.ts によるローカル CLI 起動、プレビュー iframe の sandbox="allow-scripts allow-same-origin")は verdict.risks に記載し、区分判定の根拠とはしていません。

5二重目の独立検証

  • [ok] skill 目录的脚本 / 网络 / 凭证 / 写盘面 — 目录仅 SKILL.md / example.html 2 个文件,无 scripts/references/数据目录;token 扫描(curl / wget / fetch / exec / spawn / process.env / API_KEY / token / secret / write / save / delete)在该目录的 SKILL.md 中零命中;无自带可执行脚本。
  • [ok] 运行时链路复核 — 重读 loader.ts / shared.ts / app/api/convert/route.ts / app/api/templates/[id]/preview/route.ts:模板正文只作为 prompt body 被 assemblePrompt 拼装,宿主 spawn 本地 CLI 并捕获 stdout;模板不参与任何执行。
  • [ok] commit 与元数据 — 工作副本 git HEAD = 553ed98c283f9c0f489902d035416a972d6a9699(=任务表 pin 的 full 40 位);GitHub API nexu-io/html-anything:stars 8827、license spdx Apache-2.0、pushed_at 2026-09-15T03:36:24Z(与本地 HEAD 提交时间 2026-09-15 11:36:24 +0800 一致)。
  • [discrepancy] README 与源码的 frontmatter schema 漂移(仓库级) — README 第 213 / 217 / 468 行称模板 frontmatter 必须含 mode · scenario · surface · preview · design_system;但在 next/src/lib/templates/skills/ 下 '^mode:'、'^surface:'、'^design_system:' 全部零命中,实际字段是 category / scenario / aspect_hint / featured / recommended + example_*(loader.ts 的 SkillFrontmatter)。文档滞后于代码,不影响本模板运行,但照 README 新写模板会踩空。
  • [ok] frontmatter 元数据映射 — loader.ts fmToMeta 逐字段映射 zhName / enName / emoji / description / category / scenario / aspectHint / tags + featured / recommended + example 卡;本模板取自 SKILL.md 的实际取值与之相符。
  • [ok] 「不依赖 JS」自证 — example.html 内 <script> 零命中;动效由 5 处 @keyframes(blink/glitch/bob/kana-in 等)与 .ribbon 轨道动画实现,与正文 "- 动画用 @keyframes, 不依赖 JS" 一致。
  • [ok] 端点扫描(目录内) — 仅 1 个网络端点:fonts.googleapis.com(example.html 第 9 行);另出现 http://www.w3.org/2000/svg 仅为 SVG 命名空间字符串,不是可请求端点。
  • [ok] example.html 与 SKILL.md 的一致性 — 正文五条布局要素均可在示例定位:cream 舞台(--paper 变量)、大字(DM Serif Display 标题)、像素 mascot(内联 SVG 花札 sprite + Press Start 2P)、kinetic 字(kana-in 动画)、ribbon 走马灯。

6結論

  • 純粋な CSS アニメーションにより成果物はオフラインで使用可能、直接録画して動画素材として活用可能
  • ドット絵スタイルの視覚的アンカーが明確(Press Start 2P ピクセルフォント+インライン SVG スプライト)
  • レトロ3色パレットの制約により 8-bit の世界観を維持し、モデルによる余計な配色を防ぐ
  • 下部の timeline ribbon が「持続的な動き」の下地を提供し、単一フレームポスター特有の静止感を解消
  • 題材の提示が秀逸:直感に反する事実(任天堂が花札から始まった歴史)を用いて「1フレームで1つの事象を伝える」用途を体現
  • 最適な用途: 「1フレームで1つの事実を伝える」知識系ショート動画・教材アニメーション素材、レトロピクセル風ポスターやSNS画像に最適。JSライブラリを読み込まず純粋な CSS アニメーションテンプレートを求めるクリエイターにも適しています。
    不向きな用途: 厳密なタイムライン制御や複数フレームにわたるストーリーアニメーション(単一フレームループであり、タイムラインエディタではありません。README の Hyperframes にあるフレーム系テンプレートを参照)、詳細な絵コンテを必要とするプロジェクト、およびアクセシビリティ(減動効果対応の未宣言)が厳密に求められる用途には不向きです。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload sprite-animation.tar.gz
    sha256: 64e3233e393eadf6…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 553ed98c28.