Linked layers let one layer follow another’s animation. You key the source once. Followers reuse those keys.
Use this to:
- Keep several icons on the same move
- Share only position, and key opacity locally
- Reverse one copy, or play it later than the source
Link a whole layer
- Select the layer that should follow.
- In the timeline, open Link layer — the control sits between the property editor and the keyframe track.
- Choose the source layer.
The follower copies every property the source actually animates, plus the source easing. Those rows lock. Properties the source does not animate stay yours to key.
Choose None to drop the link. Local keys you already owned stay. Detach is different: it turns the inherited motion into real keys on this layer, then clears the link.
Link one property
- Open a property row.
- Use that row’s link control.
- Choose a source.
Only that channel follows. Position can follow one layer while rotation stays independent.
Tip: Setting a property link takes the layer off a whole-layer link, so the two don’t fight over the same row.
Reverse linked motion
While a layer or a transform is linked, use the mirror toggle.
- Position, rotation, and skew flip to the opposite value.
- Scale uses the inverse (
2becomes0.5). - Opacity, fill, stroke, and origin still follow the source as you keyed them.
Shift when it plays
Linked motion has start and end handles on the timeline. Drag them to play the inherited move earlier, later, shorter, or longer.
Before the start handle, the follower holds the first pose. After the end handle, it holds the last. Between the handles, the source animation fits that window.
Script console and WebMCP
The same steps run in Edit → Scripting and through WebMCP. Agents run a script with pureanim_run_script or window.pureanim.run().
WebMCP tools:
pureanim_get_statepureanim_list_commandspureanim_run_scriptpureanim_set_time
api.setLayerLink({ layer, source });
api.setLayerLinkMirror({ layer, mirror: true });
api.setPropertyLink({ layer, prop, source });
api.setPropertyLinkMirror({ layer, prop, mirror: true });
api.setLinkRange({ layer, start, end, prop });
api.getLinks({ layer });
Omit source to unlink. That is None, not Detach. Pass prop on setLinkRange to shift one property; omit it for a whole-layer link.
Full command reference: scripting.md. Agent loop: agents.md.