{
  "slug": "multiview-to-web-3d-asset",
  "skill": "multiview-to-web-3d-asset",
  "upstream": "GameSkill original (onsite/<slug>/original)",
  "sourceHash": "c2fcf78420330ce383c8c7ba71ed4efe2c5c90592b9617a1c3356741f7eaed9a",
  "date": "2026-10-28",
  "engine": "glTF Transform 4.5.1 (Node 20)",
  "env": [
    "Node v20.19.2",
    "@gltf-transform 4.5.1, meshoptimizer 0.22, draco3dgltf 1.5.7, sharp 0.33 from package-lock.json",
    "Khronos glTF-Sample-Assets WaterBottle and Lantern (CC0-1.0), fetched by scripts/fetch-sample.mjs",
    "Before/after render: preview/compare.html in Google Chrome 156 headless (SwiftShader WebGL), shots/compare.png"
  ],
  "trigger": "static",
  "passed": 23,
  "total": 23,
  "commands": [
    "(cd ../original && sh -c npm ci --silent --no-audit --no-fund && node scripts/fetch-sample.mjs && node --test --test-reporter=tap test/)",
    "(cd . && cp ../original/shots/compare.png screenshot.png)"
  ],
  "checks": [
    {
      "criterion": "trigger",
      "name": "SKILL.md description says when to use it",
      "pass": true,
      "detail": "Turn a concept (character, prop, vehicle) into a web-ready glb: consistent front/side/back reference images, any image-t"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"My AI generated 3D model glb is too heavy for the browser, cut triangles and add Draco compression\"",
      "pass": true,
      "detail": "rank 1/118, overlap 8"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Make LODs for this glb and keep it inside a polygon and file size budget\"",
      "pass": true,
      "detail": "rank 1/118, overlap 6"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Write multi-view front side back reference prompts for image to 3D generation\"",
      "pass": true,
      "detail": "rank 1/118, overlap 9"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Make a Godot 2D platformer jump feel better\"",
      "pass": true,
      "detail": "rank 32/118, overlap 0"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Write a launch checklist for release day\"",
      "pass": true,
      "detail": "rank 13/118, overlap 0"
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): sample assets are present (CC0 Khronos samples)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): WaterBottle -> web-prop: within budget, Draco on, textures 1024, size cut > 90%",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): WaterBottle -> mobile-prop: triangles cut to <= 3000, bounds kept within 2%",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): dense 180k-tri mesh -> 10k budget, silhouette kept within 3%",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): WebP option converts every texture and still loads",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): --no-draco leaves geometry uncompressed (for loaders without DRACOLoader)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): CLI LOD chain: 3 files, falling triangles and size, exit 0",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): inspect CLI: exit 2 when over budget, 0 when within",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): checkBudget flags each limit and empty meshes",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): optimized output round-trips through a fresh reader",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "pipeline tests (inspect, optimise, LODs, budgets): exits 0 with no script errors",
      "pass": true,
      "detail": "exit 0"
    },
    {
      "criterion": "output",
      "name": "screenshot screenshot.png rendered",
      "pass": true
    },
    {
      "criterion": "output",
      "name": "self-check list has at least 3 items",
      "pass": true,
      "detail": "5 items"
    },
    {
      "criterion": "single",
      "name": "one job per skill (reviewed)",
      "pass": true,
      "detail": "One job: take one generated or scanned 3D model to a web-ready glb inside a measured budget (references in, optimised glb + LODs out). Loading it into a scene is left to threejs-glb-scene-assembly."
    },
    {
      "criterion": "bilingual",
      "name": "English SKILL.md",
      "pass": true
    },
    {
      "criterion": "bilingual",
      "name": "Chinese SKILL.zh.md shipped next to SKILL.md",
      "pass": true,
      "detail": "2935 chars"
    },
    {
      "criterion": "bilingual",
      "name": "Chinese guide written",
      "pass": true,
      "detail": "1914 chars"
    }
  ]
}
