Privacy
Language: Nederlands

Punchy! Studio for Moves packs

Make Punchy! Moves packs in Punchy! Studio: key whole-body clips and faces, wire them to emotes, watch them on your own player, export, or copy a pack you already have.

This page has not been translated into Dutch yet, so it is shown in English. Read in English

On this page

Punchy! Studio is a client mod that opens an animation workstation over your game. For Punchy! Moves it makes whole-body clips with their faces, the pack’s own looks, eye shapes and face reactions, and the compat files that decide when each clip plays. Then it writes them as a resource pack.

This page shows what every part of Studio does for Moves, then walks you through one pack from nothing to an emote on your wheel. It is for anyone making Punchy! Moves packs, with or without experience in Blockbench.

Before you start

  • Install Punchy! Studio from Modrinth or CurseForge, and Punchy! Moves from Modrinth or CurseForge. Install both for the same Minecraft version and loader: Moves comes for 1.20.1, 1.21.1, 1.21.11 and 26.3 (Getting started has the loaders for each), and Studio on Fabric needs Fabric API. Studio can edit and export Moves packs on every Minecraft version it supports, but the Game view needs Punchy! Moves installed next to it.
  • This page was checked against Punchy! Studio 1.1.1 and Punchy! Moves 1.0.0.
  • Join a world. A creative flat world is the easiest place to test. Studio is a client mod, so it does not need a server.
  • Nothing you do in Studio changes a resource pack until you export. Every export backs up the files it replaces.

Open Studio and find your way around

Press F6 in a world to open the editor, and F6 again to close it. The key is Open Animation Editor under Punchy Studio in the game’s key binds. The editor does not pause the world, so Punchy! Moves keeps running underneath it.

Studio makes packs for two mods. Pick Third Person with the switch between the menus and the workspace tabs to work on Punchy! Moves. Studio remembers the last one you used and opens in it next time.

  • Top bar. The menus of the current workspace, the perspective switch, the workspace tabs, the pack and clip you are working on (a dot means unsaved changes), and the Save and Export buttons.
  • Status bar. Hints for what is under the pointer, messages from your last action, and the current frame out of the clip’s total, the clip’s length and its frame rate.
  • Number fields work like Blender’s. Drag to scrub (hold Ctrl to snap, Shift to be precise), click to type a value or a small sum such as 90/4, and press Tab for the next field.

Hover any control for a tooltip. Press F1 in the Animation workspace for the shortcut sheet, which lists the keys of the keymap you use. The keys on this page are the Punchy Studio keymap, the default.

Edit > Preferences…, in the Animation, Face and Bindings workspaces, holds the editor’s own settings: the Keymap, for the Blender, Maya or Blockbench keys instead of Studio’s own (Pick a keymap explains them), which way and how fast the stage’s camera orbits and zooms, the floor grid and the tooltips. Both perspectives share them. Preferences lists every setting.

What each workspace is for

WorkspaceWhat you make thereWhere it ends up in your pack
AnimationWhole-body clips: keys for the bones and for the face’s channelsassets/punchy_moves/animations/
FaceLooks, eye shapes and the look each reaction playsassets/punchy_moves/faces/
BindingsCompat files: which clip plays for which moment, and your emotesassets/punchy_moves/compat/
LibraryThe packs Studio keeps and the packs in your game, and copying one in to editNothing: it opens packs into the other workspaces

Where the Model tab is in first person, the third-person perspective has the Face tab.

Your first pack, start to finish

You will make a short wave with a blink and the pack’s own cheeky look, shape it with easing, watch it on your own player, make it an emote and play it from the emote wheel.

Start a pack

  1. Join a world and press F6. Pick Third Person with the switch between the menus and the workspace tabs.
  2. Choose File > Packs (Ctrl+O). The Punchy Moves Packs menu opens.
  3. Choose New Pack, type the Pack name My Moves Pack and press Create.
File > Packs, New Pack, a name, and Create.

The new pack has one compat file and one animation file, both named after it (my_moves_pack.json), and a first clip, new_clip. Studio keeps its editable copy in punchy-studio/moves/ until you export.

Make a clip and key it

  1. Choose File > New Clip (Ctrl+N). Type the Name wave, set the Length to 1.2, tick Loop and press Create.
  2. In the outliner, select Right Arm. Press E for the rotate tool.
  3. With the playhead at 0, press I to key the arm where it rests.
  4. Move the playhead to 0.3 s: type it in the timeline’s time field, or press Right to step frame by frame. In the Transform panel, type 140 in the rotation’s Z field. Typing a value keys it at the playhead.
  5. At 0.6 s type 110 in the same field, and at 0.9 s type 140 again.
  6. Go back to the start (Shift+Left), choose Edit > Copy Pose (Ctrl+C), jump to the end (Shift+Right) and choose Edit > Paste Pose (Ctrl+V), so the loop ends where it began.
  7. Select Head, move the playhead to 0.3 s and type 8 in the rotation’s Z field for a small tilt. With this one key, the head holds the tilt for the whole clip.
  8. Press Space to play, and Space again to stop.
A new clip, keys on the right arm, the first pose copied to the end, then one key on the head.

K keys the whole pose at the playhead in one go, which is handy for blocking out a clip. The waist is its own bone: it turns the head, body and both arms about the neck.

If you have selected keys in the Dope Sheet, Ctrl+C and Ctrl+V copy and paste those keys instead of the pose. The Edit menu items always use the pose.

Shape the motion with easing

  1. Select Right Arm in the outliner and put the playhead on its key at 0.3 s (Up and Down jump between keys).
  2. Press T. Under Interpolation, choose Smooth for a curve through the keys.
  3. Press T again. Under Easing, choose Out Back. The arm now swings past 140 and settles back.
  4. Press Ctrl+Tab to see the curve in the Graph Editor.
