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.
All 18 poses
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.
-
pose=defaultStanding still, arms and legs straight.
-
pose=walkanimMid-stride walk cycle; use frame to pick the phase.
-
pose=runanimWider, faster stride with a slight forward lean.
-
pose=waveanimRight arm raised and waving.
-
pose=sitSitting down, legs forward, as on a minecart or chair.
-
pose=sneakCrouched, as when sneaking in game.
-
pose=pointRight arm pointing straight ahead.
-
pose=dabThe dab.
-
pose=zombieBoth arms straight out in front.
-
pose=tposeArms straight out to the sides.
-
pose=cheerBoth arms raised, head tipped back.
-
pose=thinkHand at the chin, head tilted.
-
pose=flexBoth arms flexed upward.
-
pose=saluteRight hand at the brow.
-
pose=danceanimOne arm up, one down, hips turned.
-
pose=punchRight arm thrown forward, torso twisted.
-
pose=shrugArms out, palms up, head tilted.
-
pose=jumpArms 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.
?pose=wave?pose=wave&headYaw=-20: the wave, with the head turned toward the arm.The joint parameters follow the pattern <part><Axis>:
| Part | Pitch | Yaw | Roll | Short 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.
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=90holds the arm straight out in front,rightArm=180points it straight up,rightArm=-90swings 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
tposeis 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.
rightArm=90: pitch, forwardrightArmRoll=90: roll, outwardheadYaw=45: yaw, twistAnimation 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.
frame=0frame=0.25frame=0.5frame=0.75Set 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.
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 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.
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.