Rigging weights properties
A weighted binding's keyed influence entries by rigging item, shape, subpath, vertex and entity: the weight of a bone or a controller on a vertex or its handles, and a handle's blend.
The rigging weights family: a weighted binding's influence entries - the weight of one bone or controller on one vertex of a contents shape (or of the legacy path under the literal home path), on its in / out handle, and the handle's blend (the share of the handle's own entries over the vertex's) - percent (0..100), addressed by rigging item id, shape id, subpath index, vertex index and entity id. Only KEYED entries have rows (the focus rule); every pattern reads, keyframes AND drives: a script easing a vertex's weight from one bone to another over time hands that part of the silhouette between them.
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 |
|---|---|---|---|---|
rigging.<item_id>.weights.<shape_id>.<subpath>.<vertex>.<entity_id> | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.<shape_id>.<subpath>.<vertex>.in.<entity_id> | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.<shape_id>.<subpath>.<vertex>.in.blend | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.<shape_id>.<subpath>.<vertex>.out.<entity_id> | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.<shape_id>.<subpath>.<vertex>.out.blend | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.path.<subpath>.<vertex>.<entity_id> | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.path.<subpath>.<vertex>.in.<entity_id> | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.path.<subpath>.<vertex>.in.blend | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.path.<subpath>.<vertex>.out.<entity_id> | scalar | percent (0..100) | yes | drive set |
rigging.<item_id>.weights.path.<subpath>.<vertex>.out.blend | scalar | percent (0..100) | yes | drive set |
Worked examples
The rigging weights family: a weighted binding's influence entries - the weight of one bone or controller on one vertex (a contents shape by id, or the legacy path under the literal home path), on its in / out handle, and the handle's blend - percent (0..100), addressed by rigging item id, home, subpath index, vertex index and entity id. The stage normalises a vertex's entries at evaluation, so one driven entry re-balances the point against the others; only KEYED entries have timeline rows (the focus rule), while every pattern reads, keyframes AND drives.
Worked example: Hand the cuff back to the upper arm
The scene. A Stage comp with a two-bone Arm rig - the Upper bone from (60, 90) heading right for 80 px, the Forearm turned 20 degrees under it and keyed to bend to 80 degrees over the first second - and a Sleeve path layer hugging the arm, bound Weighted to the rig with the Distance seed (the shoulder end on the Upper, the cuff on the Forearm).
- The comp Stage: 640 by 360 at 25 fps, 100 frames (4 seconds).
- Arm: a rig layer, at [60, 90].
- The skeleton: Upper (
bone_1, a root) from [0, 0] at 0 degrees for 80 px; Forearm (bone_2, under Upper) at 20 degrees for 60 px. - Keyframe rig.bones.bone_2.rotation at frame 0: 20 (linear).
- Keyframe rig.bones.bone_2.rotation at frame 24: 80 (linear).
- The skeleton: Upper (
- Sleeve: a path layer, at [0, 0], filled 2266ff.
- The rigging stack:
rigging_1- a WEIGHTED binding on the Arm rig (the Distance seed: every vertex weighted by its distance to the bones; the script addresses the entries asrigging.rigging_1.weights.<home>.<subpath>.<vertex>.<entity_id>).
- The rigging stack:
The script. Add a project script named Hand the cuff back to the upper arm and paste:
export const outputs = ["layer_2:rigging.rigging_1.weights.path.0.5.bone_1"];
export function frame() {
return linear(time, 0, 2, 0, 60);
}
Line by line:
- Line 1: One output: the UPPER bone's weight on the Sleeve's cuff vertex (vertex 5 of the legacy path - the home is the literal
path, subpath 0).rigging.<item_id>.weights.path.<subpath>.<vertex>.<entity_id>is that entity's share of the point in percent; the Distance seed left the cuff almost wholly on the Forearm (about 9 on the Upper, 91 on the Forearm). - Line 4: linear() ramps the Upper's share from 0 to 60 over the first two seconds and holds 60 after that. The stage normalises the point's entries at evaluation, so as the Upper's share grows the cuff vertex follows the bent Forearm less and less - by two seconds it sits about halfway between the two bones' places. The other cuff vertices keep their seeded weights and still swing with the Forearm.
What you see. The elbow bends over the first second (the Forearm's keyed rotation); the cuff's top vertex starts by swinging down with the Forearm, then drifts back toward the upper arm's line as the script hands it over - at one second its Upper weight reads 30, at two seconds 60, then it holds.