[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CCZ4SHEMDM0DF0D0S5J3FD":3,"skill-same:01M7CCZ4SHEMDM0DF0D0S5J3FD":58},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":14,"repositoryHtmlUrl":30,"repositoryHomepageUrl":6,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M7CCZ4SHEMDM0DF0D0S5J3FD","blender-facial-shapekeys",null,"Facial rigs and shape keys in Blender 5.2 - ARKit 52 blendshapes, visemes for lip-sync, sculpting expressions, splitting symmetric shapes into Left\u002FRight, mirroring, corrective and combination shapes, drivers and control rigs, bone+blendshape hybrids, export to engines (Unity, Unreal, Roblox dynamic heads, VRM\u002Fweb). Use for faces, expressions, lip-sync, or any shape-key work.","MattMakes\u002Fmulti-herdr","MattMakes","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5321894?v=4","01M7CCT7X2X6MXGNKCF57X67VZ","Matthew Scott","01M7CCT7Y23BTY560YX8PBMWN8",1,"MIT","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-facial-shapekeys\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: blender-facial-shapekeys\ndescription: Facial rigs and shape keys in Blender 5.2 - ARKit 52 blendshapes, visemes for lip-sync, sculpting expressions, splitting symmetric shapes into Left\u002FRight, mirroring, corrective and combination shapes, drivers and control rigs, bone+blendshape hybrids, export to engines (Unity, Unreal, Roblox dynamic heads, VRM\u002Fweb). Use for faces, expressions, lip-sync, or any shape-key work.\nlicense: MIT\nmetadata:\n  author: blender-agent-skills\n  version: \"1.2.0\"\n---\n\n# Facial Rig & Shape Keys\n\nThe execution model is in `blender-core`. The body rig is in `blender-character-rigging`.\n\n## Choose the approach\n| Approach | Use | Notes |\n|---|---|---|\n| **Blendshapes (ARKit 52)** | games, VTubers, mocap (iPhone\u002FLive Link Face), web\u002FVRM | the industry interchange set; each shape is sculpted |\n| **Bones** (jaw, eyes, lids, brows, lips) | stylized, low memory, mobile | jaw + eyes as bones are almost always right |\n| **Hybrid** | most production game heads | jaw\u002Feye\u002Ftongue bones + blendshapes for everything soft |\n| **Rigify face** (`human` metarig) | film-style keyframe animation inside Blender | 100+ face bones, heavy for engines |\n\n## Procedure (blendshapes)\n1. The head mesh needs clean loops around the eyes and mouth (`blender-retopology-uv`), with eyes, teeth and tongue as separate objects parented or weighted to bones.\n2. `scripts\u002Fshapekeys.py -- --mesh Head --create arkit` (or `--create visemes` for the 15 Oculus visemes) creates empty, correctly named keys.\n3. Sculpt each key (live: sculpt mode on the active key, `use_shape_key_edit_mode`). Symmetric expressions can be sculpted once, then `--split eyeBlink` gives `eyeBlinkLeft\u002FRight` with a soft blend across X=0 (`--falloff` m).\n4. `--mirror browDownLeft` builds `browDownRight` (topology-independent mirror).\n5. `--report` lists unsculpted keys, the max offset per key, and missing ARKit names. A shape is done only when every key moves and nothing is left over.\n6. Optional: `--drivers FaceCtrl` adds a controller with 0–1 custom properties driving each key, for keyframing in Blender.\n7. Check the extremes and **combinations** (jawOpen + mouthSmile, eyeBlink + eyeSquint) with `look`. Fix them with corrective combination keys driven by the product of two keys.\n\n## Shape key rules\n- Shapes are **deltas from Basis**. Never change the Basis topology after creating keys (adding or removing verts destroys every key).\n- One action per key. No head or neck movement inside face keys (bones do that). Keep eyelids sliding over the eye surface, not through it (check with `blender-asset-qa` zfighting on lid\u002Feye).\n- Range 0–1. `slider_max` can be raised for exaggeration, but engines clamp to 0–1.\n- Relative keys (`use_relative=True`, the default) are the only kind that exports.\n- Name exactly per spec (case-sensitive): `eyeBlinkLeft`, not `EyeBlink_L`. Engines map by name.\n- Keys on meshes with Subdivision: sculpt at level 0, and keep the subdivision modifier **after** the shape keys (they're evaluated first anyway).\n- Applying modifiers on a mesh with shape keys fails. Use `modifier_apply_as_shapekey` for deform modifiers, or apply them before creating keys.\n\n## Correctives and combination shapes\n- Corrective for a bone pose: sculpt in the posed state, then drive with a `TRANSFORMS` variable (`ROT_X`, `LOCAL_SPACE`, mapped to 0–1).\n- Combination: key `jawOpen_mouthSmile` with driver `SCRIPTED` expression `a*b`, from the two key values (`SINGLE_PROP` `key_blocks[\"jawOpen\"].value`). Simple expressions don't need Python auto-run.\n\n## Engine notes\n- **Unity**: FBX blendshapes. In the Model importer, set Blend Shape Normals = Calculate (or Import if smoothing was exported). ARKit names map to the AR Foundation face-tracking samples.\n- **Unreal**: morph targets (\"Import Morph Targets\"). Live Link Face \u002F MetaHuman Animator use ARKit names, and the Pose Asset maps the curves. No leaf bones.\n- **Roblox dynamic heads**: FACS-based poses with Roblox-specific names, authored as animation frames on a head rig (Creator Hub \"Dynamic heads\" spec). Build from the official Blender template. ARKit sculpts can be reused by renaming\u002Fmapping. Head ≤ 4,000 tris.\n- **VRM \u002F web (three-vrm, ReadyPlayerMe-style)**: ARKit 52 + visemes as glTF morph targets (`export_morph=True`). Keep the morph-normal export on only if shading needs it (it doubles the size).\n- Drop unused keys before export. Every key costs memory per vertex (glTF sparse accessors help).\n\n## Gotchas\n- `ob.shape_key_add(from_mix=False)` copies the Basis. `from_mix=True` bakes the current mix (useful for combos, dangerous by accident).\n- `shape_key_mirror(use_topology=False)` needs a mesh symmetric on X. Run it on the **active** key (the script handles this).\n- Driver variables on shape keys use the Key ID (`ob.data.shape_keys`), not the mesh: `fc = kb.driver_add(\"value\")`.\n","# Facial Rig & Shape Keys\n\nThe execution model is in `blender-core`. The body rig is in `blender-character-rigging`.\n\n## Choose the approach\n| Approach | Use | Notes |\n|---|---|---|\n| **Blendshapes (ARKit 52)** | games, VTubers, mocap (iPhone\u002FLive Link Face), web\u002FVRM | the industry interchange set; each shape is sculpted |\n| **Bones** (jaw, eyes, lids, brows, lips) | stylized, low memory, mobile | jaw + eyes as bones are almost always right |\n| **Hybrid** | most production game heads | jaw\u002Feye\u002Ftongue bones + blendshapes for everything soft |\n| **Rigify face** (`human` metarig) | film-style keyframe animation inside Blender | 100+ face bones, heavy for engines |\n\n## Procedure (blendshapes)\n1. The head mesh needs clean loops around the eyes and mouth (`blender-retopology-uv`), with eyes, teeth and tongue as separate objects parented or weighted to bones.\n2. `scripts\u002Fshapekeys.py -- --mesh Head --create arkit` (or `--create visemes` for the 15 Oculus visemes) creates empty, correctly named keys.\n3. Sculpt each key (live: sculpt mode on the active key, `use_shape_key_edit_mode`). Symmetric expressions can be sculpted once, then `--split eyeBlink` gives `eyeBlinkLeft\u002FRight` with a soft blend across X=0 (`--falloff` m).\n4. `--mirror browDownLeft` builds `browDownRight` (topology-independent mirror).\n5. `--report` lists unsculpted keys, the max offset per key, and missing ARKit names. A shape is done only when every key moves and nothing is left over.\n6. Optional: `--drivers FaceCtrl` adds a controller with 0–1 custom properties driving each key, for keyframing in Blender.\n7. Check the extremes and **combinations** (jawOpen + mouthSmile, eyeBlink + eyeSquint) with `look`. Fix them with corrective combination keys driven by the product of two keys.\n\n## Shape key rules\n- Shapes are **deltas from Basis**. Never change the Basis topology after creating keys (adding or removing verts destroys every key).\n- One action per key. No head or neck movement inside face keys (bones do that). Keep eyelids sliding over the eye surface, not through it (check with `blender-asset-qa` zfighting on lid\u002Feye).\n- Range 0–1. `slider_max` can be raised for exaggeration, but engines clamp to 0–1.\n- Relative keys (`use_relative=True`, the default) are the only kind that exports.\n- Name exactly per spec (case-sensitive): `eyeBlinkLeft`, not `EyeBlink_L`. Engines map by name.\n- Keys on meshes with Subdivision: sculpt at level 0, and keep the subdivision modifier **after** the shape keys (they're evaluated first anyway).\n- Applying modifiers on a mesh with shape keys fails. Use `modifier_apply_as_shapekey` for deform modifiers, or apply them before creating keys.\n\n## Correctives and combination shapes\n- Corrective for a bone pose: sculpt in the posed state, then drive with a `TRANSFORMS` variable (`ROT_X`, `LOCAL_SPACE`, mapped to 0–1).\n- Combination: key `jawOpen_mouthSmile` with driver `SCRIPTED` expression `a*b`, from the two key values (`SINGLE_PROP` `key_blocks[\"jawOpen\"].value`). Simple expressions don't need Python auto-run.\n\n## Engine notes\n- **Unity**: FBX blendshapes. In the Model importer, set Blend Shape Normals = Calculate (or Import if smoothing was exported). ARKit names map to the AR Foundation face-tracking samples.\n- **Unreal**: morph targets (\"Import Morph Targets\"). Live Link Face \u002F MetaHuman Animator use ARKit names, and the Pose Asset maps the curves. No leaf bones.\n- **Roblox dynamic heads**: FACS-based poses with Roblox-specific names, authored as animation frames on a head rig (Creator Hub \"Dynamic heads\" spec). Build from the official Blender template. ARKit sculpts can be reused by renaming\u002Fmapping. Head ≤ 4,000 tris.\n- **VRM \u002F web (three-vrm, ReadyPlayerMe-style)**: ARKit 52 + visemes as glTF morph targets (`export_morph=True`). Keep the morph-normal export on only if shading needs it (it doubles the size).\n- Drop unused keys before export. Every key costs memory per vertex (glTF sparse accessors help).\n\n## Gotchas\n- `ob.shape_key_add(from_mix=False)` copies the Basis. `from_mix=True` bakes the current mix (useful for combos, dangerous by accident).\n- `shape_key_mirror(use_topology=False)` needs a mesh symmetric on X. Run it on the **active** key (the script handles this).\n- Driver variables on shape keys use the Key ID (`ob.data.shape_keys`), not the mesh: `fc = kb.driver_add(\"value\")`.\n",{"name":5,"license":15,"metadata":24,"description":7},{"author":25,"version":26},"blender-agent-skills","1.2.0","main","65939082a69507fbcf2161620b47d3b0b1a2ab90","skills\u002Fblender-facial-shapekeys","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr","https:\u002F\u002Fgithub.com\u002FMattMakes","Full stack web developer and aspiring game developer who is eager to learn and create!","2026-11-14 13:23:29",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add MattMakes\u002Fmulti-herdr --skill blender-facial-shapekeys",{"tool":40,"command":41},"bunx","bunx skills add MattMakes\u002Fmulti-herdr --skill blender-facial-shapekeys",{"tool":43,"command":44},"pnpm","pnpm dlx skills add MattMakes\u002Fmulti-herdr --skill blender-facial-shapekeys","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-facial-shapekeys\u002FSKILL.md",true,[48,54],{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},"scripts\u002F_bpyx.py","SCRIPT","脚本",4503,"https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-facial-shapekeys\u002Fscripts\u002F_bpyx.py",{"path":55,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":56,"sourceHtmlUrl":57},"scripts\u002Fshapekeys.py",6208,"https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-facial-shapekeys\u002Fscripts\u002Fshapekeys.py",[59,66,73,80,87,94],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":19},"01M7CD2RFC310Q4TFD6WTZ806Z","blender-workflow-recipes","End-to-end Blender 5.2 playbooks chaining the blender-* skills with QA gates - game props (mid-poly, high-to-low), game characters (sculpt\u002FAI mesh to rigged, animated export), Roblox props\u002Faccessories\u002Favatars, AI or downloaded asset cleanup, procedural environments, web\u002FAR assets, product turntables, mood\u002Fweather shots (night, rain, snow, fog). Use for complete multi-stage asset requests.","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-workflow-recipes\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M7CD2J644S1Q1NH0B1NWSQQW","blender-weather-fx","Weather effects in Blender 5.2 - looping Geometry Nodes rain, snow, dust, ash and embers with ground hits and splashes, wet surfaces, puddles with animated ripples, wall streaks, snow cover (shader + real snow geometry), storm lightning with multi-stroke flashes and bolts, engine-ready weather masks. Use for rain, storm, snow, wet street, puddle, dust or ember scenes.","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-weather-fx\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M7CD2D4VCEJG1TWK7FKSP002","blender-video-editing","Video in Blender 5.2 - Video Sequencer edits from Python (clips, image sequences, crossfades, titles, music fades, proxies, color management, H.264\u002FAAC output) and motion tracking (feature detection, camera solve, scene orientation, tripod and plane tracking, stabilization) for VFX shots. Use to cut renders\u002Ffootage together or match-move a camera.","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-video-editing\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M7CD22HZZTE91TPETJNFX535","blender-time-of-day","Time of day and atmosphere in Blender 5.2 - measured sky + sun for dawn, morning, noon, golden hour, sunset, blue hour, overcast, night\u002Fmoonlight with stars and city glow, exposure balance, height fog from visibility, god rays, Cycles vs EEVEE volumes, compositor grade, stylized moods (cyberpunk neon, horror, underwater, desert). Use for any day\u002Fnight, sunset, foggy or mood lighting scene.","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-time-of-day\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M7CD1Y6JHPVW2J5MKHZ0DF4E","blender-texturing","Texture authoring in Blender 5.2 - smart-material layers (edge wear, cavity grime, dust, rust, roughness breakup) from curvature\u002FAO masks, z-fight-safe decal and sticker placement, trim sheets, tiling + vertex-color blends, texture painting, baking the look to game texture sets. Use when a material needs wear, dirt, a decal, trims or hand painting, not just wiring.","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-texturing\u002FSKILL.md",[],[],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":19},"01M7CD1SM4V8QK32H2QE1ZJ5QG","blender-texture-baking","Bake texture maps in Blender 5.2 Cycles - high-to-low normal maps with cage\u002Fextrusion, AO, curvature, ID, thickness, base color\u002Froughness\u002Fmetallic from procedurals, ORM packing, OpenGL vs DirectX, margins, GPU baking, fixing skewing\u002Fwaviness\u002Fseams. Use when transferring sculpt or high-poly detail to game meshes or converting procedural materials to textures.","https:\u002F\u002Fgithub.com\u002FMattMakes\u002Fmulti-herdr\u002Fblob\u002Fmain\u002Fskills\u002Fblender-texture-baking\u002FSKILL.md",[],[]]