Rig splines properties
A rig layer's spline points by spline id and point index: position, the in and out tangent offsets and the twist - the rail a spline IK chain follows.
The rig splines family: a rig layer's spline points by spline id and point index - position (px in the spline's parent frame: a bone's tip, a controller, or rig space), in and out (px, the tangent offsets from the point) and twist (degrees, the ribbon twist a spline IK chain reads at that point). Only KEYED point members have rows (the focus rule); every pattern reads, keyframes AND drives: a script sweeping a point's position bends the rail, and the spline IK chains aligned along it follow, which is the scripted tail wave.
Every pattern below is readable from scripts through prop() and layer.prop(); ids in a pattern (like <effect_id>) stand for the entity's real id. Every pattern here is in the drive set: scripts may WRITE each one with set() or a single-output return, per frame.
| Pattern | Wire kind | Units | Reads | Writes |
|---|---|---|---|---|
rig.splines.<spline_id>.points.<index>.in | point2 | [x, y] px (a tangent OFFSET from the point) | yes | drive set |
rig.splines.<spline_id>.points.<index>.out | point2 | [x, y] px (a tangent OFFSET from the point) | yes | drive set |
rig.splines.<spline_id>.points.<index>.position | point2 | [x, y] px (in the spline's parent frame: a bone's tip frame, a controller's frame, or rig space) | yes | drive set |
rig.splines.<spline_id>.points.<index>.twist | scalar | degrees | yes | drive set |
Worked examples
A rig layer's SPLINES are its rails (RIG-W5 DYNAMICS): each point is addressed by the spline's id and the point's index - rig.splines.<spline_id>.points.<index>.position (px in the spline's parent frame: a bone's tip, a controller, or rig space), .in / .out (px, the tangent offsets from the point) and .twist (degrees). Every member reads, keyframes AND drives - and the rig's spline IK chains align along a DRIVEN rail exactly as along a keyed one (the solve reads the points through the script overlay), so a script on one point reshapes every chain that follows the rail. The summary's points stay authored (the rows posture); a driven point shows in the evaluated sample and the echo.
Worked example: Wave the tail rail
The scene. A Stage comp with a four-bone Tail rig at (240, 180) - Tail 1 to Tail 4 chained left to right, 40 px each - aligned along the three-point Tail rail spline by a spline IK item on Tail 4 (chain 4, the fit stretch), and four Segment solids rigidly bound to the bones, so the rail's shape IS the tail's shape.
- The comp Stage: 640 by 360 at 25 fps, 100 frames (4 seconds).
- Tail: a rig layer, at [240, 180].
- The skeleton: Tail 1 (
bone_1, a root) from [0, 0] at 0 degrees for 40 px; Tail 2 (bone_2, under Tail 1) at 0 degrees for 40 px; Tail 3 (bone_3, under Tail 2) at 0 degrees for 40 px; Tail 4 (bone_4, under Tail 3) at 0 degrees for 40 px. - The splines: Tail rail (
spline_1, rig space): 3 points from [0, 0] to [160, 10]. - The items:
rigging_1- a spline IK item on the Tail 4 aligned along the Tail rail spline (chain 4, fit).
- The skeleton: Tail 1 (
- Segment 1: a solid layer, at [240, 180], 40 by 12, filled ff6b6b.
- The rigging stack:
rigging_2- a rigid binding to the Tail rig's Tail 1.
- The rigging stack:
- Segment 2: a solid layer, at [280, 180], 40 by 12, filled 4ecdc4.
- The rigging stack:
rigging_3- a rigid binding to the Tail rig's Tail 2.
- The rigging stack:
- Segment 3: a solid layer, at [320, 180], 40 by 12, filled ffe66d.
- The rigging stack:
rigging_4- a rigid binding to the Tail rig's Tail 3.
- The rigging stack:
- Segment 4: a solid layer, at [360, 180], 40 by 12, filled a29bfe.
- The rigging stack:
rigging_5- a rigid binding to the Tail rig's Tail 4.
- The rigging stack:
The script. Add a project script named Rail wave and paste:
export const outputs = ["layer_1:rig.splines.spline_1.points.1.position"];
export function frame() {
return [80, linear(time, 0, 2, -30, 30)];
}
Line by line:
- Line 1: One output: the POSITION of the Tail rail's middle point (index 1 - the points count from 0). A spline point is addressed by its spline's id and its index -
rig.splines.<spline_id>.points.<index>.position- and reads in the spline's parent frame (rig space here), in pixels. - Line 4: The x stays 80; linear() maps the first two seconds onto the y from -30 up to 30 and holds 30 after that. The rail bends from an arch into a dip, and the Tail rig's spline IK item re-aligns all four bones along the driven rail every frame - the four Segment solids bound to the bones follow. The point's own authored value [80, -30] is dormant while the script drives: the summary still reports it (the rows posture), the evaluated sample and the echo report the driven point.
What you see. The tail starts arched up over the middle of the rail, flattens through level at one second and ends dipped down from two seconds on, the four segments hugging the rail throughout - at one second the middle point reads [80, 0], from two seconds on [80, 30].