Make a playermodel out of anything you have modelled - a character you can walk around in, driven by the animations s&box already ships.
File > Make Player compiles it and writes a test scene with a floor and a player wearing it. Press Play and walk around.
Your model keeps its own shape. The built-in character's skeleton is fitted inside your model, so the animations only bend joints - a stocky robot stays stocky.
Help > Start Playermodel Tutorial walks it through in plain English, with an example robot to practise on, or start it on a model of your own.
The console names any bone whose spelling the animations did not recognise - almost always a typo, and the only place you would be told.
Transform handles in the viewport: drag arrows, rotate rings and a scale handle instead of typing three numbers. W, E and R switch between them.
Remesh reduces a dense import to a triangle budget, so a scan or a Meshy generation can finally be sculpted, rigged and compiled.
Subdivide is on the Rig bar now, where a too-coarse joint is actually found.
Marionette animates whole parts, not just bones - a door, a lever, a magazine, on the same timeline as the hand that works it.
A clip can hold several objects, each with its own skeleton: pose the hand, the weapon in it, and that weapon's bolt in one clip.
Marionette imports OBJ files split into their parts, with no .vmdl to compile first.
Dense imports are workable. Hovering, picking, dragging and sculpting a million-face mesh are each under a millisecond now.
Hovering an imported part no longer freezes it - 237ms down to under a tenth of a millisecond.
A sculpt dab on a million-face body went from 148ms to 0.3ms.
Parts load and rebuild four to ten times faster, with far less memory churn.
The package was shipping 434MB of modelling scratch that had no business in it. This revision is 10MB - updating reclaims the rest.
Rigging an imported mesh made every compile fail, if the mesh carried vertex colour.
A model compiled from an OBJ could arrive lying on its side.
A rigged model's collision stayed where the model used to be. It follows the bones now.
Deleting parts of an imported mesh is no longer slower the more you have deleted.
Deleting a group of selected parts removed only the one you right-clicked.
Import a mesh as a body. Sketch stage → Import, pick a Wavefront OBJ.
The triangles live beside the document rather than inside the .effigy text, so the file stays small.
Paint, weight paint and auto-skin then work on an imported part like any other.
FBX and GLB are refused with a remedy rather than half-parsed.
Import splits a file into its parts. Brows, lids, hair and a visor arrive separately instead of as one welded lump.
Each part is named after whatever the exporter called it, so you can hide, re-material and weight them a piece at a time.
A file with a single object reads exactly as before: one part, named after the feature.
Citizen size reference is a button on the tool row, right-hand end. The same switch as Edit → Settings → Reference.
A hand tutorial. Help → Start Hand Tutorial: palm, a three-joint index, the other digits, sculpt, paint, then bones parented so a finger curls.
Hovering a dense imported mesh dragged the viewport to a crawl.
The face, edge, body and bone pickers each re-scanned every triangle in the part on every frame the cursor was over the canvas.
On a 60k-face import that was about 13ms and 25MB of garbage per frame.
Parts past a few thousand faces now get a pick tree, built once per rebuild — the same pick costs microseconds and allocates nothing.
Small parts are untouched; they were never the problem.
Parent bones to each other. Right-click a bone in the Rig tree → Parent to. Hang trigger and mag off root and they follow it in Marionette.
Clicking a bone in the viewport now selects it. Bones sit inside the mesh, so a click used to hit the part instead. Assign, Paint Weights and Parent all need that selection.
Named variables. View → Variables, then type #thickness in any dimension. Change it once and everything that uses it moves.
Section view. View → Section View clips the preview through the origin so a shelled interior is visible.
Weight painting. Rig workspace → Weights → Paint Weights. Pick a bone and drag. Heat map is a texture, not vertex colour.
A first rigging tutorial. Help → Start Rigging Tutorial: post, sign, a bone from each, pose, compile.
Pose the rig in-tool. Press Pose, drag a bone, the mesh bends. Reset Pose puts it back. Nothing is saved.
Make a bone from a part. Right-click a part (or press Bone from Part): it measures the long axis and pins the part to it.
Same from the feature tree — one click for every part that feature made.
The bone takes the part’s name. Select a bone first and new ones hang off it. Cubes and spheres are skipped (no long axis).
Assign a part to a bone from the Parts list. Right-click → Assign to bone. The row shows which bone it is on.
Paint Falloff and an Erase button on the paint bar. Ctrl still inverts for one stroke.
Hold Ctrl to erase paint. The ring turns red. Same size, strength and falloff as the brush.
Drag a box to select in a sketch. Left-to-right is fully inside; right-to-left is anything the box touches.
A sketch Mirror tool. Select geometry, arm Mirror, click the line. The copy stays symmetric.
Revolve can spin about a line you drew in the sketch, including construction lines. Move the line and the axis follows.
Bone from Part is on the Rig bar, not only the right-click menu. In Rig, right-clicking the solid opens the same part menu.
The tool row scrolls left and right when the buttons no longer fit. Wheel pans; Shift jumps further.
Unpainted paint bakes over grey, not white. Preview and compile match, and one dab no longer makes a white brick.
The material brush works on more than one body. It paints whichever is nearest.
Assign Body stayed grey after you picked a part. Select a bone, select a part, press Assign — that pins them. With no part selected it still arms click-to-assign.
Compile no longer binds the paint atlas to slot 0 blindly. It binds the slots the painted faces actually wear.
Paint on two bodies at once is an error with a remedy, not a silent no-op.
The dead Blend combo is off the paint bar. Old files still load; it does not change the fallback any more.
Revolve can spin about a line you drew in the sketch. Set Axis to "A line of the sketch" and pick the line — construction lines included, which is what the dashed centreline of a lathe profile is
The axis follows that line when you move it, so dragging the centreline moves the bore with it.
Bones from the shape of your parts. Right-click a part and pick Make a bone from this part: it measures the part and adds a bone down its longest axis, already pinned to it.
The same from the feature tree — right-click the feature that built the parts and get one bone per part it made, so a patterned row of eight fingers is one click instead of eight.
The bone takes the part's name, and a part is named after the feature that made it. Call the extrude index_finger and that is what the bone is called.
It is rolled to match the part, so the flat of the bone runs with the flat of the part and there is no arbitrary twist to undo on every one.
Select a bone first and the new ones hang off it, pointing away from it — which is also what decides which end of the part is the root, so place the palm bone before the fingers.
A part with no long axis, like a sphere or a cube, is skipped and named in the console rather than given a bone pointing nowhere in particular.
Pose the rig and watch it bend. A Pose button in the Rig panel — press it, drag a bone, and the mesh deforms with it, so a bad weight shows up as a crease instead of a number in a panel.
Reset Pose (or toggling Pose off) returns to the bind pose; nothing is saved. It is built on the same weights the export uses, so what you see is what compiles.
Assign bones from the Parts list. Right-click a part and pick Assign to bone — the same pinning the rig panel does, reachable from the body's side. An assigned part shows its bone in blue on the row.
An eraser. Hold Ctrl while you paint and the brush takes paint off instead of putting it on, back to the surface underneath.
The brush ring turns red while Ctrl is held, so you can see which one you are about to do before you press rather than after.
Erasing uses the brush you already have — the same size, strength and falloff — so a soft eraser fades out at its edge and a Constant one takes a hard bite.
An erase is a stroke like any other: one Ctrl+Z, saved into the .effigy, and still there after you edit a feature underneath it and the part rebuilds.
Ctrl is read once, when you press. Letting go halfway through does not turn the back half of the mark into paint.
Drag a box to select in a sketch. Press on empty space in the sketcher and drag: left to right takes only what is completely inside the box, right to left takes anything the box touches, the same two boxes Onshape has.
The box adds to what is already selected, so you can build a selection up out of several boxes. Clicking empty space still clears it.
A mirror tool. Select the geometry, arm Mirror, and click the line to reflect it across.
The copy is held symmetric to the original rather than just pasted, so dragging one half moves the other.
A point already sitting on the mirror line is shared rather than doubled, so a half profile drawn against the line closes into one region when it is mirrored.
The selection stays lit while a tool that uses it is armed, so Mirror and Offset are no longer aimed at something invisible.
Planes you place yourself. A Plane button beside Sketch, so "which plane?" is no longer answered only by Top, Front, Right or a face that already exists.
Build one off a global plane, off a face of a part, or off another plane, then push it along its normal with Offset and lean it over with Angle.
Drag a plane instead of typing its offset: an arrow stands on it, and everything drawn on the plane follows as it slides.
A plane built from a face rides that face -- make the part taller and the plane moves up with it.
Planes stack, so three ribs ten apart are each "ten further on" -- change the bottom one and the rest follow.
Sketch on one the way you sketch on anything else: press Sketch, click the plane.
Planes are drawn in the viewport with their names beside them, and each has an eye in the feature tree.
Paint is a texture now, not vertex colour. A stroke goes into a 1024x1024 canvas, so a bare box paints at brush resolution with no Subdivide first.
A painted part exports its own material. Compile .vmdl writes the canvas to a PNG, wraps it in a .vmat and binds it to the part.
Entering Paint on a part whose UVs will not hold paint inserts a UV Project above it automatically, and says so. It undoes with one Ctrl+Z like any feature.
A material brush. Press Material in the Paint workspace and drag on the model to lay a material onto faces instead of picking them one at a time.
The brush uses whatever is selected in the Materials browser, so you can brush one on, click another and keep going without leaving the model.
It outlines the faces it is about to take, because a material belongs to a whole face: on a coarse box a small ring still paints an entire side.
Bones can be placed inside a model, not just on its skin. Middle is the default: a click puts the joint halfway through the material under the cursor.
So a spine runs down the middle of a chest instead of down the front of it, which is where a joint has to be for the weights around it to make sense.
While placing, the run of material being measured is drawn with its thickness, so you see where the joint will land before you click.
A Y=0 toggle forces every placed joint exactly onto the mirror plane, so a chain placed with it on mirrors cleanly.
A Falloff dropdown on the sculpt bar: Smooth for a soft mound, Sharp for a hard crease, Linear for an even fade, Constant to move the whole disc at once.
Hold Ctrl while sculpting to invert the brush -- Draw carves in, Inflate deflates, Grab drags the opposite way. The ring turns red so you can see it before you click.
Sculpting hotkeys: 1-6 arm the six brushes, X mirrors, M masks, and [ and ] shrink and grow the brush.
Rebind any Effigy key. Settings has a Hotkeys section listing every key the tool registers -- click one, press the new key, and it takes effect immediately.
Rebinds live in the engine's own shortcut store, so a change here also shows up in the editor's Editor Keybinds page, and the other way round.
A UV checker view toggle, in Settings under View. Stretching and seams show on the surface instead of waiting for a paint or a bake to smudge them.
An unwrap now says what it did -- how many charts, how many faces, and the texel density -- and warns when the result still will not hold a bake.
The settings window folds up. Every section is a header you click to collapse or expand, and it remembers which ones you had open.
Paint is visible. It never was: the colours went into the mesh's vertex colour stream, which the shader everything renders with does not read, so a painted part looked exactly like an unpainted one.
Paint is no longer limited by the mesh. A stroke used to land on the corners of a box and spread across whole faces; it now resolves as finely as the canvas whatever the mesh.
A held brush no longer keeps darkening. Re-stamping the same spot over and over stays the same mark.
A material you dropped on a face still wins on a painted part -- paint takes the slots that had nothing.
A compiled model arrives wearing a material instead of the bright red missing-material shader. Every slot the mesh uses is named now, the rest pointing at materials/default.vmat.
A painted part compiles to its paint, the way any texture survives a compile.
A compiled static model samples its texture the right way up. The OBJ exporter was writing V unflipped, so a painted or textured static model came out upside down.
Materials from the browser bind to something that exists. Dropping a compiled .vmat_c used to write a reference nothing resolves, and the face came back bright red.
The same cause made a part wearing oak.vmat take a second slot for oak.vmat_c. It recognises them as one material now.
Dragging a multi-bone selection in Marionette no longer moves one bone twice as far as the rest.
Switching workspaces now puts away what you were doing. The note pen no longer stays armed into the next thing you draw, and a running soft-bone preview stops.
A plane's dialog no longer puts the face pull arrow on the model. The plane's own offset arrow is the handle there.
Animation clips have to be added again every time you open the tool. The list File > Animation Clips... builds is not written to the .effigy, so add the clips in the same sitting you compile in.
Boolean, on the Solid stage: union, subtract or intersect two bodies.
The engine's boolean has been working for a while, but it could only be reached by drawing a profile or drilling a hole - there was no way to point at two solids you already had and make them one.
Pick the tool body, pick the operation from the button's dropdown, and the tool is consumed by the cut. Keep tool bodies leaves it if you want to reuse it.
A Boolean refuses rather than guesses. A body cannot be its own tool, an unpicked tool is an error instead of quietly meaning "every body", and a subtract that removes everything or a union of solids that never touch each say so.
Painting. Press Paint and brush colour straight onto the model.
The paint composes over whatever material the part already wears, so a dropped material still shows everywhere you did not brush.
Strokes are saved in the .effigy file and replayed whenever the model rebuilds, so paint follows the part through later edits instead of smearing.
A workspace bar across the top: CAD, Sculpt, Paint, Rig.
The part of the pipeline you are in is a control now, rather than a word written small in the corner that you had to infer it from.
Each workspace opens the panels it needs and puts the rest away - Paint brings up the material browser, Rig gives the skeleton tree the whole right-hand side.
Whatever you rearrange while you are in a workspace is what you come back to.
Rigging has its own tool bar. Add Bone, Delete, Assign Body and Mirror sit on the Bones and Bind stages like every other tool, instead of being buttons in a side panel.
Rigs are saved in the .effigy file. Bones, their bind pose, their softness and which body is pinned to which bone all survive a save and reopen.
They did not before: placing bones and reopening the part lost every one of them, silently.
A part with no rig is written exactly as it was before, byte for byte, and still opens in older builds.
Soft bones are reachable. Select a bone, tick Soft in the Rig panel, and set its stiffness, damping, weight and cone.
Soft bones draw blue in the viewport so you can see which ones are simulated.
Preview on the Rig bar runs the solver live. Gravity pulls the soft bones off their pose so you can watch them sag and settle while you tune the numbers.
Dragging a bone with the pose gizmo makes everything soft below it swing behind the drag. Rest puts them back.
A tool that cannot run yet is dimmed and says why when you hover it, instead of looking live and doing nothing.
The tool bar marks which tools will use what you have selected. Click a face and Fillet, Chamfer, Draft, Hole, Face Material, Extrude and Move Face each get a green mark down their left edge.
Bones can be scaled in Marionette. The drag mode cycles Rotate, Move and Scale, and E still flips between the first two.
The scale is one number rather than three, because that is all a Source 2 bone carries. It keys like any other channel and plays back at runtime.
Shift-click builds a selection of bones instead of replacing it, and the group gets one gizmo at its centre that moves them together.
A Handle Size slider scales the bone dots and the areas you click to grab them, so a dense hand rig can be shrunk until its fingers stop overlapping. It is remembered between sessions.
The built-in Effigy tutorial builds a house rather than a lamp, in five steps: box walls, a wedge roof, holes drilled for the windows and the door, then the export.
Every step is a shape you can see arrive. The lamp asked you to sketch, revolve, shell, subdivide, unwrap and sculpt before you had made anything you could look at.
The pull handle is a single arrow now, pointing the way the face faces. Two of the old three did nothing when dragged, which reads as broken.
Sliding a wall sideways is Move Face's Translate mode.
Only one thing can own a click in the viewport. Sketching, sculpting, painting and the bone tool could each be armed at once, so a click tried to do two things.
Bones can be clicked in the viewport. They never could: every bone shared one click target, so the hit test knew the cursor was over a bone but not over which one.
A bone's hit target is the bone you can see. It used to be a fixed size while the drawing scaled with length, so a long bone was mostly dead and a short one stuck out past its end.
The pose gizmo stops vanishing when you click the bone it belongs to.
Hovering a bone highlights the bone, rather than putting a blob at one end of it.
Picking a bone in the Rig tree turns it yellow in the viewport straight away, instead of waiting until you happen to move the mouse.
In the Rig workspace the model's faces are no longer selectable, so a click meant for a bone cannot land on the wall of triangles behind it.
A rig edit marks the document unsaved. Closing the window used to close it cleanly without asking, and the whole rig went with it.
Undo works on soft bones. Making a bone soft and pressing Ctrl+Z left it soft, and changing a stiffness twice lost the first value.
An oversized fillet or chamfer is refused again across the whole range where it should be. On a 2-unit cube, radii between about 1.0 and 1.25 used to come back quietly self-intersecting.
The suggested radius the error offers no longer proposes a size inside that broken band.
Paint is as fine as the mesh it lands on. A bare box paints as a few colour blobs; add a Subdivide or Sculpt above the Paint feature and the same brush gets as fine as the mesh.
A painted model writes its colours into the DMX, and the whole chain up to that file is checked on every test run - the strokes replay, survive an edit underneath them, and come back identical after a save and reopen.
What is unchecked is the far side of the compile: nobody has looked at how the engine's shader composites those colours. Check a painted model renders its paint before relying on it.
Paint tints the material rather than covering it. Paint that fully replaces the colour under it needs a shader.
Faces of a part can be extruded. Click a face of anything on screen, press Extrude, and it pulls.
No sketch is involved and none is asked for, so it works on a part built entirely out of primitives.
Taper, Up to next, Through all, a second distance and New body all work from a face exactly as they do from a sketch profile.
A plain pull moves the face rather than growing a boss on top of it, so the part stays one clean solid you can still Shell afterwards.
Move Face, a new tool on the Detail stage.
Offset pushes each picked face along its own normal, so picking both sides of a wall makes it thicker or thinner.
Translate moves them together, so the wall slides and keeps its thickness - material added on one side and taken from the other.
The distance can be dragged instead of typed. Open Extrude or Move Face, pick the faces, and a set of arrows appears on them.
The arrows are turned to the face rather than to the world, so the blue one is always straight out of it.
Pull it and the solid grows under the cursor, with the number in the panel counting up as it goes.
Dragging only ever sets the open tool’s distance. It never adds a feature behind your back, and the arrows are gone the moment the tool is closed.
The Profiles box in the Extrude panel picks faces. Hover one, click it, and that is your profile; click it again to take it off.
Sketch regions are still pickable in the same box at the same time, and a sketch in front of a face gets the click.
Right-click a face and every tool that can use it is on the menu: Sketch, Fillet, Chamfer, Shell, Draft, Hole, Subdivide and Face Material.
Each of them opens already pointed at the face you clicked.
Moving a face refuses rather than guesses. A face that is not flat, a face moving while a flat neighbour stays put, or a move far enough to turn the part inside out each say which it was and what to do instead.
The panel no longer says "No sketch yet - add a Sketch first" at a part that has faces you can point at.
That message appeared whenever the document had no sketches, which is the normal state of a part built out of primitives.
It now says what you can click, and the box stops being red once a face answers it.
Revolve, Sweep and Loft still ask for a sketch, because a face is not something they can use.
The line under the viewport that tells you what your selection is good for now asks the tools instead of reciting a list somebody typed.
Subdivide asks which part you mean instead of taking the whole document.
Click a part in the Parts list and you get that part entire, or pick faces in the viewport and you get those.
The grease pencil’s colour picker is folded into the pen button itself - click the pen to draw or put it down, open its dropdown to change colour.
The eraser works like the sketch Cut tool: hold the left button and drag through the notes you want gone.
The Edit menu is shorter and reads in groups instead of as one list of fifteen.
The five sculpt-mask commands are behind a single "Sculpt Mask" submenu.
The three "Normal Map:" toggles move to Edit > Settings under "Normal map bake", as switches and a size dropdown, and are remembered between sessions.
Chamfered and filleted parts measured smaller than they are.
The little triangles that cap each corner were being built inside-out, so they subtracted from the enclosed volume instead of adding to it. A chamfered 1-unit box measured 0.811 against a true 0.883.
Nothing looked wrong because nothing was wrong to look at - the mesh was closed, valid and the right shape, and only the numbers taken off it were out.
Those numbers are what collision hulls and physics are built from.
An oversized fillet or chamfer is not always refused any more.
The check that catches "the blends have met through the middle" measures enclosed volume, and some of what it used to catch it was catching only because of the inside-out corners fixed above.
On a 2-unit cube a fillet radius between about 1.0 and 1.25 now builds a part that is quietly self-intersecting instead of saying so. Below and above that band it still refuses correctly.
A compiled model arrives with no material on it, and renders in the bright red missing-material shader until you assign one by hand.
The geometry, the UVs and the skinning are all fine - it is only the material reference that does not survive the compile.
A grid switch and a spacing dropdown at the right-hand end of the sketch tool row, shown while a sketch is open.
They are the same two values as Edit → Settings, not a second copy — change one and the other follows.
View → Console docks the editor's own console inside Effigy, along the bottom.
It is the real console — level filters, term filter, stack traces and command entry — so compile failures show up without leaving the part you are working on.
Hovering a face lights up the whole face, however many flat pieces a cut or a boolean left it in.
The highlight, the edge picker, the sketch outline, the material you drop on a face and the edges Fillet takes now all mean the same face.
Seams inside such a face are no longer offered as edges to pick. One was always a few pixels from the cursor, which made the face underneath hard to click.
The grid on the face you are sketching on holds up at any size: the spacing widens until the lines fit, and it thins out as they close up.
That grid also fades away as the face turns edge-on, the way the reference planes already did.
A .effigy part studio shows the model it builds in the asset browser and the inspector's preview panel — turning on the spot, wearing the materials you dropped on it.
A studio the current build cannot read keeps the plain icon rather than putting an error in your console while you scroll a folder.
A feature added while the rollback bar sat at the end of the tree was never evaluated. It appeared in the tree, it was saved to the file, and it did nothing.
Sketching on a face is where that showed: the sketch stayed on the global XY plane and the face outline collapsed to a line lying flat through the model.
Exporting no longer overwrites the last thing you exported. Every part studio compiled to models/effigy/export.vmdl, so compiling the spatula replaced the grill.
Exported .vmdl, .obj, .dmx and .smd now take the document's own name, and an unsaved studio is asked for one instead of being handed a name that collides.
Select first, then pick the tool. Click a face or a part in the viewport and the next feature you add starts already pointed at it.
A face selection also tells the tool which part you meant, so filleting the thing you just clicked no longer rounds every part in the studio.
Fillet and chamfer can round the edges you pick, not just every sharp edge on the part. Click near an edge to add it, click again to drop it.
Picked edges are stored on the part, so they survive a save and a rebuild.
Viewport lighting. Full bright is the default so faces stay readable while you model (Edit → Settings → Full bright); turn it off for a studio sun that matches a game scene.
View → Add Point Light drops a lamp you can drag, and Delete removes the selected one. Lamps are viewport-only and never export.
Double-clicking a .effigy file in the asset browser opens it in Effigy.
Soft bones: stiffness, damping, weight and a cone per bone, turning an animated pose into one with lag and swing in it.
Games can run the soft-bone solver at runtime, not just the editor.
Animation clips bake into the compiled model, so what Effigy makes can be handed to AnimGraph. Add them through File → Animation Clips…
Bones match by name, and a mismatch is reported rather than silently dropping the clip.
Copy and paste poses in Marionette. The clipboard outlives the clip, so you can copy idle's rest pose and paste it into fire.
RigAnimPlayerComponent plays a .riganim on the character you already have, with no model compile. NormalizedTime is a 0..1 clock to tween a door or a lever against.
Grease-pencil notes drawn over a part and saved with the document. They are never exported — not to OBJ, DMX or the compiled vmdl.
Exported animation no longer crumples the model. Every bone was written a quarter-turn out, and the extra turn on a parent threw its children rather than simply tilting the model.
The "Marionette" menu this package used to add to your editor. Its two entries only rebuilt Geppetto's own sample clips. Both live on as the console commands rig_build_sample and rig_build_wave.
Building against Geppetto no longer floods your compile with warnings. The editor assembly was compiling its own copy of four kernel files the game assembly already provides, so Vec2, Xform, Skeleton and SoftBone each existed twice — 1857 warnings, and two types that read identically in source but will not substitute for each other across the game/editor line. Both assemblies now compile clean.
Two editor tools in one package: Effigy models and rigs, Marionette animates.
Effigy is parametric CAD — sketch on a plane or a face, then extrude, revolve, sweep, loft, shell, bevel, mirror, pattern or subdivide.
Booleans cut for real, through s&box's own PolygonMesh.
The sketcher does lines, arcs, circles, ellipses and splines. Closed regions are found for you; trim, extend, fillet and offset edit in place.
Seventeen constraint kinds, properly solved — an under-constrained sketch tells you what is loose instead of misbehaving.
An ordered feature history with rollback. Change a dimension near the bottom and everything above it rebuilds.
Rig in the same tool: a skeleton, auto-weighting, and a real skinned .vmdl. Sculpt and normal-bake are included.
Marionette: click a bone, drag to rotate, key it, move on. The skeleton draws x-ray so buried bones stay clickable.
One timeline lane per bone with the real curve drawn between keys, three easing modes, and undo where one drag is one step.
Two-bone IK with rotation limits — drag a hand and the elbow and shoulder follow without bending backwards.
Clips save as .riganim and rigs as .ctrlrig, so several clips can share one rig.