Skip to content
Browse the knowledge base

Skill

/aseprite:rig

Rig a character for animation

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.

On this page

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.

#

rules://06-layers-and-rigging, rules://03-silhouette-and-form, rules://31-anatomy-and-pose for where the joints really are.