GE

generate-poses

Generates pose keypoints (head, hands, feet) from fighter sprite animations for game attachment points.

Install

mkdir -p .claude/skills/generate-poses && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18165" && unzip -o skill.zip -d .claude/skills/generate-poses && rm skill.zip

Installs to .claude/skills/generate-poses

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Extract per-frame pose keypoints (head, hands, feet + orientations) from a fighter's sprite animations in the A Los Traques repo. Use this skill whenever the user wants to generate, regenerate, or refresh pose data for a fighter — including phrases like "generate poses for X", "run pose estimation", "extract keypoints", "rebuild poses.json", "add hat anchor points", or any request to enrich an existing fighter's animations with body-part positions. Also trigger when the user adds a new fighter sprite set and wants attachment anchors for runtime effects. The pipeline runs MediaPipe on every animation frame and writes a consolidated `poses.json` alongside the sprite strips.
680 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

Key capabilities

  • Extract per-frame pose keypoints from fighter sprite animations
  • Generate a `poses.json` file with head, hand, and foot positions
  • Derive orientation angles for body parts
  • Run the pipeline with debug previews to overlay skeletons on sprites
  • Verify JSON output for completeness and derived values
  • Commit generated `poses.json` and manifest files

How it works

The skill runs MediaPipe on each animation frame to extract keypoints and derived orientations, then saves this data to a `poses.json` file.

Inputs & outputs

You give it
A fighter ID and its sprite animations
You get back
A `poses.json` file with per-frame pose keypoints and derived orientations

When to use generate-poses

  • Extracting pose data from fighter sprites
  • Generating keypoints for game animation
  • Refreshing pose data after sprite modification

About this skill

Generate Pose Keypoints

End-to-end pipeline for extracting per-frame pose keypoints from a fighter's sprite animations. Writes one poses.json per fighter, colocated with the sprite strips, describing head/hand/foot positions plus derived orientation angles. Consumed at runtime to attach visual elements (hats, weapons, effects) to body parts with correct rotation.

When to use

Run this after a fighter's sprites have been fully generated and had their facing direction corrected via /generate-fighter. Don't run it before Phase 4 of that skill — the post-hoc -flop fixes will swap left* and right* keypoints across animations and invalidate every derived angle.

Prerequisites

  • assets/manifests/poses_{id}.json exists. If not, copy poses_simon.json and change output + fighter.
  • All 13 animation PNG strips exist at public/assets/fighters/{id}/{anim}.png. Check with ls public/assets/fighters/{id}/.
  • uv is on the PATH. First invocation installs MediaPipe + OpenCV into an isolated cache under scripts/asset-pipeline/pose/.venv.
  • ImageMagick (magick) is on the PATH — same dependency as the fighter pipeline.

Workflow

1. Smoke-test with debug previews

Run the pipeline with --debug so skeleton overlays are written to assets/_raw/poses/{id}/{anim}_debug.png:

node scripts/asset-pipeline/cli.js poses assets/manifests/poses_{id}.json --debug

First run downloads MediaPipe model weights (~30 MB) and can take up to a minute. Subsequent runs complete in ~10s for all 13 animations.

The pipeline prints a per-animation summary at the end. Example:

  - simon/idle: 4/4 frames detected
  - simon/block: 1/2 frames detected (review debug strip)
  - simon/knockdown: 2/4 frames detected (review debug strip)

Partial detection in block, hurt, and knockdown is expected — the character's pose is ambiguous (arms over face, body horizontal) and the affected frames are stored as detected: false.

2. Review debug strips

Open the debug strips for three representative animations and show them to the user:

open assets/_raw/poses/{id}/idle_debug.png
open assets/_raw/poses/{id}/light_punch_debug.png
open assets/_raw/poses/{id}/knockdown_debug.png

Ask: "Does the skeleton track the character's actual body — head on head, wrists on wrists?"

  • If yes, proceed.
  • If the skeleton is consistently mirrored (left/right swapped) across a whole animation, that usually means Phase 4 of /generate-fighter wasn't run for that animation. Confirm with the user and re-run the fighter pipeline's facing fixes before regenerating poses.
  • If detection is wrong only for specific frames inside block/hurt/knockdown, leave as-is — these are marked detected: false and runtime code should skip attachment for those frames.

3. Verify JSON output

Confirm the output file exists and has all 13 animations:

jq '.animations | keys' public/assets/fighters/{id}/poses.json

Sanity-check a derived block for a character standing upright and facing right:

jq '.animations.idle.frames[0].derived' public/assets/fighters/{id}/poses.json

Expect head.roll near 0 and torso.angle near 90. Large deviations on the very first idle frame usually indicate a detection problem worth investigating.