The key menu: Smooth interpolation and the Out Back easing, drawn in the Graph Editor.

The Active Keyframe panel in the properties has the same two choices.

Key the face

A look of the pack’s own is keyed from the Face tab. These steps key cheeky, so make it first, as Looks shows further down. In the recordings it also has the gem right eye of Eye shapes.

  1. In the Animation tab, put the playhead at 0.3 s. The Face tab keys at the playhead and has no playhead of its own.
  2. Open the Face tab, select the look cheeky at the top of the Faces list and press Key in Clip (K).
  3. Back in the Animation tab, the Dope Sheet has keys at 0.3 s for Look: cheeky and for Face mix, which Studio keys with it.
  4. In the outliner, scroll to Face and select Lids. In the Face panel, set its Value to 0 at 0.9 s, 1 at 1.0 s and 0 at 1.1 s. That is a blink.
Keying the cheeky look from the Face tab and the Lids channel for a blink, then View > Game View showing the face on your own player.

Without the key at 0.9 s the lids would stay shut from the start of the clip, because a channel holds its first key’s value before it.

Watch it on your own player

  1. Choose View > Game View. The game appears beside the stage, with Punchy! Moves playing the open clip on your own player.
  2. Scrub the timeline or press Space. Your player follows. Use Front and Back to look from either side, and drag with the right mouse button to turn the player.
  3. Change a key. The Game view shows it at once.
  4. Choose View > Game View again to close it. Your player and camera go back as they were.
View > Game View: Punchy! Moves plays the clip on your own player, Front and Back turn the camera.

Make it an emote

A clip plays when a compat file names it. Here the compat file lists the clip as an emote.

  1. Open the Bindings tab (Ctrl+B) and select the pack’s compat file in the outliner.
  2. Choose File > Raw JSON (or the Raw JSON button at the top) and replace the text with the file below.
  3. The line under the text says as you type whether the game reads the file (Punchy reads this.). Press Apply. The sheet’s Verdict panel says the same.
{
  "format_version": 2,
  "defaults": { "animations": {} },
  "emotes": {
    "entries": [
      { "id": "wave", "display_name": "Wave", "animation": "wave", "face": "happy" }
    ]
  }
}
Bindings, File > Raw JSON: the emote entry, the game's verdict, and Apply.

face is the look the face plays with the emote, Happy here. The wave covers it with its own face: Face mix at 1 hands the whole face to the clip, so the emote shows the cheeky look.

Export and play it

  1. Press Ctrl+E (File > Export to Resource Pack). In Export Punchy Moves Pack, keep the Pack name, keep Turn the pack on and reload ticked, and press Export. The status bar says when the pack is on and loaded.
  2. Close the editor (F6), press F5 twice to see your player from the front, and press C to open the emote wheel. Pick Wave.
Export, the reload, and the Wave emote on the emote wheel.

Standing still, your player waves with the cheeky look, winking with pink cheeks, and blinks near the end of the wave. In the recording the look’s right eye is also the gem from Eye shapes. The face’s own blinks still run under the clip, so you may see another one now and then. Moving stops an emote. See Keys and emotes for the wheel and Camera and features for the third-person view.

What the export wrote

The pack is a folder in resourcepacks/. This is the wave clip as Studio writes it into assets/punchy_moves/animations/my_moves_pack.json. Studio’s new_clip sits next to it in the file, and your arm values may differ a little:

{
  "format_version": "1.8.0",
  "animations": {
    "wave": {
      "animation_length": 1.2,
      "loop": true,
      "bones": {
        "right_arm": {
          "rotation": {
            "0.0": [0, 0, 0],
            "0.3": { "post": [0, 0, 140], "lerp_mode": "catmullrom", "easing": "easeOutBack" },
            "0.6": [0, 0, 110],
            "0.9": [0, 0, 140],
            "1.2": [0, 0, 0]
          }
        },
        "head": {
          "rotation": { "0.3": [0, 0, 8] }
        },
        "face_look_cheeky": { "position": { "0.3": [0, 1, 0] } },
        "face_mix": { "position": { "0.3": [0, 1, 0] } },
        "face_lids": {
          "position": { "0.9": [0, 0, 0], "1.0": [0, 1, 0], "1.1": [0, 0, 0] }
        }
      }
    }
  }
}

Face channels are bones whose names start with face_, and the value is the bone’s position Y (the pupils use X and Y). The head, the look and Face mix are keyed once each, so each holds its value for the whole clip. To fade the look in and out, set the Look: cheeky channel’s Value to 0 at the start and at the end. The sections below explain every part of this file. The animation file format itself is in Animation files.

The Animation workspace

The Animation workspace shows the whole player with your skin on the stage, the Outliner and Properties on the right, and the Dope Sheet below.

  • Stage. The player as Punchy! Moves poses it, with your skin. The note in its corner says it shows the clip alone, as the alignment run plays it. Select a bone by clicking it or in the outliner, and pose it with the gizmo: W moves, E rotates, R scales. Shift or Ctrl click selects several, as Select several body parts shows. The waist has a handle of its own, and so do both item bones. With the Punchy Studio keymap, drag with the middle or right mouse button to orbit, with Shift to pan, and scroll to zoom.
  • Outliner. The rig as an armature (below), the face’s channels under Face, and the pack’s animation files with their clips. Search clips finds one by name, and a click opens it. Bones a clip keys that the game ignores are listed under Ignored by the game.
  • Properties. The Clip panel (the file, the clip’s name, Length, Loop and Frame Rate), the selected bone’s Transform (or the Face panel for a face channel), the Active Keyframe under the playhead, and Checks.
  • Dope Sheet and Graph Editor. Every key of the clip. Ctrl+Tab switches to the Graph Editor to shape curves. The Dope Sheet selects keys as in first person: click a key, Shift or Ctrl click to add or remove one, drag across empty space to box-select, and drag a selected key to move them all. Select and edit several keys has the rules.

