> For the complete documentation index, see [llms.txt](https://animoia.gitbook.io/animoia-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://animoia.gitbook.io/animoia-docs/properties-and-animation/keyframes-and-easing.md).

# Keyframes and easing

## Keyframe selection and editing

Click, `Shift`-click, or marquee keyframes. Copy/cut/paste preserves property-relative data; pasted keyframes start at the playhead. Dragging keeps frame snapping. Delete respects the last-interacted scope, so selected layers/effects don't steal a keyframe delete.

## Easing types

**Linear** moves at a constant interpolation rate. **Hold** keeps the earlier value until the next keyframe and is forced for discrete checkboxes/Source Text. **Bezier** uses incoming/outgoing temporal handles. Position keyframes can additionally have spatial tangents that curve the motion path independently of temporal easing.

## Easing panel

Drag the two curve handles; hold `Shift` to snap to quarter-grid lines. Edits apply live to selected keyframes. **Apply** reapplies the working curve. **Copy Easing** reads one keyframe's handles, or the ease between two successive keyframes, and makes it the working curve so you can apply it elsewhere. **Flip** mirrors the curve horizontally, swapping in and out behavior.

## How easing applies to a selection

Every keyframe has two independent sides: its outgoing handle governs the segment *after* it, and its incoming handle governs the segment *before* it. Easing only ever writes the sides that lie inside your selection, so it cannot disturb animation on either side of it.

Selecting two adjacent keyframes describes exactly one time interval, and that interval is governed by just two of the four handles those keyframes carry — the first one's outgoing handle and the second one's incoming handle. The remaining two point at neighbouring segments and are left alone.

A single selected keyframe is the exception. With no interval to speak of, easing it affects both of its sides, which is the familiar single-keyframe behaviour.

> **Note:** Non-adjacent keyframes are grouped into contiguous runs, and each run is treated as its own range. Selecting keyframes 2, 3, and 7 gives two ranges — 2→3 and 7 on its own — so the untouched gap between 3 and 7 keeps its existing easing.

## Preset library

Built-in presets are Linear, Ease In Sine, Ease Out Sine, Ease In Out Sine, Ease In Out Quad, Ease In Out Cubic, Ease In Out Quart, Ease In Expo, Ease Out Expo, and Ease In Out Expo.

Save the current curve as a numbered custom preset, and hover a custom preset to delete it. Saving is skipped when the curve already exists as a built-in or custom preset, so the library will not fill up with duplicates of the same ease.

> **Note:** Your curve library belongs to the application rather than to any one project, so it follows you into every file you open — unlike [color swatches](/animoia-docs/guide/color-panel.md), which are saved with the project because a palette belongs to the artwork. Custom presets persist on disk, and a library written by another window is picked up without a reload.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://animoia.gitbook.io/animoia-docs/properties-and-animation/keyframes-and-easing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