4. Commit

Stage the manifest (if new) and the generated JSON:

git add assets/manifests/poses_{id}.json public/assets/fighters/{id}/poses.json

The assets/_raw/poses/{id}/ directory holds intermediate frame splits and debug previews — it's regeneratable and should not be committed.

Output shape

One JSON file per fighter, colocated with sprites:

public/assets/fighters/{id}/poses.json

Top-level fields: version, fighter, frameSize (128), model, generatedAt, animations.

Each animation has frameCount and a frames array. Each frame has:

  • index, detected, avgVisibility
  • keypoints — 23 named landmarks as {x, y, v}. Coordinates are pixel-space relative to the 128×128 frame, top-left origin, y down (matches Phaser sprite-child coords).
  • derivedhead {center, roll, yaw, pitch}, torso {center, angle}, {left,right}Hand {anchor, angle}, {left,right}Foot {anchor, angle}. Angles are degrees, counter-clockwise from +x axis. Phaser rotates clockwise, so renderer code must negate.

When detected: false, both keypoints and derived are null.

Key lessons

  • Run after /generate-fighter Phase 4. Facing fixes (magick -flop) happen post-hoc and swap left/right semantics. Run poses before that, and the JSON is wrong.
  • Transparent backgrounds break pose models. detect.py composites each RGBA frame over mid-gray (128,128,128) before inference. Never composite over green — some sprites have green flames that would bleed.
  • static_image_mode=True is required so MediaPipe doesn't try to track state across unrelated animations.
  • model_complexity=2 (heavy) is more tolerant of limbs at the frame edge (common in heavy_kick, special). Still <2 minutes total for 800 frames.
  • Cached frame splits in assets/_raw/poses/{id}/{anim}/frame_*.png are reused across runs. Delete the directory to force re-split if a sprite strip changed.
  • poses.json is consolidated per fighter — one file holds all 13 animations. Regenerating a single animation rewrites the whole file.

When not to use it

  • When the user does not want to generate, regenerate, or refresh pose data for a fighter
  • Before Phase 4 of `/generate-fighter` has been run
  • When `assets/manifests/poses_{id}.json` does not exist

Prerequisites

`assets/manifests/poses_{id}.json` existsAll 13 animation PNG strips exist at `public/assets/fighters/{id}/{anim}.png``uv` is on the PATHImageMagick (`magick`) is on the PATH

Limitations

  • Requires `assets/manifests/poses_{id}.json` to exist
  • Requires all 13 animation PNG strips to be present
  • Transparent backgrounds break pose models, requiring compositing over mid-gray

How it compares

This skill provides an automated pipeline for extracting detailed per-frame pose data and derived orientations from sprite animations, which is more precise and efficient than manual keypoint annotation.

Compared to similar skills

generate-poses side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
generate-poses (this skill)03moReviewAdvanced
opencode-cli147moReviewAdvanced
robotics-code-generator147moNo flagsAdvanced
modal57moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

opencode-cli

SpillwaveSolutions

This skill should be used when configuring or using the OpenCode CLI for headless LLM automation. Use when the user asks to "configure opencode", "use opencode cli", "set up opencode", "opencode run command", "opencode model selection", "opencode providers", "opencode vertex ai", "opencode mcp servers", "opencode ollama", "opencode local models", "opencode deepseek", "opencode kimi", "opencode mistral", "fallback cli tool", or "headless llm cli". Covers command syntax, provider configuration, Vertex AI setup, MCP servers, local models, cloud providers, and subprocess integration patterns.

14174

robotics-code-generator

HumaizaNaz

Generates clean, runnable ROS 2, Gazebo, Isaac Sim, and VLA code for humanoid robotics

1490

modal

davila7

Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.

587

hugging-face-cli

patchy631

Execute Hugging Face Hub operations using the `hf` CLI. Use when the user needs to download models/datasets/spaces, upload files to Hub repositories, create repos, manage local cache, or run compute jobs on HF infrastructure. Covers authentication, file transfers, repository creation, cache operations, and cloud compute.

350

computer-use-agents

davila7

Build AI agents that interact with computers like humans do - viewing screens, moving cursors, clicking buttons, and typing text. Covers Anthropic's Computer Use, OpenAI's Operator/CUA, and open-source alternatives. Critical focus on sandboxing, security, and handling the unique challenges of vision-based control. Use when: computer use, desktop automation agent, screen control AI, vision-based agent, GUI automation.

1040

machine-learning-ops-ml-pipeline

sickn33

Design and implement a complete ML pipeline for: $ARGUMENTS

436

Search skills

Search the agent skills registry