skills/ue-hitbox-visualizer-export/SKILL.md
Export hitbox visualization frames to image sequences for combat design review. Capture hitbox timing, position, and coverage across attack animations. Use when reviewing combat hitboxes, documenting attack ranges, or debugging hit detection. Triggers on "hitbox export", "hitbox visualization", "attack frames", "hitbox timing", "combat frames", "hit detection visual".
npx skillsauth add sipherxyz/universal-ue-skills ue-hitbox-visualizer-exportInstall 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.
Export hitbox visualization to image sequences for design review.
## Capture Configuration
### Target
| Setting | Value |
|---------|-------|
| Character | {CharacterClass} |
| Montage | AMT_{MontageName} |
| Frame Rate | 30 FPS |
| Resolution | 1920x1080 |
### Visualization
| Setting | Value |
|---------|-------|
| Hitbox Color | Red (Active) / Gray (Inactive) |
| Hurtbox Color | Green |
| Show Skeleton | Yes |
| Show Timing | Yes |
| Background | Neutral Gray |
// Capture setup
void CaptureHitboxSequence(UAnimMontage* Montage)
{
// Disable game rendering, enable debug
GetWorld()->bDebugDrawAllTraceTags = true;
float Duration = Montage->GetPlayLength();
float FrameRate = 30.f;
int32 TotalFrames = FMath::CeilToInt(Duration * FrameRate);
for (int32 Frame = 0; Frame < TotalFrames; Frame++)
{
float Time = Frame / FrameRate;
// Seek montage to time
AnimInstance->Montage_SetPosition(Montage, Time);
// Update hitbox state
HitboxComponent->DebugDrawHitboxes(World);
// Capture screenshot
FString FileName = FString::Printf(TEXT("Frame_%04d.png"), Frame);
CaptureScreenshot(OutputPath / FileName);
}
}
## Hitbox Timeline: AMT_{MontageName}
### Frame Data
| Frame | Time | Hitbox Active | Position | Size |
|-------|------|---------------|----------|------|
| 0 | 0.00s | No | - | - |
| 5 | 0.17s | No | - | - |
| 10 | 0.33s | Yes | (100, 0, 50) | R:80 |
| 11 | 0.37s | Yes | (120, 10, 50) | R:80 |
| 12 | 0.40s | Yes | (140, 20, 50) | R:80 |
| 13 | 0.43s | No | - | - |
### Active Frames
- Start Frame: 10 (0.33s)
- End Frame: 12 (0.40s)
- Duration: 3 frames (0.10s)
// Draw hitbox as wireframe sphere/capsule/box
void DrawHitbox(const FSipherHitboxData& Hitbox)
{
FColor Color = Hitbox.bActive ? FColor::Red : FColor::Gray;
switch (Hitbox.Shape)
{
case ESipherHitboxShape::Sphere:
DrawDebugSphere(World, Hitbox.Location, Hitbox.Radius, 16, Color);
break;
case ESipherHitboxShape::Capsule:
DrawDebugCapsule(World, Hitbox.Location, Hitbox.HalfHeight, Hitbox.Radius, Hitbox.Rotation, Color);
break;
case ESipherHitboxShape::Box:
DrawDebugBox(World, Hitbox.Location, Hitbox.Extent, Hitbox.Rotation, Color);
break;
}
}
## Frame Overlay Elements
### Always Visible
- Frame number
- Timestamp
- Hitbox active indicator
### Optional
- Skeleton bones
- Movement vector
- Damage value
- Range circle on ground
Output/
├── {MontageName}/
│ ├── Frame_0000.png
│ ├── Frame_0001.png
│ ├── ...
│ ├── Frame_0030.png
│ └── metadata.json
{
"montage": "AMT_Player_LightAttack_01",
"duration": 1.0,
"frameRate": 30,
"frames": [
{
"index": 10,
"time": 0.33,
"hitboxes": [
{
"name": "MainHitbox",
"active": true,
"position": [100, 0, 50],
"radius": 80,
"damage": 25
}
]
}
]
}
# FFmpeg command to create video from frames
ffmpeg -framerate 30 -i Frame_%04d.png -c:v libx264 -pix_fmt yuv420p hitbox_visualization.mp4
# Hitbox Analysis: AMT_{MontageName}
## Summary
| Metric | Value |
|--------|-------|
| Total Duration | {N}s |
| Active Frames | {N} ({N}%) |
| Max Hitbox Size | {N} cm |
| Coverage Area | {N} cm² |
## Hitbox Timeline
Frame: 0----5----10---15---20---25---30 ░░░░░░░░░████████░░░░░░░░░░░░░░ [Startup] [Active] [Recovery]
## Active Window Analysis
- **Startup**: 10 frames (0.33s) - Pre-attack animation
- **Active**: 3 frames (0.10s) - Damage can be dealt
- **Recovery**: 17 frames (0.57s) - Post-attack vulnerability
## Spatial Coverage
{Top-down diagram of hitbox sweep area}
## Design Notes
- Hitbox aligns with weapon swing
- Range is {N}cm from character center
- Sweep covers {N}° arc
## Comparison
| Attack | Active Frames | Range | Startup |
|--------|---------------|-------|---------|
| Light 1 | 3 (0.10s) | 80cm | 10 |
| Light 2 | 4 (0.13s) | 90cm | 8 |
| Heavy 1 | 6 (0.20s) | 120cm | 18 |
## Recommendations
1. {Timing adjustment suggestion}
2. {Range adjustment suggestion}
| Command | Purpose |
|---------|---------|
| SipherHitbox.Debug.Draw 1 | Enable hitbox visualization |
| SipherHitbox.Debug.ShowInactive 1 | Show inactive hitboxes |
| SipherHitbox.Debug.ExportFrames | Trigger frame export |
| SipherHitbox.Debug.Color R G B | Set hitbox color |
# Python script to batch export all combat montages
import unreal
def export_all_hitbox_visualizations():
montages = unreal.EditorAssetLibrary.list_assets('/Game/S2/Animation/Combat/', recursive=True)
for montage_path in montages:
if 'AMT_' in montage_path:
export_hitbox_sequence(montage_path)
# Run hitbox export on combat animation changes
on:
push:
paths:
- 'Content/**/AMT_*.uasset'
jobs:
export-hitboxes:
runs-on: self-hosted
steps:
- name: Export Hitbox Visualizations
run: UnrealEditor-Cmd.exe -run=HitboxExport
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".