Loading...
Loading...
Use when animating a character or prop in Maya through Python: a walk or run cycle, a jump or landing, a heavy lift, throw or punch, an acting or dialogue shot, lip sync, eye darts and blinks, stepped blocking, splining, polish, Graph Editor tangents, animation layers, mocap cleanup or retargeting, game clips and root motion, or reviewing a playblast. Also when motion looks floaty, weightless, mushy, poppy, posey, sliding or chattery, or feet slap or skate.
npx skill4agent add scenario-labs/skills scenario-maya-animationnpx skills add scenario-labs/skills --skill <name>scripts/mx_anim.py| Input | Why it changes the plan | Default when the brief is silent |
|---|---|---|
| Style and destination | squash, stops, closeness to reference: cartoony pushes; live action needs pose squash and no dead stops (Elver); VFX stays near reference (Neistadt) | realistic feature quality |
| Frame rate | timing numbers, | 24 fps ( |
| Weight and strength | frames of resistance and of overcome (Wade: decide both numbers first) | heavy: resistance beat of 2+ frames, no hang |
| Rig | control names, IK/FK, spaces, foot roll attribute (map once with | hands in IK, no IK/FK or space switches inside a shot (Newman) |
| Camera | a locked shot camera is the only judge; games also need every angle and the engine | build the shot camera, lock it |
| Reference, audio | landmarks (contacts, takeoff, apex, landing, blinks, darts) give rhythm, then push (Neistadt) | beat list from the brief |
| Game metrics | speeds and heights agreed in round numbers before animating (Newman); root motion or in place (Epic) | in place, metrics sheet requested |
A.store_plan(plan)A.air_frames(rise, drop)mx_validate.validate(profile="shot", rules={"fps": 24})A.proxy_boxes()A.ballistic_keys()A.scale_curve(root, "translateY", 0.8, rest_y, time=crouch)A.evaluate_gates()proxy_curves.pngA.set_key_defaults("blocking")A.key_pose(pose, f, fill=ctrls)A.key_hold()A.share_keys(ctrls)tracks.pngsnap = A.snapshot(ctrls)A.to_spline()A.restore(snap)A.insert_key()A.curve_diff()A.run_gates(plan)A.overshoots()A.offset_keys()overlappose_to_pose_tellA.mouth_keys(phonemes)A.copy_curve()A.jaw_report()A.lip_lag()A.audio_envelope()A.blink_report()A.transitions()A.retime()A.cycle()A.cycle_speed()| Value | Relative to | Source |
|---|---|---|
| Gravity 1.703 cm/frame^2 (981/576) | 24 fps, scene in cm | physics [added] |
| Walk keys every 3 frames: contact 1, down 4, pass 7, up 10, contact 13; loop 1 to 25 | 24-frame cycle | Camporota |
| Touch-down to flat foot about 1 frame, at most 2; walk arm offsets 0, 1, 2, head 1 | every step and landing | Camporota; body digest |
| Rotation 1 to 2 frames behind translation | proxy and body | Camporota |
| Keys on ones on fast actions; 2 to 4 frames apart on slow ones | blocking | Newman |
| Blink close 2 / open 4 (or 3 / 5; big eyes one more) | frames | Elver |
| Eye dart 2 frames, linear; brows lead lids by 1 to 2, never 5 | frames | Elver |
| Snappy move: 3 frames on an arc plus a small overshoot, never 1 | frames | Elver |
| Global lip shift 1 to 2 frames earlier; opens near full on frame 1 | when late at speed | Lazare |
| Big five = 90% of lip sync; jaw plus corners 50 to 60% | controls | Santos, Elver |
| Game speeds: walk 2, run 4 to 6, sprint 12 to 15 m/s | stylized player | Newman |
Playblast default scale 0.5: pass | active view | Maya 2027 Help |
A.run_gates(plan)A.evaluate_gatesA.review_images(plan, out)curves.pngtracks.pngA.playblast_pack()| Mistake | What it looks like | Fix |
|---|---|---|
| Splining before the poses are in | mush, arms tweened through the body | |
| Even spacing, whole body on the same frames | floaty, "hitting poses" | favor neighbors, holds, |
| First-pass anticipation kept | the crouch upstages the action | |
| Torso locked to the hips, arms swung back in the crouch | stiff, generic anticipation | spine drags behind the hips, only the arms drop |
| Feet flat in the crouch, pointing forward at takeoff, slow to flatten on landing | weak compression, no push, slapping feet | foot roll; toe aimed back at the takeoff spot; flat within 1 to 2 frames |
| Stylized hang on a heavy body | floaty apex | |
| No resistance before the effort | styrofoam weight | 2+ frames of strain before the push |
| Symmetric dip, or a bounce straight out of the squash | light landing | sudden catch, bigger hold, one overshoot, slow recovery |
S or bare | neighbors reshape, holds drift | |
| Spline through a hold | drifting hold | |
| Arcs checked on a 3D trail | clean trail, broken arc on screen | |
| Lip sync keyed on the sound | late at speed | per-sound lead, then a global shift |
validate(profile="rig")validate(profile="shot")A.delete_helpers()run_gateskeyTangent(q=True, g=True, itt=True)A.stepped_preview()scaleKeyA.snap_subframes()review_imagesreferences/expert-notes.mdreferences/procedures.mdmx_animreferences/critique.mdreferences/gui-paths.mdreferences/sources.md