---
title: "Rigs"
description: "A control is a joystick or slider: a handle you animate instead of many properties."
canonical: "https://terminal.lottiefiles.com/docs/rigs/"
last_updated: 2026-10-28
---

# Rigs

A **control** is a joystick or slider: a handle you animate instead of many properties.

## Rig a drawing

Select the whole character, with at least three **shape layers with fills**, then choose
**Rig character** from the palette. With nothing selected, it uses every visible shape in
the current composition. It needs a clear body and a head or at least two limbs.
Or click **this drawing looks like a character · rig it** when it appears in the panel.
With nothing selected, the **RIG** overview offers the same action to check the drawing.
To select layers yourself, use **⌃A**.
To rig just the limbs of an existing skeleton, choose **or make its N limbs only**.

Selecting a null includes the artwork it carries. Imported joint skeletons use their existing
root, head control and joint chains. Their names, parents and pivots stay in place. If the
head control is missing or its pivot is away from the neck, the card asks you to identify
the head or correct its joint. Ground shadows stay out of the character.

**CHECKING** shows the guess before anything changes. Colours identify the roles; **?** marks
a part that needs your choice. Click a part on the stage or in the panel to change its role.
Hover to see which part a click will pick. When parts overlap, uncertain parts come first,
then smaller parts; click the same spot again to reach the next part. The menu names it and
highlights its row. A row opens the same menu beside the panel, leaving the rows reachable.
Choose **Upper arm, Forearm, Hand** or **Thigh, Shin, Foot**, then Left or Right. These choices
join touching parts on that side into a limb. You can also make artwork follow another part
or leave it out. Click other artwork to add it. Drag a dot to put a joint where it should turn;
near the part's long axis, it snaps to it. A square marker stays fixed to preserve a part's
animation; hover it to see why. An animated head that turns away from its neck gets a
**Head joint** control, keeping its original animation underneath the neck's tilt.
The panel explains what still needs a choice. Half-block terminals use this panel without
the stage overlay.

Press **⏎ Rig it** to build, or **esc Cancel** to leave the drawing unchanged. Esc closes an
open menu first; during a joint drag it puts that joint back. Empty stage clicks keep checking
open. The playhead stays at the checked frame until you finish; changing documents cancels
the check. Checking uses the drawing at the displayed frame. Finish a text field or drawing
tool before checking. Pasting and dropping artwork wait until the check is finished.

The drawing stays in place. Geometry finds the body, head, arms and legs; eyes and other small
shapes inside a part follow it, including pupils inside eyes. A short, narrow neck bridges a
gap between head and body. A scarf or collar follows the body; it does not carry the head.
Wide, tall and rectangular heads work too. Backgrounds are left out. Arms with two bones get
hand goals, and legs get foot goals.
Drag a character part to pose it: a hand or foot bends its limb; an upper arm, forearm or leg
turns about its joint; a one-part limb swings from its shoulder or hip; the head tilts about the
neck. Selecting a part shows the same gestures as dots: past a one-part limb's end, above the
head, and below the body. Drag the body (or the dot below it) to move it: foot goals stay planted
and hands and tails follow, so two-bone legs bend for crouches and walk bobs without re-keying the
feet. The foot's position stays planted; its angle still follows the shin. One-part legs move with
the body. **⌥-drag the body** to move the whole character with its foot goals; a marquee around all
of its artwork moves it all the same way. Clicking still selects.

To rearrange the drawing rather than pose it, **⌃-drag** a part or nudge it with the arrow keys
(**⇧**: 10 pixels); in Ghostty, use the arrow keys. The body's drawing moves with its foot goals
planted, as a drag does. A multiple selection moves the selected layers together.

After a drag, the panel shows the control that moved, ready to key its Position or Rotation; key a
hand or foot goal's Position to animate. Existing limbs use the same rule: their goal keys move into
the character's rest space during setup, keeping their times and easing. Hold **⇧** before or
during a drag to keep one axis; ⇧-click without dragging selects the artwork. Each drag is one undo
step and adds a key at the playhead when its property is already keyed. Earlier and later goal keys
keep their poses.
Click the key diamond beside Position or Rotation, move the playhead, pose again, then press
**space** to play. A swing handle sits beyond the limb's end, leaving the capsule's Length
handle reachable. A selected shape head uses its ordinary turn grip about the neck; a null
head control keeps the tilt handle.
Existing limbs and controls keep their connections; reviewed joint corrections apply to
already parented parts too. A shared master null still moves the whole character.
The whole build is one undo step. **Left** always means the left of the screen. On a profile
animal, **Front** means toward its head; **Back** means away from it.