Checks lists everything the game would read differently from what you see: a value it cannot read, a bone it ignores, an easing name it does not know. The line “The game reads every key of this clip as written.” means there is nothing to fix. A key after the clip’s end is noted in the Active Keyframe panel when the playhead is on it: the game never reaches its value, but the key still shapes the motion before the end.

The bones

The rig and the names the file uses
KeyTypeWhat it does
rootboneRoot. Moves the whole player.
waistboneWaist. A virtual bone: the game folds it into the head, body and both arms, so it turns the upper body about the neck. Legs, the root and the item bones do not follow it.
headboneHead. The hat layer follows it.
bodyboneBody. The jacket layer follows it.
right_armboneRight Arm.
left_armboneLeft Arm.
right_legboneRight Leg.
left_legboneLeft Leg.
right_itemboneRight Item. Poses the held item in the right hand, in actions that hold one. Position, rotation and scale apply in the hand, after the arm.
left_itemboneLeft Item. The same for the left hand.

Position is in pixels, rotation in degrees, and scale multiplies the part (1 is no change). Bone names are not case sensitive in the file. A bone Punchy! Moves does not know keeps its keys, but nothing follows them, and Checks says so.

Select several body parts

Shift or Ctrl and a click on a body part, in the outliner or on the stage, adds it to the selection, or takes it out again. The part you added last is the active one: the Transform panel shows it and the gizmo sits on it. The other selected parts are outlined in a fainter blue on the stage and highlighted more softly in the outliner. A plain click selects one part again.

  • I keys the same channel of every selected part at the playhead, as one undo step.
  • The gizmo moves them together. Each part turns or moves by the same amount from its own pose, and a scale multiplies each part’s own scale by the same factor.
  • K keys the whole pose of every part the clip keys already and of every selected part.
  • With no key selected in the Dope Sheet, Alt+I, X or Delete deletes the active part’s key at the playhead, and the key at that time and on that channel of every other selected part that has one.
  • Only Show Selected, in the timeline’s View menu and as a button in its header, shows the rows of every selected part.
  • Typing a value in the Transform panel changes the active part only.
  • Face channels are selected one at a time: Shift or Ctrl click on one selects it on its own.

Making and keying clips

  • File > New Clip (Ctrl+N) adds a clip to the open animation file, and File > New Animation File starts a new file. Duplicate Clip, Rename Clip (F2) and Delete Clip are in the same menu. File > Delete Animation File removes the open file with its clips, and Undo brings it back.
  • Move the playhead, pose a bone, and press I to key the active channel, or K to key the whole pose. Alt+I, X or Delete deletes the selected keys, or the key at the playhead when none is selected. Typing a value in a Transform field keys it there too.
  • Edit > Copy Pose, Paste Pose and Paste Flipped Pose (Ctrl+C, Ctrl+V, Ctrl+Shift+V) move a whole pose between times or clips, flipped from one side to the other. With keys selected in the Dope Sheet, Ctrl+C and Ctrl+V copy and paste those keys with their timing instead.
  • Ctrl+A selects every key in the rows the Dope Sheet shows and Ctrl+Shift+A clears the selection. Alt+Left and Alt+Right move the selected keys one frame, ten with Shift.
  • Clip > Mirror to Twin (Ctrl+Shift+M) builds a clip’s other side: _left from _right and back. It works on clips whose name ends in _left, _right, _left_alt or _right_alt.
  • For an action done with one arm, the game plays the clip named for the arm that acts: wave_right for the right arm, wave_left for the left, and the plain name wave when the side clip is missing. Moves does not mirror a side clip for you, so make both (Mirror to Twin does it in one step).
  • Clip > Set Length to Last Key and Take Length from Keys set the length. With Take Length from Keys, the clip has no written length and the game uses the last key of any bone.
  • Keys snap to the clip’s frame rate. Turn off View > Snap to Frames to place a key exactly where the playhead is, between frames too (type the time in the timeline’s time field). Packs made elsewhere often have keys between frames.
  • A clip’s name can use letters, digits, _, ., :, / and -. It is what compat files use to play the clip.
  • Loop writes "loop": true. Not looping removes it, because the game loops a clip only when loop is the JSON value true.
  • The Separate Pre Value switch in the Active Keyframe panel gives a key a second value to arrive with, for an instant change at that time (the key’s pre value).

Interpolation and easing

Press T with a key under the playhead to open its menu. The properties have the same two choices.

  • Interpolation: Linear, Smooth or Constant. Smooth writes lerp_mode as catmullrom, a curve through the keys. A segment is smooth when the key it starts from or the key it ends on says so. Constant holds the key’s values until the next key, then jumps to that key’s values. Each channel’s key has its own mode.
  • Easing: None, or any curve of easings.net: Sine, Quad, Cubic, Quart, Quint, Expo, Circ, Back, Elastic and Bounce, each In, Out or In-out. It shapes the motion into that key, before the key’s interpolation runs, and the Graph Editor draws it. Back and Elastic overshoot, and Bounce bounces.
Members of a key
KeyTypeDefaultWhat it doesExample
post[x, y, z]The value the key holds and leaves with. vector means the same when post is missing.
pre[x, y, z]the key's postThe value the motion arrives at this key with. Separate Pre Value writes it.
lerp_modestringlinearOnly catmullrom (any case) changes the curve. Any other text plays as linear. Studio's Constant writes step and holds through the next key's pre.
easingstringnoneOne of the 30 curves below. It shapes the segment that ends on this key. linear, a name Moves does not know, or text that is not a string means no easing.easeOutBack

