Skip to content
All documentation pages

Poses: 18 named poses, per-joint control and animation

All 18 named Minecraft skin poses with live renders, per-joint overrides, sign conventions and the frame parameter for walk, run, dance and wave GIF frames.

Add pose=<name> to a body or bust render. Every image below is live, rendered from /render/steve/body?size=384&pose=%3Cname%3E. Poses marked anim change with the frame parameter.

  • Steve in the default pose: Standing still, arms and legs straight.
    pose=default

    Standing still, arms and legs straight.

  • Steve in the walk pose: Mid-stride walk cycle; use frame to pick the phase.
    pose=walk anim

    Mid-stride walk cycle; use frame to pick the phase.

  • Steve in the run pose: Wider, faster stride with a slight forward lean.
    pose=run anim

    Wider, faster stride with a slight forward lean.

  • Steve in the wave pose: Right arm raised and waving.
    pose=wave anim

    Right arm raised and waving.

  • Steve in the sit pose: Sitting down, legs forward, as on a minecart or chair.
    pose=sit

    Sitting down, legs forward, as on a minecart or chair.

  • Steve in the sneak pose: Crouched, as when sneaking in game.
    pose=sneak

    Crouched, as when sneaking in game.

  • Steve in the point pose: Right arm pointing straight ahead.
    pose=point

    Right arm pointing straight ahead.

  • Steve in the dab pose: The dab.
    pose=dab

    The dab.

  • Steve in the zombie pose: Both arms straight out in front.
    pose=zombie

    Both arms straight out in front.

  • Steve in the tpose pose: Arms straight out to the sides.
    pose=tpose

    Arms straight out to the sides.

  • Steve in the cheer pose: Both arms raised, head tipped back.
    pose=cheer

    Both arms raised, head tipped back.

  • Steve in the think pose: Hand at the chin, head tilted.
    pose=think

    Hand at the chin, head tilted.

  • Steve in the flex pose: Both arms flexed upward.
    pose=flex

    Both arms flexed upward.

  • Steve in the salute pose: Right hand at the brow.
    pose=salute

    Right hand at the brow.

  • Steve in the dance pose: One arm up, one down, hips turned.
    pose=dance anim

    One arm up, one down, hips turned.

  • Steve in the punch pose: Right arm thrown forward, torso twisted.
    pose=punch

    Right arm thrown forward, torso twisted.

  • Steve in the shrug pose: Arms out, palms up, head tilted.
    pose=shrug

    Arms out, palms up, head tilted.

  • Steve in the jump pose: Arms back, legs tucked, as at the top of a jump.
    pose=jump

    Arms back, legs tucked, as at the top of a jump.

Per-joint overrides

A named pose is just a set of six rotations (head, torso, two arms, two legs). Every one of them can be overridden with its own parameter, and an explicit joint parameter always wins over the named pose for that joint only. That lets you start from a pose you like and nudge it.

Notch waving with the plain wave pose
?pose=wave
Notch waving with the head turned 20 degrees to look at the raised arm
?pose=wave&headYaw=-20: the wave, with the head turned toward the arm.

The joint parameters follow the pattern <part><Axis>:

PartPitchYawRollShort alias
head headPitch headYaw headRoll
torso bodyPitch bodyYaw bodyRoll
left arm leftArmPitch leftArmYaw leftArmRoll leftArm = leftArmPitch
right arm rightArmPitch rightArmYaw rightArmRoll rightArm = rightArmPitch
left leg leftLegPitch leftLegYaw leftLegRoll leftLeg = leftLegPitch
right leg rightLegPitch rightLegYaw rightLegRoll rightLeg = rightLegPitch

The four limb aliases exist because pitch is the rotation you want 90% of the time: leftArm=45 swings the left arm 45° forward and is exactly leftArmPitch=45. The torso pivots at the hips and carries the head and arms with it, so bodyYaw=30 turns the upper body while the legs stay put.

built from scratch, no named pose
https://skinrender.dev/render/853c80ef3c3749fdaa49938b674adae6/body?headPitch=-10&bodyYaw=10&leftArmPitch=20&rightArmPitch=-120&rightArmRoll=15

Sign conventions

All angles are in degrees (or radians with units=rad) and wrap around, so 370 is 10 and -90 is 270. Zero is the standing pose.

  • Pitch rotates about the side-to-side axis. Positive swings a limb forward, away from the body’s front; positive on the head tips it down. rightArm=90 holds the arm straight out in front, rightArm=180 points it straight up, rightArm=-90 swings it out behind.
  • Yaw twists about the vertical axis. Positive turns the part toward its own right, which is the viewer’s left when the model faces the camera.
  • Roll rotates about the front-to-back axis. For arms and legs positive moves the limb outward, away from the body, which is how tpose is built. On the head it tilts the head toward a shoulder.

These are model-space rotations: they do not change when you move the camera with yaw and pitch, which describe the view, not the pose.

Steve with the right arm pitched 90 degrees forward
rightArm=90: pitch, forward
Steve with the right arm rolled 90 degrees outward
rightArmRoll=90: roll, outward
Steve with the head twisted 45 degrees
headYaw=45: yaw, twist

Animation and frame

walk, run, dance, wave are cycles rather than fixed positions. frame is the phase of that cycle from 0 to 1; frame=0.5 is the opposite half of the stride from frame=0, and frame=1 equals frame=0. On the non-animated poses the parameter has no effect.

Steve walking, frame 0
frame=0
Steve walking, frame 0.25
frame=0.25
Steve walking, frame 0.5
frame=0.5
Steve walking, frame 0.75
frame=0.75

Set fit=false for every frame of an animation. With auto-fit on (the default) each frame is framed to fill the canvas individually, so a swinging arm changes the scale from frame to frame and the model appears to jitter. With it off the camera stays fixed.

Rendering GIF frames

Render ten frames, then assemble them with whatever GIF encoder you already use (ImageMagick, ffmpeg, Pillow, gifenc…). The API does not produce GIFs itself, only the frames.

bash
for f in 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9; do
  curl -s -o "walk-$f.png" \
    "https://skinrender.dev/render/069a79f444e94726a5befca90e38aaf5/body?pose=walk&fit=false&size=256&frame=$f"
done
# ImageMagick (frames sorted numerically; 10 fps; keep transparency)
convert -delay 10 -loop 0 -dispose previous $(ls walk-*.png | sort -V) walk.gif
python
import requests
from PIL import Image
from io import BytesIO

base = "https://skinrender.dev/render/069a79f444e94726a5befca90e38aaf5/body"
frames = []
for i in range(10):
    r = requests.get(base, params={"pose": "run", "fit": "false", "size": 256, "frame": i / 10})
    r.raise_for_status()
    frames.append(Image.open(BytesIO(r.content)).convert("RGBA"))

frames[0].save("run.gif", save_all=True, append_images=frames[1:],
               duration=80, loop=0, disposal=2, transparency=0)

Ten frames is a good default for walk and run; wave and dance look smoother with twenty. The frames are ordinary cacheable PNGs, so re-rendering a GIF later costs almost nothing.

Cape angle

Capes hang at capeAngle=10 degrees from the back by default. Raise it for movement (run looks right around 35–45) or set it to 0 so the cape hangs straight. It only matters when the profile has a cape and cape=true, which is the default.

text
https://skinrender.dev/render/853c80ef3c3749fdaa49938b674adae6/body?yaw=160&pose=run&frame=0.3&capeAngle=40

See the skin poses guide for a longer walkthrough, or open the playground and drag the sliders.