The check panel reports uncertain or refused parts. Resolve each **?** or leave it out before
building. Parts that touch several limbs or have no clear body need your choices. Arms drawn
over the torso, clasped hands, and a cape covering a torso can need a person to choose the
parts; the check panel explains that uncertainty instead of assigning a guessed role.
Select the whole character; use **Make limb** for one arm or leg that is already parented
in order. A scene with more than 96 visible shapes asks you to select the character's parts.
Animated parts keep their pivots and existing keys. An animated body gets a null layer named
**Body control** at the centre of its artwork. The body handle moves this layer; key its Position to animate
the character. This keeps the body's breathing from scaling the head or arms. Add breathing
before rigging to get this control. After rigging, put breathing on the body artwork's shape
group; scaling a body layer that carries other parts also scales those parts.
Additive Oscillate and Wiggle
rotation can stay on top of a limb: the card offers **keep the sway**, **bake it**, or
**remove it** before building. Rotation effects that replace or retime the pose default to
baking. Facial joysticks and sliders keep their connections. Imported expressions, 3D, layout parts, unequal scale
magnitudes and outline modifiers need manual setup. Images, precomps and strokes also need
manual rigging. Loose animated limb artwork gets a joint null that turns about the reviewed
joint. Animated limbs keep playing as before. Rig character adds hand or foot goal keys
where the limb itself has keys, with a few extra keys when a wide swing needs them.
Baking a sway keeps its movement as rotation keys. If a move is too complex to preserve,
the message names a frame where you can add a rotation key before rigging.
**Make limb** starts with a still goal at the current pose. It stays in place when a parent
moves, so a leg can bend while its foot stays planted.
The character record is an effect on Body, Body control, or the imported Root. Making another
limb on a character adds its goal to that record. These ordinary layers and effects save and
export with the drawing.

Default names such as **Rectangle 3** become **Body** or **Left forearm**. Other names stay.
Ask the copilot to list the character and its goals. Run **Rig character** again to add parts
to an existing character. Removing a part or a limb keeps the rest of the character. Copy
all its parts and goals to make a separate character. Copying fewer parts leaves the
original character intact and omits the character record from the copy. Ordinary parenting
still carries children with a copied body. **⌃A** selects top layers, as in other drawings;
explicitly select all character parts to copy its record.

Deleting or cutting the body artwork, or all the character's artwork, takes the whole
character and its rig in one undo step. This includes held props and controls connected only
to that character; the status names them. Undo brings the whole character back. Deleting only a hand, foot or bone keeps the
other limbs; the RIG section offers to remove the affected limb's rig. Old drawings with
leftover handles offer one **remove them** action for all those handles.
Deleting a character's hand or foot handle removes that limb's rig too; its artwork stays.

The copilot's `rig character` returns the guess and builds only when nothing is uncertain.
Use `review: true` to open the check for the person. The check card temporarily replaces the
conversation in the panel, including on half-block terminals. Keys go to the check: ⏎ rigs it
and esc cancels. The composer's draft is kept and its focus returns after checking. The copilot
waits for your next message and reads the outcome and `rig list`. `force: true` builds the confirmed
parts and leaves uncertain parts alone; it does not override refusals.

## First rig: Add, Connect, Pose, Animate

1. **Add**: select Head and the eyes, then choose **Add joystick** from the palette. The
   control goes beside the artwork, within the artboard. With nothing selected, start at Connect.
2. **Connect**: the selection appears under **Connected**, with outlines on the stage and marks
   in the score. For an existing control, click **+ connect**, click parts on the stage or score,
   then **esc**. Parenting is different: it makes the control move with another layer.
3. **Pose**: click **→** in **Poses**, move the parts that change, then press **esc**. Make Left
   by clicking **←**, then **Mirror**. A slider uses named poses, such as happy and surprised.
4. **Animate**: drag the knob to try the poses. Click **◆** beside x or y to key its position.
   Move the playhead and the knob to add another key. Its keys and eases work like any layer's.

Or ask the copilot to connect the parts and make the poses for you.

While posing, an accent border, **EDITING** banner and **POSE** mode chip make the mode visible.
The pinned card names the pose and the parts changed. Click **Done esc** or press **esc** to
finish. Clicking empty stage, selecting another layer or switching windows keeps editing on.
Automatic recovery keeps a folded copy in the background while the pose remains open.
The mode chip says ASK, TEXT, PATH or DRAW when keys go to one of those tools.