A key written as a plain list of three numbers is always linear with no easing. Studio turns it into an object the moment you give it a mode or an easing, as in the file above.

Punchy! Moves plays every lerp_mode but catmullrom as linear, so Studio writes a Constant key as "lerp_mode": "step" and gives the next key a pre with the held values: the motion stays put until that key, then jumps. Studio writes the hold again whenever you change the clip, and taking the key off Constant, moving it or deleting it takes that pre away again. A step key in a pack made elsewhere plays as linear in the game, and the Active Keyframe panel says so. Change anything in its clip in Studio and the hold is written in, so the clip you export holds there too. Keep the key after a Constant key off Smooth: a smooth segment bends toward the keys around it, so the pose can drift instead of holding.

The 30 easing names are ease, then In, Out or InOut, then the family: Sine, Quad, Cubic, Quart, Quint, Expo, Circ, Back, Elastic or Bounce. For example easeInSine, easeOutBack and easeInOutBounce. Punchy! Moves reads them ignoring case, underscores, dashes and spaces. It plays the easing exactly as Studio shows it. See Animation files.

The face in a clip

Under Face in the outliner are the face’s channels. Select one and set its Value in the Face panel (the Pupils have X and Y): the value is keyed at the playhead, and the stage’s head shows the face as the game draws it. In the file, each channel is a bone whose position holds the value, usually in Y.

A clip can also name one look for its whole length with a clip-level "face": "happy" key, or "face": { "look": "happy", "mix": 1 }. Studio writes the keyed bones instead.

Face channels
KeyTypeDefaultWhat it does
face_mixnumber0Face mix. How much the clip's face takes over from the reactions the game plays, 0 to 1. At 1 the face is only what the clip keys. Studio keys it at 1 for you when you key a look and the clip has none. A clip's face shows over reactions with a priority of 1135 or lower. Seven stronger ones (Creeper, Warden, Hurt, Hit from behind, In lava, Asleep and Dying) show over it; see Face reactions.
face_look_<name>number0Look: name. How much of a look the clip holds, 0 to 1. The name can be one of the pack's looks or a built-in one. When two bones name the same look, their weights add up.
face_shape_<name>_rightnumber0Right eye: name. Past 0.5 the avatar's right eye takes this eye shape: one of the pack's shapes, else a built-in one. If several shapes are past 0.5, the strongest wins.
face_shape_<name>_leftnumber0Left eye: name. The same for the left eye.
face_shape_<name>number0Both eyes: name. A shape bone with no side sets both eyes.
face_lidsnumber0Lids. How far both top lids close, 0 (open) to 1 (shut), on top of the looks the clip holds.
face_lid_rightnumber0Right lid. The avatar's right top lid, for a wink.
face_lid_leftnumber0Left lid. The left top lid, for a wink.
face_slantnumber0Lid slant. Steps the top lids toward the nose for a cross look (up to 1) or away from it for a sad look (down to -1).
face_lowernumber0Lower lids. How far the lower lids rise, 0 to 1.
face_cheeksnumber0Cheeks. How far the cheeks push the lower lids up, as in a smile, 0 to 1.
face_widenumber0Wide eyes. How far the whites of the eyes grow upward, 0 to 1 texel.
face_pupilsnumber, number0, 0Pupils. Where the pupils sit, in texels: X toward the avatar's left, Y up. Both values are keyed together.
face_browsnumber0Brows. How far both brows move, in texels, up positive.
face_brow_rightnumber0Right brow. One brow, in texels, up positive.
face_brow_leftnumber0Left brow. The other brow.
face_tiltnumber0Brow tilt. Tilts the inner ends of the brows, -1 to 1: up for a worried look, down for an angry one.
face_swingnumber0Pupil sway. How far the pupils sway from side to side on their own. The game does not clamp it; 0 to 1 is the usual range.
face_tremblenumber0Tremble. How much the pupils tremble. The game does not clamp it (0 to 1 is the usual range) and scales it by 0.25 when it draws.
face_bobnumber0Brow bob. How much the brows bob up and down on their own. The game does not clamp it (0 to 1 is the usual range) and scales it by 0.3 when it draws.
face_blushnumber0Blush. Pink on the cheeks, 0 to 1.
face_tearsnumber0Tears. Tears running from the eyes, 0 to 1. Past 0.35 drops fall.
face_sweatnumber0Sweat. A drop of sweat on the forehead, shown past 0.35.
face_bagsnumber0Eye rings. Dark rings under the eyes, 0 to 1.
face_angernumber0Anger vein. The vein on the forehead, shown past 0.35.
face_sparklenumber0Glint. A second glint low in each pupil, shown past 0.35 when the player's Eye sparkle is Line or Dot.
face_blink_offnumber0No blinks. Past 0.5 the face does not blink on its own while the clip plays.

Face keys take lerp_mode and easing like any other key. A bone whose name starts with face_ but is not in this table changes nothing on the face, though its keys still count toward the clip’s length.

The stage and the Face tab find the eyes on your skin the way Punchy! Moves does, every eye layout included: two eyes, one eye in the middle, eyes that touch, eyes of two colors or at two heights, one eye with the other under hair, and dark eyes without a white. They follow the game’s order: the marks you made yourself in Punchy! Moves’ face editor on this computer, then the face marker in the skin, then what Moves finds on its own. Marks you make or reset in the face editor show in Studio within about a second. See Faces and the face marker.

The Face workspace

The Face tab is where a pack’s faces are made. On the left is the Faces list: the pack’s looks over the built-in ones, the eye shapes, and every reaction by section, with Search faces. In the middle is your skin’s face, large, with the texel grid and the eyes the game found. On the right are the properties of what you picked. If your skin has no eyes the face can find, the middle says so and suggests a skin with clear eyes. Eyes you mark by hand in Punchy! Moves’ face editor count here too.

