Split a character onto named layers — head, torso, arms, legs — so it can be animated by moving cels instead of redrawing pixels. Use before animating anything, or when limbs are baked into one layer.
Installs into .claude/skills of the current project.
Are you the author of Rig?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/with-pebbly-rig)
---
name: rig
title: Rig a character for animation
description: Split a character onto named layers — head, torso, arms, legs — so it can be animated by moving cels instead of redrawing pixels. Use before animating anything, or when limbs are baked into one layer.
---
# Rig a character for animation
Pixels baked into a single layer cannot be animated without redrawing them. Rig
first; separating a finished sprite later is more work than building it split.
## The standard rig
Bottom to top, so nearer parts draw over farther ones:
```
arm-near ← camera-side arm
leg-near
head
torso
arm-far ← partly hidden by the torso; this is what sells depth
leg-far
shadow ← ground contact, if the style has one
```
Add `weapon`, `cape`, `hair-front`, `hair-back` as the design needs. Keep names
stable — every later call refers to them by name.
Two limbs with the same name — `arm-near` inside two different groups, say —
make later calls ambiguous: passing just the name fails, naming every match,
until you pass a `group/child` path (e.g. `torso/arm-near`) instead.
## Building it fresh
One batch, one undo step:
```
layer batch=[
{op:"create", name:"shadow"},
{op:"create", name:"leg-far"},
{op:"create", name:"arm-far"},
{op:"create", name:"torso"},
{op:"create", name:"head"},
{op:"create", name:"leg-near"},
{op:"create", name:"arm-near"},
]
```
Then draw each part on its own layer from the start.
## Splitting an existing sprite
When the art is already baked into one layer:
1. `sprite_info` to see what you have, and `look op="ascii"` to find exact part
boundaries. Guessing at coordinates here is how limbs get clipped.
2. Create the rig layers (above).
3. For each part, in one `draw` call per target layer:
```
draw layer="head" ops=[{ kind:"blit", from:{x:12,y:4,width:8,height:8}, to:{x:12,y:4} }]
```
`blit` copies from the source layer; `skipTransparent` keeps the copy clean.
4. Clear the copied region from the original layer, or rename the original to
`flat-original` and hide it. **Prefer hiding** — if a boundary was wrong you
want the original still there.
5. `look op="preview"` with the original hidden. The sprite should look
unchanged. If a limb lost pixels, the boundary was wrong.
## Overlap matters
A limb needs a pixel or two of overlap with the torso, or a gap appears the
moment it rotates. Copy generously and let the stacking order hide the excess.
## Then
`aseprite:animate`.
## Related
`rules://06-layers-and-rigging`, `rules://03-silhouette-and-form`,
`rules://31-anatomy-and-pose` for where the joints really are.