Skip to content

Group Transform & Layer Parenting ​

Two ways to move several layers together: a transient group transform (select and drag) and a persistent parent relationship (a layer follows another layer or a Null).

Group transform (multi-select) ​

Select 2+ layers (in the timeline or viewport — Cmd/Shift-click, or marquee). The viewport shows a single dashed group bounding box around all of them:

  • Drag inside the box → move the whole group.
  • Drag a corner → uniformly scale the group about its center.
  • Drag the rotate handle (above the top edge) → rotate the group about its center.
  • Arrow keys → nudge the whole selection (Shift = ×10).

Everything happens in one undo step. Each layer keeps its own internal animation; only its overall transform changes. Layers with no spatial content (a full-comp Solid, say) are skipped, and a Transform2D is auto-inserted into any layer that doesn't have one yet.

It is a true similarity transform: rotating the group orbits each layer around the group center and spins each layer in place; scaling moves them apart and scales each one.

Layer parenting ​

Each timeline layer row has a Parent dropdown. Set it to another layer (or a Null) and this layer inherits that layer's transform — move or animate the parent and the child follows, keeping the offset it had when you parented it.

  • New Null (toolbar crosshair button) creates a transform-only layer that renders nothing — the standard thing to parent a group to. Move the Null and everything parented to it moves.
  • No Parent (top of the dropdown) detaches at the current frame. The Parent Transform stays in the graph with that placement; later parent motion no longer affects it.
  • An animated parent animates its children automatically.
  • First-time parenting inserts a clean Parent Transform immediately before Output → Input, after Draw nodes and effects. Your existing transforms, animation and input drivers remain upstream. The finished layer follows as one unit; opacity is not inherited.
  • The new transform is placed near Output, with its Parent driver below-left. Output moves right to make room; upstream nodes keep their positions. Undo restores both the parenting relationship and the node layout in one step.
  • Reparenting reuses that transform, even if you rename it. Older saved rigs keep their existing target and wiring; loading does not rearrange them.
  • Plain solids and Nulls work too. Audio-only layers have no visual insertion point; a batch containing one is left unchanged. Multi-select parenting is one undo step.

Move a Null via the Properties panel (its Transform2D) or the arrow keys.

Chains work too — parent an arm to an elbow to a shoulder, and each level inherits the whole chain above it. Moving a parent's anchor re-pivots only that layer; its children hold their place.

Placement and quality limits ​

  • The final Parent Transform scales the already-rendered layer. It does not move transforms before Draw nodes or continuously re-rasterize vector/text content. For explicit pre-rasterization control, use an internal Transform2D and published values in the node graph instead.
  • Parenting uses the parent's selected primary Transform2D as its source, not a reconstruction of every transform/effect in an arbitrary graph. If that layer is later parented, the final wrapper also carries its original source motion to its children.
  • No-jump offset calculations assume Pixels mode and a centered anchor on source/legacy transforms. Edge-driven source values render correctly, but the editor's offset calculation reads keyed parameters, not arbitrary driver graphs; parenting/reparenting/unparenting those rigs can jump.
  • A zero-scale parent has no invertible placement; no-jump baking cannot recover a collapsed axis.
  • Nonuniform scale combined with rotation follows the existing position/scale/rotation composition, not a full affine shear decomposition.
  • Deleting a parent reverts its children to their local offset — unparent first if you want to preserve their position.

Under the hood ​

Group transform writes each selected transform. Timeline parenting publishes a source transform and drives the final Parent Transform through a Parent node. Its local offsets are evaluated at the current playhead for reparenting and detaching. Selecting an internal Transform2D still edits that node, not the Parent offsets.