View > Show Blinks (B) plays the face’s own blinks in the preview, and Show Texel Grid (G) turns the grid on and off. Delete removes a look or shape of the pack.

Looks

A look is a whole expression: how far each part of the face moves and which shape each eye takes.

  1. Choose File > New Look (Ctrl+N), type the Name cheeky and press Create. Names use lowercase letters, digits and underscores.
  2. Set Extends to happy. Every part the look does not set now comes from Happy.
  3. Set Left lid to 1 for a wink, Blush to 1 and Brow tilt to -0.5. The preview shows each change as Punchy! Moves draws it.
  4. To use the look in a clip, put the playhead where you want it in the Animation tab, come back and press Key in Clip (K).
File > New Look: a name, Extends, then the lid, blush and brow tilt fields.

A built-in look offers Change in Pack, which writes the pack’s own version under the same name, so your version plays wherever that look plays. It also offers New Look from This. A look with a built-in name replaces that look everywhere it plays. A drawn eye shape with a built-in name replaces that shape the same way; only the painted open eye and its blank white cannot be replaced.

The fields of a look and the keys they write
KeyTypeDefaultWhat it does
extendslook nameExtends. Starts from another look, built in or from the pack. Every part you do not set comes from it. An unknown name leaves the look out of the game.
lidsnumber0Lids. Both top lids, 0 to 1.
lid_right, lid_leftnumber0Right lid, Left lid. One eye shut at least this far. A wink is "lid_left": 1.
slantnumber0Lid slant, -1 to 1.
lowernumber0Lower lids, 0 to 1.
cheeksnumber0Cheeks, 0 to 1.
widenumber0Wide eyes, in texels, 0 to 1.
pupils[x, y]centeredPupils X and Pupils Y. X toward the avatar's left, Y up, in texels.
browsnumber or [right, left]0Both brows in texels, up positive. Studio's Right brow and Left brow fields write brow_right and brow_left.
tiltnumber0Brow tilt, -1 to 1.
swing, tremble, bobnumber0Pupil sway, Tremble, Brow bob. The game does not clamp them; 0 to 1 is the usual range. Tremble is scaled by 0.25 and bob by 0.3 when the face is drawn.
blush, tears, sweat, bags, anger, sparklenumber0Blush, Tears, Sweat, Eye rings, Anger vein, Glint. The marks.
eyesshape name or [right, left]openRight eye and Left eye. The shape each eye takes: open is the painted eye, blank is its white alone, or any built-in or drawn shape.
blinknumberunset (the look it extends keeps its pace; otherwise the usual pace, unless another reaction that applies at the same time sets one)Own blink pace. How often the face blinks while this look plays: 1 is the usual pace, 0 never blinks, and more than 1 is more often. A look on a reaction with a priority below 360 gives way to the usual pace while you walk, and below 260 while you stand still, because those two reactions set the pace first.

Here is the cheeky look as a file, assets/punchy_moves/faces/looks/cheeky.json:

{
  "extends": "happy",
  "lid_left": 1,
  "blush": 1,
  "tilt": -0.5
}

Looks and shapes sit in the pack as faces/looks/<name>.json and faces/shapes/<name>.json. The built-in looks are in the Faces list, and Faces in packs and clips explains the files.

Eye shapes

An eye shape is pixel art for an eye, drawn on a grid of half texels, one grid per eye size.

  1. Choose File > New Eye Shape (Ctrl+Shift+N), type the Name gem and press Create. The shape starts with empty grids for eyes one and two texels tall.
  2. The grid opens at the eye size your skin’s eyes use. The Eye size list marks it as on your skin.
  3. Set Color to Own color and type #4FC3F7 in the Color 1 field. On the grid, paint a gem with the pointer: the two middle squares of the top row and the whole bottom row. This is color 1.
  4. Under Colors, press + to add color 2. The new color is picked. Choose a dark blue in the picker below the field, then click the second square of the bottom row.
  5. Press + again for color 3, choose white in the picker and click the third square of the top row for a glint.
  6. Click a swatch to paint with that color again. Right-click one of colors 2 to 9 for Remove color.
  7. Leave Mirror for the left eye ticked, so both eyes point the same way from the nose.
A new eye shape painted on the grid your skin's eyes use: color 1 typed in, colors 2 and 3 added with + and picked in the picker, then the Remove color menu of a swatch.

Give the shape a grid for every eye size you want it on. The menu under Grid size, left of Remove size, reads None and lists the sizes the shape has no grid for yet: pick one to add an empty grid of that size. Remove size takes away the grid of the size shown. An eye with no grid of its size takes the nearest one, kept in its middle. A built-in shape offers Redraw in Pack, except the painted open eye and its blank white. To use a shape, pick it by name in a look’s Right eye or Left eye field. With the gem shape made, setting the cheeky look’s Right eye to gem adds "eyes": ["gem", "open"] to the look’s file, the right eye first.

The settings of an eye shape
KeyTypeDefaultWhat it does
gridsobjectOne drawing per eye size, named by columns and rows in half texels: 4x2 is an eye two texels wide and one tall, 4x4 is two by two. Each row is a text. # paints the shape's own color, 2 to 9 paint its other colors, and . paints nothing. Rows must all be as wide as the grid, and the grid as tall as it says.
closedbooleanfalseClosed eye. The eye is closed in this shape, so blinks pass it by.
on_whitebooleanfalseOn the white. The shape is drawn over the eye's white instead of over the lid's skin.
mirrorbooleantrueMirror for the left eye. The left eye gets the drawing mirrored. An eye in the middle is never flipped.
color"line" or #RRGGBBlineColor: Eye line or Own color. line draws color 1 in the eye's own dark line color, so it follows each skin (or the line color the player picked in Moves).
colorsobjectUp to eight more colors, by the digit the grids use, from "2" to "9", each as #RRGGBB.

