Skip to Content
Core conceptsKeyframes

Keyframes

The model

A property is animated when it has a track. A track is a list of keyframes — a time, a value, and an interpolation — living on the animation engine.

Every frame, the renderer samples every track at one time and produces a flat, immutable snapshot of the whole scene. That snapshot is what gets drawn. Nothing else decides what a frame looks like.

The stopwatch in the inspector or the timeline is what arms a property: it creates the track and writes the first keyframe.

Three ways to set one

The stopwatch

Click the stopwatch next to a property. A keyframe is written at the playhead with the current value. From then on, changing the value at a different time writes another keyframe automatically.

The chord

Alt + Shift + a property letter keys that property at its current visible value and auto-reveals the row so you can see the new diamond.

ChordProperty
Alt + Shift + PPosition
Alt + Shift + SScale
Alt + Shift + RRotation
Alt + Shift + TOpacity
Alt + Shift + AAnchor point

A preset

Applying an animation preset from the Animate menu writes real keyframes. There is nothing special about them afterwards — retime, re-ease and delete them like any others. See Animation presets.

Seeing what is animated

ChordShows
UOnly the properties that have keyframes
U twiceThe same, across every layer
P / S / R / T / AJust that one property
The disclosure chevronThe whole property tree

Editing keyframes

  • Drag a diamond horizontally to retime it.
  • Marquee-select several, then drag them together.
  • Copy and pasteCtrl/ + C / V pastes at the playhead. Cut and Copy act on selected keyframes if there are any, and on layers otherwise.
  • J / K jump the playhead to the previous / next keyframe.
  • Delete removes the selection.

Values can be edited in three places, all writing to the same track: the inspector row, the timeline property row’s scrubbable field, and the graph editor.

What can be keyframed

Essentially every numeric property in the app:

  • Transform — position, scale, rotation, opacity, anchor point.
  • Effect parameters — written under effect.<id>.<param> and sampled per frame like anything else.
  • Light colour, intensity and radius.
  • Camera position, orientation and focal length.
  • Mask paths.
  • Shape operator parameters — repeater, trim paths, path operators.
  • Text animator parameters, including the range selector’s offset.
  • Particle config fields, under particle.<key>, with colours as channel tracks.
  • Puppet pin positions, and bone poses.
  • Nested composition time, via time remap.

The time-axis rule

Keyframes are written and read on the layer-local time axis, resolved by the engine’s remapped-time function. A naive “composition time minus clip start” is not the same axis, and mixing the two is what produces the classic “my two keyframes overwrote each other” bug. If you are extending the app or writing a plugin, use the remapped axis and nothing else.

For everyday use the consequence is simple and useful: a layer’s animation travels with the layer. Drag the layer bar in time and its keyframes move with it. Time-remap the layer and its own keyframes stay coherent.

Bulk edits

Writing keyframes one at a time notifies the whole application per call. When a tool, a preset or the assistant needs to write many at once, it goes through a bulk path instead — which is why applying a preset to twenty layers is instant rather than taking seconds.

Next

Last updated on