skills/anim-analyzer/SKILL.md
Analyze animation assets (AMT_, CHT_, BS_, RTG_, ABP_) for structure, dependencies, notifies, and quality issues
npx skillsauth add sipherxyz/universal-ue-skills anim-analyzerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Analyze Unreal Engine animation assets (AMT_, CHT_, BS_, RTG_, ABP_) for structure, dependencies, notifies, and quality issues.
| Prefix | Type | Status | Analysis Focus | |--------|------|--------|----------------| | AMT_ | AnimMontage | ✅ Implemented | Notifies, sections, slots, dependencies | | BS_ | BlendSpace | ✅ Implemented | Sample count, skeleton, directional coverage | | CHT_ | ChooserTable | ✅ Implemented | Selection logic, parameter bindings | | RTG_ | IK Retargeter | ✅ Implemented | Bone mappings, source/target skeletons | | ABP_ | AnimBlueprint | ✅ Implemented | State machines, blend nodes |
┌──────────────────────────────────────────────────────────────────────┐
│ ANIMATION ASSET ANALYZER │
├──────────────────────────────────────────────────────────────────────┤
│ STEPS (6 total): │
│ │
│ 1. Asset Selection - Path, glob, or folder │
│ 2. Type Detection - Identify AMT_/CHT_/BS_/RTG_/ABP_ │
│ 3. Parse Asset - Extract via parse_uasset.py --deep │
│ 4. Type Analysis - Notifies, dependencies, structure │
│ 5. Issue Detection - Missing SFX/VFX/hitbox, TEMP refs │
│ 6. Generate Report - Quality score + actionable items │
├──────────────────────────────────────────────────────────────────────┤
│ OUTPUT: claude-agents/reports/anim-analysis/{type}/{name}.md │
└──────────────────────────────────────────────────────────────────────┘
Content/Animation/AMT_*.uassetDetect asset type from filename prefix or export class:
| Prefix | Export Class Contains | Asset Type |
|--------|----------------------|------------|
| AMT_ | AnimMontage | AnimMontage |
| CHT_ | ChooserTable | ChooserTable |
| BS_ | BlendSpace | BlendSpace |
| RTG_ | IKRetargeter | IK Retargeter |
| ABP_ | AnimBlueprint | AnimBlueprint |
| AS_ | AnimSequence | AnimSequence |
| AO_ | AimOffset | AimOffset |
Type Validation Warning: If user provides an AS_ (AnimSequence) when expecting AMT_ (Montage), warn them:
<action> Run parser to confirm type: ```bash python scripts/parse_uasset.py "{asset_path}" --summary ``` Check `asset_type` field in output. </action>"This appears to be an AnimSequence, not a Montage. AnimSequence analysis has limited scoring (no hitbox check). Continue anyway?"
python scripts/parse_uasset.py "{asset_path}" --deep --format text
Capture:
Step 4.1.1: Notify Detection
Scan name table for notify patterns:
| Pattern | Category | Significance |
|---------|----------|--------------|
| AN_S2_Foley_* | SFX | Project foley events |
| AN_S2_Voice_* | SFX | Voice events |
| AnimNotify_Play*Sound* | SFX | Engine audio notify |
| AnimNotify_PlayNiagaraEffect | VFX | Niagara trigger |
| AnimNotifyState_TimedNiagaraEffect | VFX | Duration Niagara |
| BP_FXTrail | VFX | Weapon trail effect |
| NS_* | VFX | Niagara system reference |
| SipherAbilityNotifyData_Hitbox | Combat | Hitbox activation |
| DamageShape_* | Combat | Damage shape type |
| Sipher.Notify.Hitbox.* | Combat | Gameplay tag hitbox (in tags section) |
| Sipher.Notify.Ability.* | Combat | Gameplay tag ability trigger |
| BP_NotifyState_MotionWarping | Movement | Motion warping window |
| ANS_LockRotationAI | AI | AI rotation lock state |
| BP_AI_RotateToTarget_Notify | AI | Target tracking rotation |
| AN_GlobalCameraShake | Camera | Global camera shake |
| BP_CameraShake_* | Camera | Screen shake variants |
| BP_ActionState_Notify | State | Combat action state |
Step 4.1.1b: Gameplay Tags Detection
Check --- Gameplay Tags --- section for combat indicators:
| Tag Pattern | Significance |
|------------|--------------|
| Sipher.Notify.Hitbox.Melee | Melee hitbox activation |
| Sipher.Notify.Hitbox.Ranged | Ranged hitbox |
| Sipher.Notify.Ability.CreateProjectile | Spawns projectile |
| Sipher.Damage.Property.* | Damage properties |
| Sipher.Character.State.Action.* | Action states |
Note: Foley notifies often appear in referenced AnimSequence (AS_*), not directly in montage. Parser detects these in dependency tree.
Step 4.1.2: Categorize Notifies
Group detected notifies into:
Step 4.1.3: Dependency Analysis
Parser auto-categorizes dependencies. Key categories:
| Category | Pattern | Significance |
|----------|---------|--------------|
| Skeleton | SK_*, SKEL_* | Mesh/skeleton binding |
| Animation | AS_*, AMT_* | Animation references |
| VFX | NS_*, *VFX* | Niagara systems |
| Audio | *Audio*, *SFX*, *Sound* | Sound assets |
| Blueprint | BP_*, AC_* | Component/notify BPs |
| Ability | GA_*, ANS_* | GAS abilities |
| Montage | AMT_* | Other montages |
| Projectile | *Projectile* | Projectile references |
Recursive Analysis: Parser traverses 2 levels deep to capture foley notifies and audio dependencies that come from AnimSequence assets.
Step 4.1.4: Quality Metrics
For AMT_ assets, calculate:
| Metric | Weight | Scoring | |--------|--------|---------| | Has SFX notifies | 25% | 100 if ≥1, 0 if none | | Has VFX notifies | 20% | 100 if ≥1, 0 if none | | Has Hitbox (attack) | 30% | 100 if ≥1, 0 if none (attack montages only) | | Has Motion Warp | 10% | 100 if present, 50 if not | | No TEMP refs | 10% | 100 if clean, 0 if TEMP present | | Valid skeleton | 5% | 100 if matches expected, 0 if wrong |
Hitbox check only applies if:
Attack, Combo, Heavy, Light, SkillStatus: Parser incompatible with UE5.7 ChooserTable format (header F8-FF-FF-FF vs standard F7-FF-FF-FF)
Planned analysis (when parser updated):
Step 4.3.1: Sample Detection
Scan name table for animation sample references:
| Pattern | Category | Significance |
|---------|----------|--------------|
| AS_* | Animation | Sample animation sequence |
| Walk_*, Run_*, Jog_* | Locomotion | Movement sample |
| *_F_*, *_B_*, *_L_*, *_R_* | Directional | Cardinal direction sample |
| *_45, *_90, *_180 | Angular | Angle-based sample |
Step 4.3.2: Skeleton Validation
| Pattern | Significance |
|---------|--------------|
| SKEL_* | Skeleton reference |
| SK_* | Skeletal mesh reference |
Step 4.3.3: Quality Metrics
For BS_ assets, calculate:
| Metric | Weight | Scoring | |--------|--------|---------| | Has samples | 40% | 100 if ≥4, 50 if 1-3, 0 if none | | Valid skeleton | 20% | 100 if matches expected, 0 if wrong | | Directional coverage | 25% | 100 if all cardinals, 50 if partial | | No TEMP refs | 15% | 100 if clean, 0 if TEMP present |
Sample Count Thresholds:
Status: Parser incompatible with UE5.7 IKRetargeter format
Planned analysis (when parser updated):
Status: Parser incompatible with UE5.7 AnimBlueprint format (header F8-FF-FF-FF)
Planned analysis (when parser updated):
| Issue | Detection | Impact |
|-------|-----------|--------|
| Missing hitbox | No *Hitbox* in attack montage | Combat broken |
| Broken reference | Import with no valid path | Asset won't load |
| Wrong skeleton | Skeleton mismatch | Animation won't play |
| Issue | Detection | Impact | |-------|-----------|--------| | Missing SFX | No audio notifies | Silent action | | Missing VFX | No Niagara notifies | No visual feedback | | Orphaned hitbox | Hitbox start without end | Persistent damage |
| Issue | Detection | Impact |
|-------|-----------|--------|
| TEMP references | TEMP_* in dependencies | WIP content |
| Prototype assets | _prototype, _WIP patterns | Not production ready |
| Missing motion warp | Attack without warping | Poor tracking |
| Issue | Detection | Impact | |-------|-----------|--------| | Non-standard naming | Doesn't match AMT_* pattern | Consistency | | Missing camera shake | No shake on heavy attack | Reduced impact feel | </check>
| Score | Status | Badge | |-------|--------|-------| | 90-100% | Ready | ✅ | | 70-89% | Needs Polish | 🟡 | | 50-69% | Incomplete | 🟠 | | <50% | Not Ready | 🔴 |
Reports saved to: claude-agents/reports/anim-analysis/
anim-analysis/
├── montages/ # AMT_* analysis
│ └── {name}-analysis.md
├── choosers/ # CHT_* analysis (Phase 2)
├── blendspaces/ # BS_* analysis (Phase 2)
├── retargeters/ # RTG_* analysis (Phase 2)
└── batch/ # Summary reports
└── folder-summary.md
User: Analyze AMT_S2_Boss_Tiger_DomainExpansion_TigerClaw.uasset
Agent:
1. Locates: S:/Projects/s2/Content/Animation/Anim_Library/Male/S2_Tiger/AMT_S2_Boss_Tiger_DomainExpansion_TigerClaw.uasset
2. Detects type: AnimMontage (from AMT_ prefix + export class)
3. Runs parser: python parse_uasset.py --deep --format text
4. Extracts notifies:
- SFX: AnimNotify_PlaySound (7 audio assets)
- VFX: AnimNotify_PlayNiagaraEffect, BP_FXTrail, NS_Combat_Tiger_*
- Combat: Sipher.Notify.Hitbox.Melee, Sipher.Notify.Ability.CreateProjectile
- AI: ANS_LockRotationAI, BP_AI_RotateToTarget_Notify
- Camera: AN_GlobalCameraShake, BP_CameraShake_Boss_HeavyHit
- Foley: (in AS_ dependency) AN_S2_Foley_Jump, AN_S2_Foley_Land
5. Calculates score:
- SFX: ✅ 25%
- VFX: ✅ 20%
- Hitbox: ✅ 30% (via gameplay tags)
- Motion Warp: ✅ 10% (AI rotation lock)
- No TEMP: ✅ 10%
- Valid skeleton: ✅ 5%
- Total: 100% → ✅ Ready
6. Generates report: claude-agents/reports/anim-analysis/montages/AMT_S2_Boss_Tiger_DomainExpansion_TigerClaw-analysis.md
| Asset | Type | Score | Status | |-------|------|-------|--------| | AMT_S2_Boss_Tiger_Attack01 | Attack | 85-90% | ✅ Ready | | AMT_S2_Boss_Tiger_Dodge_Forward | Dodge | 80% | 🟡 Needs Polish | | AMT_S2_Boss_Tiger_DomainExpansion_TigerClaw | Special | 100% | ✅ Ready |
See references/extension-guide.md for adding new asset types.
Quick steps:
templates/For downstream tool consumption, use --pipeline to get structured JSON:
python parse_uasset.py "{asset_path}" --pipeline
{
"asset": {
"path": "/Game/S2/Core_Ene/.../AMT_ene_dualsword_attack01",
"file": "AMT_ene_dualsword_attack01.uasset",
"type": "AnimMontage",
"size": 47651,
"ue_version": 1018
},
"skeleton": "SKEL_S2_ENM_STD_bodyA",
"content": {
"notifies": [
{"class": "AnimNotify_PlaySound", "count": 3},
{"class": "AN_AttackDamageDefinition", "count": 1}
],
"tags": ["Sipher.Damage.Type.Physical"],
"dependencies": {
"audio": ["/Game/.../SFX_Combat_Whoosh"],
"vfx": ["/Game/.../NS_Combat_Move_FootStep"],
"blueprint": ["/Game/.../BP_NotifyState_MotionWarping"],
"skeleton": ["/Game/.../SKEL_S2_ENM_STD_bodyA"]
}
},
"flags": {
"has_sfx": true,
"has_vfx": true,
"has_hitbox": true,
"has_motion_warp": true,
"has_temp_refs": false,
"is_attack": true
},
"quality": {
"score": 100,
"status": "ready",
"missing": [],
"warnings": []
}
}
Parser outputs facts (what exists, what's missing). Consumers decide actions.
| Field | Type | Description |
|-------|------|-------------|
| asset.type | string | AnimMontage, BlendSpace, AnimBlueprint, etc. |
| flags.* | boolean | Quick checks for CI/CD validation |
| quality.missing | array | List of missing elements (sfx, vfx, hitbox) |
| quality.status | string | ready, needs_polish, incomplete, not_ready |
AI Agent:
"I analyzed AMT_ene_dualsword_attack01. Missing: none. Score: 100%. Ready for production."
CI/CD:
python parse_uasset.py "$ASSET" --pipeline | jq '.quality.missing'
# Fail build if any critical issues
Human Review:
python parse_uasset.py "AMT_*.uasset" --pipeline | jq '.flags'
# Quick scan for missing elements
The parse_uasset.py parser extracts:
It cannot extract:
For detailed timing analysis, open the asset in Unreal Editor.
skill: anim-analyzer
invoke: /asset-management:anim-analyzer
development
This skill should be used when implementing features in isolation using git worktrees. Triggers on "create worktree", "isolated workspace", "parallel development", or when starting implementation that should not affect main workspace.
testing
Manage VFX team issues on GitHub Projects - timeline scheduling, status updates, member commit checks, bulk assign. Use when managing VFX team project board, adding issues to timeline, checking member progress, or bulk-updating issue fields.
tools
Generate C++ validation rules from JSON definitions. Use when team updates ValidationRules.json or asks to add/modify validation rules.
development
Check codebase for Microsoft Xbox XR (Xbox Requirements) compliance issues. Scans for account picker, cloud saves, achievements, Quick Resume, and Xbox certification requirements. Use before console submission or when preparing for Microsoft certification. Triggers on "XR", "Xbox certification", "Microsoft compliance", "Xbox cert", "Xbox requirements", "GDK compliance".