The gem shape as the steps write it on a skin whose eyes use the 4x2 grid, assets/punchy_moves/faces/shapes/gem.json. In the rows, # is color 1, 2 and 3 are colors 2 and 3, and . is empty. In the recording the picker gives colors 2 and 3 the values #052838 and #FBFAF7. Type those in the Color 2 and Color 3 fields to get the same file.

{
  "closed": false,
  "color": "#4FC3F7",
  "on_white": false,
  "mirror": true,
  "grids": {
    "4x2": [".#3.", "#2##"],
    "4x4": ["....", "....", "....", "...."]
  },
  "colors": { "2": "#052838", "3": "#FBFAF7" }
}

The 4x4 grid, for eyes two texels tall, is still empty, so such eyes would show none of the gem. Pick it in Eye size and paint it too, or press Remove size while it is shown, so that those eyes take the 4x2 drawing.

Reactions

Under Reactions in the Faces list is every moment the face reacts to, grouped by section: Always, Standing about, Running and crouching, and the rest. Pick one to see when it fires and what it plays. There are 119.

  1. Click Reactions in the Faces list to open it (or type in Search faces), and find Starting a run under Running and crouching.
  2. Set Plays to cheeky. From now on, starting a run makes this face.
  3. To make it outrank or give way to other reactions, tick Own priority and change Priority.
  4. Reset Reaction leaves a reaction as the game has it.
The cheeky look's Right eye set to gem, then Starting a run set to play cheeky, picked at the end of the Plays list.

The strongest reaction that applies sets the whole look, so a higher priority wins. The preview in the middle says “This pack makes the reaction play the look” and the name. Studio writes your changes into faces/triggers.json: a bare look name, or an object with look and priority. A reaction you set back to the game’s own has no entry.

{
  "kickoff": { "look": "cheeky", "priority": 420 }
}

Every pack’s faces/triggers.json is read, and a higher pack’s entry for a reaction replaces the lower pack’s entry whole, priority included.

kickoff is the id of Starting a run, which has priority 410 and plays Excited as the game has it. Every reaction, its id and its priority are in Face reactions.

The Game view does not preview your reaction changes. Export, and start a run in third person to see it.

The Bindings workspace

The Bindings tab (Ctrl+B, or File > Compat Files) edits the pack’s compat files, which wire clips to what the player does: which clip plays for which moment and held item, the cameras, and your emotes.

  • The outliner lists each compat file and every object in it, as the format reads it, with Search.
  • Select an object to edit its fields in the sheet, each with the game’s default as its hint. Text, numbers, switches, choices and lists are edited in place. Fields that hold whole structures (actions with variants, sequences, overlays and the like) open as JSON of their own. A member the game does not read at that place is marked, and one that would make the game drop the file says so.
  • File > Raw JSON (or the Raw JSON button above the sheet) opens the whole file as text, says as you type whether the game reads it, and keeps it exactly as typed. Format tidies the text. The sheet’s Verdict panel shows the same answer for the selected file: The game reads it or The game drops this file.
  • File > New Compat File (or the button above the sheet) adds a file the format accepts, with empty default animations. File > Delete Compat File removes the selected one. Undo brings it back.
Keys of an emote
KeyTypeDefaultWhat it doesExample
menu_keykey nameCIn the emotes object. The key that opens the emote wheel. The last file that sets it decides the default. The key is bound the first time the emote keys are installed in a game session, so a reload does not move it, and a key the player has set keeps winning.
entriesarrayIn the emotes object. One object per emote.
idstringthe animation nameThe emote's identity. Two entries with the same id share one key bind.
display_namestringthe idThe name on the wheel and in the key binds. Two emotes with the same name get two key binds with that name.Wave
animationRequiredstringThe clip to play, spelled exactly as it is in the animation file. An entry without it is skipped, and if no animation file defines this clip, the emote is left off the wheel.
facestringhappyThe look the face plays with the emote. Use one of the built-in look names, in lowercase.
keybindkey nameunknown (no key)A key for this emote alone, such as H or J. Players can change it in the game's Controls.H

Every compat key and action is in Compat files, and Emote recipe shows an emote end to end.

The Library

The Library tab, or File > Packs (Ctrl+O), opens the Punchy Moves Packs menu. It has three parts.

  • New Pack starts a pack with one compat file and one animation file named after it, and a first clip, new_clip.
  • Your packs lists the packs Studio keeps. Pick one to open it. The one you are working on is marked.
  • Copy a pack from the game lists every resource pack in your resourcepacks folder, folder or zip, that holds Punchy! Moves clips or compat files in assets/punchy_moves, active or not.

Everything a pack holds is in Studio: its compat files, its animation files with their clips, and its face files (looks, eye shapes and reaction changes).

Copy a pack from the game

Use this to keep working on a pack you already have, to learn how a pack is made, or to merge your clips into one. The pack you start from is only read.

  1. Put the pack in your resourcepacks folder.
  2. Press F6, pick Third Person, and choose File > Packs (Ctrl+O).
  3. Under Copy a pack from the game, pick the pack. Studio makes a copy named <pack> Studio, keeps it with your packs and opens it. The status bar says how many files it copied.
  4. In the outliner, the pack’s animation files are listed below the rig with their clips. Type in Search clips to find one, and click it to open it.
File > Packs, then Copy a pack from the game: My Moves Pack, exported earlier on this page, becomes an editable copy called My Moves Pack Studio.

In the recording, Copy a pack from the game lists the example pack provided by Crafto, Fluid & Foolish, the animation pack for Punchy! Moves that the demos on this wiki use, and My Moves Pack, the pack this page exported. Studio copies My Moves Pack and opens the copy with its clips in the outliner. Picking the example pack copies it the same way.