Only artwork is connected and posed: controls cannot pose themselves or other controls.
A limb's goal can be connected and posed. Moving unconnected artwork during a pose connects
it too. **×** removes that layer's connection and its poses from this control in one undo step.
During a pose session, disconnect first finishes the pose as a separate undo step.
The first three connections have a visible ×; ask the copilot to disconnect another named part.

## Reading a rig

Click empty stage to see **RIG** above the artboard settings. Each control names the parts and
properties it moves; each limb names its chain. Click a row to select its control or goal.
The copilot's **rig list** uses the same overview, with ranges and keying details after it.
Ask “how is this attached?” to read those connections together.

A connected layer says **moved by Joystick (position)** or names the other controls and
properties that move it. Click that line to select the control. Its own section lists
**Connected**, the poses and the knob values. **layer ›** opens its raw layer controls.
Controls are stored in files; save a file copy of a Creator document before adding them.

Connected parts waiting for their first pose are kept as connections, without empty pose links.
An explicit zero pose is different: it can hold a corner at rest instead of deriving its edges.

## Limbs

A **limb** is an upper bone, lower bone and end that bend to reach a **goal**. A three-layer
parent chain ending in a leaf or a joint's attached artwork appears as **could be a limb ·
make limb** in the overview and on any of its three parts or their attached artwork. The
panel names the same suggested chain; its button makes that chain. The overview shows up to
64 suggestions and says how many more were omitted, with **make all** for the shown chains
in one undo step. Suggestions read the joints in their parent's units, so scaling a character
in from zero keeps its suggestions. Position and anchor edits update them. Make limb checks
the current playhead and explains if a chain cannot be made there.
**Make limb** in the palette uses the selected end and its two parents. Artwork riding a
joint's origin stands for that joint. To make a suggested chain from another part, click
that chain's **make limb** button.

Null-joint skeletons, such as Kivot and Duik rigs, work the same way: the hand artwork
at a wrist's origin stands for the wrist, so the bones are shoulder and elbow. Zero-length
segments cannot be bones. Shoulder › elbow › wrist names an arm; hip › knee › ankle
names a leg, keeping prefixes such as Front and Back in the goals and score. A straight
chain starts with knees bending toward its own toes and elbows away. Without readable
feet, the character's root chooses a shared facing from its side of the composition.
**Side** reverses that choice. A drawn bend always keeps its direction.
For example: Upper arm › Forearm › Hand. If a bone has rotation behaviours, its panel offers
**bake and make limb** to keep that motion as keys, or **remove and make limb** to restore
the original rotation. Each choice is one undo step. The bones' own rotation keys are FK.

The goal appears exactly at the hand or foot, without moving the drawing. Drag the hand or
foot, either bone's artwork, or its crosshair target, to bend the limb. All move and select the
goal; the joints stay attached. Shift still selects parts, Option-drag copies, and a group
drag moves the selected layers together. Edit a bone's Position in its layer settings when you mean to
change the chain. Selecting any joint shows the whole limb and **select its goal**. A keyed
goal changes or adds its Position key at the playhead. Each drag is one undo step.
On a null-joint skeleton, drag the character's top layer (**Root** in Kivot's rigs) to move the
whole character. Group-dragging only the artwork offsets it from the joints and detaches the
drawing from its skeleton.

Move the shoulder or hip by moving the upper bone's parent. If it has no parent and starts
over another layer whose motion supports IK, the goal's panel offers **attach to** that layer.
Attachment keeps the limb in place and is one undo step. Parents with unequal X and Y scale
magnitudes or skew are not offered; make their motion compatible before attaching.

The goal's **IK** section has three keyable controls: **Side** chooses the elbow or knee direction
(↻ or ↺, with hold keys); **Soft reach**, in pixels, eases the bend near full extension;
**IK** blends from FK at 0% to the solved pose at 100% along the shortest arc. It says
**reached** or **out of reach** at the playhead. Soft reach can leave the end short of the goal.
Stretch is not supported.

The bones' Behaviours blocks name the goal and have on switches. dotLottie gets ordinary
rotation keys. Dragging uses drafts, refined by a worker. Saving finishes the bake.
**Remove limb · keep goal** restores FK; **Remove limb · delete goal** also removes the goal.
Both are one undo step. Plant feet by holding goal keys, move a goal back briefly for
anticipation, and add Soft reach for walk cycles.

