Help center
Tutorial Intermediate

Animating with Timeline

Build custom Studio animations with Timeline: keyframes, the Use Current Value gotcha, speed and looping, and piston gimmicks.

Requirements
  • Timeline (Joan6694 / kkplugins)

Timeline is the standard tool for hand-keyframed animation in HS2 Studio. It’s more work upfront than a piston gimmick, but it gives you real control over every bone, blendshape, and camera move, and it’s the only reliable way to get a clean, seamless loop.

1. Open Timeline

Timeline adds its own tab to Studio’s plugin bar. Click it to open the Timeline window, which docks along the bottom of the screen with a scrubber, a frame marker, and a stack of tracks below it. If the tab isn’t there, the plugin isn’t loaded correctly, check that BepInEx and IllusionModdingAPI (KKAPI) are both up to date, since an outdated or mismatched pairing is the most common reason Timeline fails to open or throws a version error on load.


2. Add a track and set a keyframe

Tracks are created per property, not per object. Select a bone, light, camera, or interpolable value in Studio, pose or adjust it, then add it to Timeline (middle-click the node, or use the track’s add-key control) to drop a keyframe at the current position of the frame marker. Move the marker further along the timeline, change the value again, and add another keyframe. Timeline interpolates automatically between the keyframes on a track, so you only need to key the poses that matter and let it fill in the motion between them.


3. The gotcha that breaks every first animation

This is the single most common reason a Timeline animation plays back but nothing actually moves.

You must click "Use Current Value" on the keyframe, or it stores nothing. Moving the frame marker to an existing keyframe and then posing the bone does not update that keyframe automatically. Select the keyframe itself on its track, adjust the bone or value, and then click Use Current Value to write the new pose into it. Skip this step and the keyframe silently keeps its old value, so the animation plays but the bone never moves.

Get in the habit of checking this every time you revise a pose partway through an animation, not just when you’re first building it.


4. Adjust playback speed

Timeline plays back at a speed set independently of the frame count. Timeline exposes a numeric speed field alongside the speed slider, letting you type an exact value instead of dragging. This matters most when syncing two characters in a shared animation: if playback drifts out of sync after a few seconds even though both characters started at the same position, their speed values differ slightly. Type the same exact number into both fields rather than relying on the slider, since two slider drags rarely land on the same value.


Interpolation between keyframes

Each segment between two keyframes has its own curve type, and the default eased curve is not always what you want. A ball rolling along the floor or a hand sweeping through a gesture will visibly slow down or pause at each keyframe if the curve eases in and out. Switch the segment to a straight, linear curve so the motion holds a constant speed through it instead.

For motion along a real arc (a swinging arm, a thrown object), pure linear motion looks robotic. A common fix is to animate the main path with linear flow, then add one extra keyframe a frame or two after a turn and switch just that short segment to a snap-style curve, which rounds the corner without reintroducing a pause. For a fully curved, parabolic path (an object arcing through the air), it’s easier to bake a Route and then unparent the object from it once the bake is done, since baking overwrites the object’s local position with the route’s.


Looping and why pistons fight you on it

Gimmick items like pistons drive motion procedurally rather than through keyframes, which makes them fast to set up but almost impossible to loop seamlessly. Their internal timing rarely lines up with a whole number of frames, so a piston-driven thrust or stroke will always leave a visible hitch at the seam.

Motion sourceLoop behaviour
Piston / gimmickCannot be timed to loop cleanly on its own
Timeline keyframesLoops cleanly if you match the start and end poses by hand
Node-constrained rotatorLoops cleanly for continuous spinning motion

If you need a piston-style motion to loop, keyframe it manually in Timeline instead of relying on the gimmick’s own cycle, or accept the seam and hide it with a camera cut or a dissolve/blink at the loop point. When exporting the final video, move the last keyframes so they land exactly on the end of the timeline (select them, park the frame marker at the end, and drag them to it) and enable Video Export’s “limit by timeline” option so the render doesn’t include extra padding past the last keyframe, which is what usually causes an audible or visible hitch on an otherwise clean loop. See saving and backing up for export settings.


Piston gimmicks for repetitive motion

For simple, repeated back-and-forth motion, a piston gimmick is still faster to set up than hand-keyframing every frame. Hooh’s piston gimmicks are a common choice for this. Parent it to the target it should drive (a joint, a hand, an attached prop), link both position and rotation on the constraint, and zero/reset the piston before doing anything else with it. For anything that swings as well as thrusts, pair the piston with a rotation gimmick rather than expecting the piston alone to produce natural motion. If you’re rigging it onto a character’s own bones, switch that bone to FK first so you can find and parent to the correct joint, then disable FK on it again once the piston is connected and driving the motion.

Studying Timeline and node constraints pays off faster than leaning on gimmicks for anything beyond a short repeated loop: pistons look like the shortcut at first, but a full animation built entirely from gimmicks ends up needing more fiddling than the same thing hand-keyframed.


Keyframing blendshapes

Blendshapes (mouth shapes, eyebrow position, facial expression sliders) need to be edited while active before Timeline will register them. Open the character in HS2PE’s advanced mode, go to the BlendShapes tab, and move the slider you want to animate, it turns purple once it’s live and eligible for keyframing. With the slider moved, add a keyframe under HS2PE > Blendshape (Last Modified) in Timeline; this tracks whichever individual slider you touched most recently. If you’re animating a whole group of expression sliders together, middle-click the blendshape group itself in Timeline instead to create a group track under BlendShape (Group) Interpolate, then key the group as a set. See blend shapes for the slider layout and advanced bones (ABMX) for opening HS2PE’s advanced mode.


Keyframing a full pose from multiple IK nodes

Posing one IK node at a time and keying each separately gets tedious fast, and it’s easy to end up with jumpy, bouncy motion where limbs don’t move in sync. Instead, expand the IK node folders in the scene tree and select every node you want to include in the pose at once (shoulders, elbows, hands, hips, whatever the pose touches).

Alt + Middle Click sets a keyframe for every currently selected node at once. Select the whole set of IK nodes first, then use it to save an entire pose as one synchronized keyframe instead of keying each node separately. It's also worth remembering Shift + middle-click, which drops a new keyframe snapped to the nearest block divider if you need to split an existing segment rather than extend it.

See posing by hand for how IK and FK nodes behave before you commit a pose to a keyframe, and keyboard shortcuts for the rest of Studio’s modifier-click shortcuts.


Making the camera follow a moving subject

A static camera on a moving animation is the fastest way to make good keyframing look flat. To have the camera track a subject, spawn a Camera item in Studio’s work window, then use Ctrl+I to open Node Constraints and parent the camera to the bone or node you want it to follow, a chest or head node for a handheld feel, a hand or hip node if the camera should move with a specific gesture. With position and rotation linked through the constraint, the camera rides along with the target automatically, and you’re free to keyframe its own position and field of view on top of that for pans and zooms. Full setup details are in camera work in Studio.


Once the core animation loops cleanly, the camera work and blendshape timing are usually what separate a stiff render from a convincing one. Pair this with posing by hand for the underlying pose work before you start laying down keyframes.

Feedback

Did this guide help? Give it a like, no account needed.