A copy keeps every file byte for byte, so exporting it unchanged writes the same files. If Studio already keeps a copy with that name, it asks whether to replace it with a fresh one. Replace throws away the editing you did in that copy.

Build from Pack is the First Person Library’s button for Punchy! packs. It builds a new pack from a pack of clips, rules, model parts and item models. See Punchy! Studio for Punchy! packs.

Change an existing pack

  1. Open a clip and look at Checks in the properties. It lists anything the game reads differently from what is written.
  2. Scrub and play it on the stage, or turn on View > Game View to see it on your own player.
  3. Change keys as in your first clip. Packs made in other tools often have keys between frames: turn off View > Snap to Frames to edit them where they are.
  4. To change when clips play, open the Bindings tab, or use File > Raw JSON for a bigger change.
  5. Press Ctrl+E and export.

The Game view

View > Game View shows the game beside the stage, with Punchy! Moves playing the open clip on your own player. Scrubbing moves your player to the playhead, Play plays it there, and every change shows at once, the pack’s looks and eye shapes included, before you export anything. Front and Back turn the game’s camera to look at your player from in front or from behind. Drag with the right or middle mouse button to turn the player. Closing the Game view or the editor gives your player and your camera back as they were.

  • Studio’s stage is a replica of how Punchy! Moves poses the player. The Game view is the game itself.
  • It needs Punchy! Moves with Studio’s live preview, which Moves 1.0.0 has. Without Moves, the view says to install it. With a Moves build that has no live preview, it says to update it.
  • If Moves cannot read the clip, the view says why. If it leaves out part of the face, it names what.
  • Reaction changes are not sent to the game, so they do not preview there.

See also Game view and live preview.

Export

File > Export to Resource Pack (Ctrl+E, or Export at the top right) opens Export Punchy Moves Pack. Type the Pack name, which is a new folder in resourcepacks/ or an earlier export, and keep Turn the pack on and reload ticked (it is by default) to put the pack on top of your packs and reload, so Punchy! Moves reads it right away. The window says how many compat and animation files it writes and whether the game would drop any of them as they are.

  • Every file goes at its own path under assets/punchy_moves/, the folder Punchy! Moves reads. If the pack has no pack.mcmeta, Studio writes one that covers the game’s format. One Studio wrote earlier is widened to cover it, and one someone else wrote is left as it is.
  • Files you did not touch keep every byte. In an edited animation file only the clips you changed are written again, so packs of hundreds of clips keep every other clip exactly as written.
  • Files an export replaces are backed up under .editor-backups/ in the pack. A file the last export wrote that no longer belongs to the pack is taken out, unless it was changed outside the editor since. Then it stays, and the status bar says how many.
  • A pack that Punchy! Studio 1.1.0 exported is put right the same way on its next export: its files go to assets/punchy_moves/, and the copies 1.1.0 wrote go to .editor-backups/.
  • .editor-projects/third_person.json records what the export wrote.
Path in your packWhat it holds
assets/punchy_moves/animations/<file>.jsonThe clips
assets/punchy_moves/compat/<file>.jsonThe compat files
assets/punchy_moves/faces/looks/<name>.jsonA look
assets/punchy_moves/faces/shapes/<name>.jsonAn eye shape
assets/punchy_moves/faces/triggers.jsonThe looks and priorities of the reactions you changed

Export a Blockbench rig

Choose File > Export Blockbench Rig to write the player as a Blockbench model for people who animate in Blockbench.

File > Export Blockbench Rig: the status bar names the folder it wrote.

It writes punchy-studio/blockbench/<pack>/ in your game folder:

  • <pack>_rig.bbmodel and <pack>_rig_slim.bbmodel: the player as Punchy! Moves poses it, with classic and slim arms. The one that matches your player’s arms wears your skin when Studio can read it. It has the bones Moves reads at the game’s own pivots, with a hand guide on each item bone, and beside the head a knob for each face channel and a bone for every look and every drawn eye shape, your pack’s own included. A short example animation, example_wave, shows how it is keyed.
  • punchy_moves_rig.js: the Blockbench plugin. It draws the face Punchy! Moves draws on the rig’s head as you scrub and play, and its Moves Face panel keys a look, an eye shape or a channel at the playhead. Right-click a key and choose Easing (Punchy Moves) for the same curves as Studio.

Animate in Blockbench’s Animate tab, then choose Animation > Export Animations into your pack’s assets/punchy_moves/animations/ folder, which Punchy! Moves reads and Studio copies packs from. Then copy that pack in to Studio (see Copy a pack from the game above) to bind it and watch it in the Game view. The step-by-step setup, with the downloadable rig and plugin, is on The Blockbench rig.

Punchy! Moves plays the export as Blockbench shows it, with two small differences. Moves bends the waist its own way, so a strong waist bend moves the arms a little differently in game. And the hand guides only show the hand, not your item.

When to use Studio, and when Blockbench

Both make Punchy! Moves clips. Studio is the one that plays them on your own player in the real game while you work, makes the faces, and writes the compat files. Blockbench is the one to use if you already animate there.

You want toUse
Pose the whole body and see it on your own player straight awayStudio (Animation and Game view)
Make a look, a drawn eye shape or a reaction, and see it on your skinStudio (Face)
Choose which clip plays for which moment, and make emotesStudio (Bindings)
Keep working on a pack you already have, changing only some clipsStudio (Copy a pack from the game)
Animate with Blockbench’s tools and your own habitsBlockbench with the rig, then copy the pack in to Studio
Key a look, an eye shape or a face channel from a panel while you animateBlockbench with the plugin

A good split for a bigger pack: animate in Blockbench, export the animations into your pack, copy the pack into Studio, make the faces, bindings and emotes there, check everything in the Game view, and export.

Controls