The chain and goal must be in one composition. A goal may have moving parents, but cannot be
under its own limb. Bones and ancestors need equal scale magnitudes and no skew; mirrored
scale works. 3D, imported transform expressions and precomp time remapping are refused with a
reason. Missing goals or joints leave the last baked keys inert with a reason.

## Posing and keying controls

A joystick ranges from −1 to 1 on each axis. Its centre is rest; missing edges have zero
offset and missing corners add their two edges. Sliders have 2–16 named positions. Their
first position is rest; **snap** picks the nearest one, choosing the higher at a midpoint.
Labels that would touch are placed on separate rows or thinned, keeping the ends and current one.

Click an arrow, named pose or stage ring to edit. Pressing the knob always grabs it. **Edit
pose** in the palette chooses its nearest pose. Move, turn, scale, recolour or reshape the
artwork with the ordinary tools. The card keeps one Poses grid visible. Another arrow finishes
this pose and starts that one. The same arrow keeps editing. **Mirror** copies the opposite pose
across the vertical axis, including position, rotation and path points and handles.

Finishing folds changes into offsets and restores the original values and keys. It is one undo
step; undo restores the changes as ordinary edits. Undo and redo during editing affect the edits
in that session. New layers, new properties, changed path topology, reparented transforms and
replaced shape items remain ordinary edits, with a reason. Pose Amount is a keyable percentage.
An off Pose, zero Amount, or Loop/Steps above it that changes time also leaves an ordinary edit.

Repeat copies aren't posed: pose the original, and its copies follow. Finish the pose before
editing a copy or changing a repeat's arrangement, fields or control keys. A repeat root's own
transform can be posed like other layers.

Finish before seeking, playing, copying or undoing past the start. Saving, exporting, syncing,
changing tabs and closing finish the pose first. Esc closes an active tool or text box first.
Copilot edits to artwork join the pose session; finish before asking it to replace that pose.

Drag a control's name to place it, use **Size** to resize it and click its name to rename it.
Its null frame places the control; its null child's Position is the knob value. Neither draws
in dotLottie or exports. The editor draws them in kitty and its own window; half-block terminals use the
cell control and values. A keyed knob's drag adds or changes a key at the playhead. A behaviour
on a knob plays normally, while dragging edits its authored position beneath that behaviour.

Saved keys keep exact timing for a lone Pose with a static base and Amount on slider motion
or joystick segments moving only one axis. Other motion is sampled and fitted, with drafts
during edits and refinement afterwards. Missing knobs or damaged poses remain inert with reasons.
Stacked position poses are fitted within 0.1 px; their live expression evaluates the exact sum.

## Live in apps

Turn on **Live in apps** for a control. Its knob Position becomes a token named from the
control, such as **turn**. The token list and copilot show its id and range. A dotLottie app can call
`setVectorSlot("turn", [x, y])` while the animation plays. Layer renames preserve the token id.

Properties moved by several pose controls go live together in one expression. Each contributes
its own pose offset and Amount. If only one control is live, the other terms still read their
knobs' keys. Thus a live turn and a keyed Mood can move the same brows or scale the same eyes.
ThorVG evaluates the expression; the editor and video use the baked keys, as does a player
without expressions.

Paths, keyed bases, other behaviour kinds on the same property, driven knobs and damaged links
stay baked. The overview names the property and the reason. Knob layer names must be ASCII;
keyed Amount also needs an ASCII effect name because ThorVG cannot read non-ASCII names there.
The displayed control name can use any characters. Colours clamp once after all pose offsets
are added.
A live pose costs a little on every frame, more with more terms. Theme rules and data rows cannot set
a knob token in the editor; key the knob here.

IK stays baked when a live pose moves its torso or goal: key the knob or goal to animate the
limb in dotLottie. Turning a control's live switch off preserves expressions needed by another
live control. Existing tokens are kept; unused tokens made by the switch are removed.
Duplicating a live control with its knob gives it its own token. Saving and exporting refresh
expressions from current poses and names.

## When something looks wrong

- **Eyes do not follow in an app:** read the RIG problem row. Pose-only stacks can go live;
  another behaviour, keyed base, path or unsupported source leaves that property baked.
- **A control moves with the head:** parenting places it on the head. If it poses the head,
  use **unparent**. A control on the body that only poses the eyes is fine.
