# vendor/ — generated artifacts, do not edit by hand

Files here are produced elsewhere and copied in so the standalone CLI works with no engine checkout and no
installed asset pack. Same reasoning as `src/character/canonicalSkeletonData.ts`.

| File | Produced by | Purpose |
|---|---|---|
| `capture-body.glb` | `helix-web-engine-new/tools/character-pipeline` → `export-capture-body-cli` | the default character's body, for `helix gesture shot` |
| `capture-face.glb` | same | the default character's head/face — the body GLB has none |
| `ability-manifest.mjs` | the ability-v1 contract module | bundle validation |
| `installed-index.mjs` | the installed-index schema | `installed.json` validation |

## The capture GLBs

`helix gesture shot` always renders the **default** character. A gesture clip replicates by NAME and plays on
whatever body each player has, so a pose is authored against the canonical body every custom character is
conformed to — and the one the runtime falls back to when an avatar fails to load. The sheet is a reference
render against that contract, not a preview of any particular player's view.

Each is scene 0 (the highest LOD) with every texture dropped and materials flattened to grey. That removes the
`KHR_texture_basisu` requirement, so the browser needs no KTX2 transcoder; it keeps the files small; and an
untextured body reads *better* for judging a pose than a textured one.

They stay **two files** because body and face carry separate skeletons with different skin joint counts (the
body's full 77-node tree vs the face's 16-node `root → spine → neck → head` chain), so they cannot share one
skin. The capture page poses each by bone name instead, which is what keeps the head following spine and neck
keys.

Regenerate only when the default character itself changes:

```
cd helix-web-engine-new/tools/character-pipeline
npx tsx src/export-capture-body-cli.ts \
  --body ../../asset-packs/humanoid-character/body-m-default.web.glb \
  --face ../../asset-packs/humanoid-character/face-m-default.web.glb \
  -o ../../../helix-creator-cli/vendor
```

The generator fails loudly if an output still declares a required glTF extension, since the browser could not
then load it.