These are the defaults of the Punchy Studio keymap in the Third Person perspective. Press F1 in the Animation workspace to see the keys of the keymap you use.

Everywhere

ControlAction
F6Open or close the editor
EscClose a menu or dialog, cancel a transform or stop playback, then return to the Animation workspace (or close the editor from there)
Ctrl+ZUndo
Ctrl+Shift+Z or Ctrl+YRedo
Ctrl+SSave the pack’s editable copy
Ctrl+EExport the pack

These are Studio’s keys. In the game itself, Punchy! Moves listens for two fixed keys when no screen is open: G re-reads every Moves file and plays the pack’s alignment action (it has no entry in Controls), and F (the default swap-hands key, but Moves listens for F itself, so rebinding swap hands does not move it) also plays the pack’s item switch.

Animation workspace

ControlAction
Ctrl+NNew clip
F2Rename the clip
Ctrl+OPacks (the Library)
Ctrl+BCompat files (the Bindings workspace)
W / E / RMove, rotate or scale the selected bone
FFrame the selected bone
IKey the channel of the field under the pointer, otherwise the active channel, on every selected part
KKey the whole pose
Alt+I, X or DeleteOver a row’s name, remove that row. Over a Transform field, delete that field’s key at the playhead. Otherwise delete the selected keys, or the key at the playhead when none is selected.
TInterpolation and easing of the key at the playhead
Ctrl+C / Ctrl+VCopy or paste the selected keys with their timing, or the pose when no key is selected
Ctrl+Shift+VPaste the pose flipped
Ctrl+A / Ctrl+Shift+ASelect every key in the Dope Sheet / clear the selection
Alt+Left / Alt+RightMove the selected keys one frame earlier or later, ten with Shift
Ctrl+Shift+MMirror the clip to its twin
SpacePlay or pause
Left / RightPrevious or next frame
Shift+Left, Shift+Right, EndJump to the start or end
Up / DownPrevious or next key
HomeReset the stage view, or view the whole clip over the timeline
Ctrl+TabSwitch between the Dope Sheet and the Graph Editor
Ctrl+TShow seconds or frames

Face workspace

ControlAction
Ctrl+NNew look
Ctrl+Shift+NNew eye shape
KKey the selected look in the open clip
DeleteDelete the selected look or shape of the pack
BShow the face’s own blinks
GShow or hide the texel grid

Mouse

With another keymap, the stage orbits and pans as Pick a keymap says, and Edit > Preferences… sets which way and how fast it orbits and zooms. The Game view always turns the player with the right or middle button.

ControlAction
Shift or Ctrl click a body part, in the outliner or on the stageAdd it to the selection, or take it out
Middle or right mouse buttonOrbit the stage, or turn the player in the Game view
Shift + middle or right mouse buttonPan the stage
Scroll over a stageZoom
Ctrl while transformingSnap
Shift while transformingPrecise adjustment
Click or drag the rulerMove the playhead. Hold Shift to ignore snapping
Click a keySelect it and move the playhead there. Shift or Ctrl click adds it to the selection or takes it out
Drag across empty space in the Dope SheetDraw a box that selects the keys in it. Shift adds them and Ctrl takes them out
Drag a keyMove it in time. A selected key moves every selected key
Double-click a channel rowInsert a key where you click
Scroll over the timelineZoom around the pointer

How Studio saves

Saving and exporting are separate. Save (Ctrl+S) keeps the pack’s editable copy and never changes a resource pack. Export writes into the pack you name, and only there.

Path in the game folderWhat it holds
punchy-studio/moves/<pack>.jsonThe editable copy of a Moves pack
punchy-studio/blockbench/<pack>/The Blockbench rig from Export Blockbench Rig
resourcepacks/<pack>/What you export, with .editor-projects/ and .editor-backups/
config/punchy_studio.jsonYour keymap and the settings of Edit > Preferences…, shared with the First Person perspective

Undo keeps the last 40 steps of the pack you are working on, and opening another pack starts a fresh history. Source packs stay untouched, and so does anything in the destination pack that Studio does not manage.

Things to know

  • A new clip plays nowhere until a compat file names it. Add it as an emote, or wire it in the Bindings tab, or the game never plays it. Renaming a clip does not change the compat files that name it, so rename it there too.
  • Check the Verdict before you export. One wrong key in a compat file drops the whole file, and the export window counts the files the game would drop. A compat file with format_version set to 2 may hold only these root keys: $schema, format_version, defaults, item_groups, items, empty_hand, variables, cameras and emotes.
  • One broken clip can lose the rest of its file. If a clip’s bones is not an object, the game loses that clip and every clip after it in the file. Checks names it.
  • Only true loops. The game loops a clip only when loop is the JSON value true. Any other value plays once.
  • A channel holds its first key’s value before it. Key a blink’s open lids at the start, or the lids stay shut from time 0.
  • Two keys at the same time collide. If two key times are the same number, the game keeps only the later one.
  • A key needs a list or an object. "0.3": 140 is skipped, and a channel that is a bare number or a string is ignored. Write "0.3": [0, 0, 140] or "0.3": { "post": [0, 0, 140] }. Checks names a skipped key.
  • Clip names should be unique across a pack. The game reads animation files in path order, and when two files hold a clip of the same name, the one read later replaces the earlier one.
  • Emotes need you to stand still. An emote starts only while you are on the ground, not moving and not sprinting, and moving cancels it. Only you see your own emotes. An emote’s face takes a built-in look name in lowercase. A pack’s own look there plays Happy instead.
  • Studio’s stage is a guide, the Game view is the truth. If they differ, trust the Game view.
  • The narrator. Minecraft’s narrator also listens for Ctrl+B. If it starts talking, open the Bindings workspace with its tab instead and switch the narrator off in the game’s Accessibility settings.

Last checked against the mod on 30 October 2026.