{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "motion-graphics",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "network",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "sandbox_recommended",
      "graded_authorization"
    ],
    "admin": [
      "approval_process",
      "rollback_support",
      "full_audit"
    ]
  },
  "evidence": [
    {
      "file": "scripts/",
      "summary": "Local script and command execution: node grounding/locate.mjs overlay|region|final|mark|auto <img> ... (ffmpeg/ffprobe)"
    },
    {
      "file": "网络端点",
      "summary": "Declared external network access: https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact generation: videos/<project>/hyperframes.json, context.log, shot-plan.json (IR), composition.html"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查（换角度抓第一遍的错）：① 全量文件清单（含隐藏）核对：23 个文件 = SKILL.md + 3 个 agents + 10 个 categories（含 bake-basemap.mjs）+ grounding/{PROTOCOL.md, locate.mjs} + references/{motion-vocabulary, shot-plan-ir, builder-contract} + catalog-map.md + phases/source/guide.md + 1 个 samples html，与 skills-manifest.json 的 files=23 一致。② token 扫描（URL / fetch / process.env / child_process / writeFile / API_KEY|TOKEN|SECRET|.env）：URL 命中 9 处，逐条打开确认来源为 locate.mjs 的 Gemini 端点、bake-basemap.mjs 的瓦片/CDN 供应商、samples HTML 的 gsap CDN；fetch 命中 2 处（locate.mjs 的 await fetch、bake-basemap.mjs 的 world-atlas 拉取）；process.env 命中 17 处（GEMINI_API_KEY、CHROME、NAME/STYLE/CENTER/ZSTART/ZEND/PITCH/BEARING/FPS/DUR 等）；child_process 命中 8 处（ffmpeg/ffprobe/base64/spawnSync）。③ 逐个打开脚本核对调用点真实存在（非文档推测）：locate.mjs 的 key 读取与 URL 拼接、bake-basemap.mjs 的 resolveChrome 与瓦片常量、PROTOCOL.md 的网格循环四步。④ 数字类声明实测：PROTOCOL.md 称弱视觉模型直接回归坐标 ~16–24% 中心误差、本协议 ~3–4%（后者改为 2.3% 无更差案例）——这是文档自述的测量值，源码内无法复算，按要求不改写也不当作已验证事实（记为文档声明）。⑤ 功能声明 vs 实际能力：description 列出的 9 类用途与 categories/ 下 10 个 module.md 基本一一对应（kinetic-type/stat/charts/logo-reveal/lower-thirds/maps 六类形式 + webpage/news/tweet/asset-fusion 四类搜索驱动），无夸大；description 里 'Usually under 10s (up to ~30s)' 与 SKILL.md 的自主化理由（短片不值得开故事板）一致。⑥ 与同批 skill 的差异：本 skill 是唯一自带『平台前提』段落（macOS Apple Silicon 或 Linux x64 + brew install node ffmpeg + PRODUCER_BROWSER_GPU_MODE=hardware）与唯一自带 maintainers 专段的 skill，已在 traits 记录。",
    "second_pass": [
      {
        "item": "GEMINI_API_KEY 是否真的被读取并外发（橙档判定的关键证据）",
        "status": "ok",
        "detail": "locate.mjs:192 `const key = process.env.GEMINI_API_KEY;`；紧接着 key 缺失即报错退出（'auto needs GEMINI_API_KEY; use the grid loop instead (overlay→region→final→mark)'）；存在时把 base64 图像与目标描述 POST 到 generativelanguage.googleapis.com（`?key=${key}`）。调用点真实存在，且仅在 `auto` 子命令触发。"
      },
      {
        "item": "『不假设有检测器』的守卫是否真的生效（避免第一遍误判为『总是联网』）",
        "status": "ok",
        "detail": "PROTOCOL.md 明写 '**Never assume the key exists.** No key → path 2.'，且把网格循环列为『the normal case』；SKILL.md 的可选键表也把 GEMINI_API_KEY 标为 optional 并给出 fallback（skip generate / search-only）。因此网络外发是有条件、可预期的，而非默认路径。"
      },
      {
        "item": "Step 2 引用的 resolve.mjs 是否随包分发",
        "status": "discrepancy",
        "detail": "SKILL.md Step 2 给出 `(cd \"$PROJECT_DIR\" && node <SKILL_DIR>/phases/source/resolve.mjs --plan ./shot-plan.json --out ./assets)`，但 **phases/source/ 下只有 guide.md，没有 resolve.mjs**（全量文件清单已确认）。guide.md 末尾也标了 '> Illustrative: … — or drive media-use's `resolve` procedure directly.'。结论：该命令是示意而非可执行入口，实际取材须由 /media-use 的 resolve 流程驱动；SKILL.md 自身有 'illustrative' 标注，故不算虚假声明，但读者若照抄命令会直接失败——这是对 pin commit 有效的真实出入。"
      },
      {
        "item": "底图烘焙是否真是本地行为而非渲染期联网",
        "status": "ok",
        "detail": "bake-basemap.mjs 头注释与实现一致：在无头 Chrome 内加载 MapLibre + 瓦片，录帧到 frames-<NAME>/，导出 coords.json；SKILL.md 只在该分类下引用它。渲染期（hyperframes render）不触发任何取瓦片行为，符合 HF 的『渲染期禁网』契约——这也是文档给出的烘焙理由，自洽。"
      },
      {
        "item": "『外部资源』逐条回查调用点",
        "status": "ok",
        "detail": "hyperframes init/doctor/add/lint/check/snapshot/preview/render 均在 SKILL.md 出现；ffmpeg/ffprobe 在 locate.mjs 与 bake-basemap.mjs 的 execFileSync/spawnSync 可验；瓦片 URL 与 CDN 在 bake-basemap.mjs:106-119 与 :153 原文；gsap CDN 在 samples HTML 原文；media-use resolve 在 guide.md 原文。"
      },
      {
        "item": "验证：视觉定位协议的准确率声明是否可在源码内定位",
        "status": "unlocatable",
        "detail": "PROTOCOL.md 给出的误差数字（弱模型 16–24%、网格循环 3–4%、'eyeballing 6.5% → this protocol 2.3%'）引用的是一项测量结论，源码内无复现脚本或数据文件；本次为只读侦查且不得运行构建/渲染，故不验证这些数值，仅作为『文档声明』记录，不在结论中当作已核事实使用。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "b8328f957368713d288900957eb5bee0dca31dd9",
    "sha256": "7966ceeccd29cbdd9a476b1268a1c013668ab490b046e4964a9c490e94f7db22",
    "reviewed_by": null,
    "reviewed_at": null
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-15/motion-graphics.tar.gz",
    "sha256": "7966ceeccd29cbdd9a476b1268a1c013668ab490b046e4964a9c490e94f7db22",
    "commit": "b8328f957368713d288900957eb5bee0dca31dd9"
  },
  "original": {
    "github": "https://github.com/heygen-com/hyperframes/tree/main/skills/motion-graphics",
    "path": "skills/motion-graphics",
    "commit": "b8328f957368713d288900957eb5bee0dca31dd9"
  }
}