Repository navigation
Studio Animation
Status: In development. Built on the int/beta5 integration branch, not in a published release (latest pre-release is v12.2.0-beta.4). This page lists what is merged on int/beta5 as of 2026-10-14.
Animation is a motion-graphics studio: compositions with layers and keyframes, a timeline and a graph editor, and export to frames, GIF, APNG and WebM. It does not replace Video (sequence editing) or Design (page layout).
Choose Animation in the studio pill. The Project menu has a command to start a blank animation project (animation.project.new). The header action is Render...; it opens output setup and never exports by itself.
- Compositions hold layers on a timeline measured in integer ticks, so edits are exact.
- Layers: shapes (rectangle, rounded rectangle, ellipse, star, polygon, path shapes), text, Null objects, audio. Fills can be solid or a two-stop gradient. Strokes have joins and caps.
- Parenting with a cycle-safe picker, and optional keep-world-transform on reparent, including animated hierarchies.
- Markers, a work area with looped playback, and text with a bounded list of safe system fonts.
- Keys on transform, opacity, effect strength and colour. Click, Shift/Ctrl-click and box selection. Copy, cut, paste and delete, also across transform and mask keys in one mixed graph.
- Graph editor with value and speed views, independent X/Y easing, cubic handles, named easings saved in the document, and spring and bounce presets.
- Spatial paths with tangents for position keys. Stagger layers and an "ease all" command.
- Modifiers: deterministic
wiggleandloop. They are expression-free; there is no scripting.
- Per-character text animators: range selectors with softness, offset, shift, scale, opacity, rotation and colour, with character and word units.
- Layer masks (up to 4 per layer, add or subtract, feather, invert) and alpha or luma track mattes. Masks can be keyed and edited on the canvas.
- Bezier path layers: pen tool, handle dragging, point insert and delete, smooth and corner points, compound paths, path booleans (unite, subtract, intersect, exclude), expand stroke to an outline layer, and path morph between masks with matching point counts.
- Blur and tint effects with keyed strength, bypass and reorder.
- Motion presets: fade, slide, bounce and typewriter entrances, plus a library of built-in presets that you can store in the document and export or import as JSON.
- Pose library: save the position, scale, rotation and opacity of several layers at the playhead under a name (stored in the document) and apply it back in one undo step, optionally as keys and blended by a percentage, for pose-to-pose animation.
Import WAV or MP3 as an audio layer. Limits: 2 MB per file, 10 minutes, 8 files and 4 MB in total. The studio shows a waveform and supports trim, offset and keyed volume (0 to 200 percent). Audio is for preview and for the WebM export only.
| Output | Notes |
|---|---|
Local .somnia snapshot |
Experimental explicit save and open. Assets are embedded. Recovery after a crash uses a browser journal. |
| PNG frame | Current frame. |
| PNG sequence | ZIP of the work area with a manifest.json. At most 1800 frames and 64 MB. |
| GIF | At most 300 frames and 256 colours per frame. No dithering, so gradients can band. Silent. |
| APNG | Silent. |
| WebM | Recorded in real time (a 5 s area takes 5 s, capped at 60 s). Audio is the preview mix. Needs browser WebM support. |
Every output file over 64 MB is refused.
- No footage, raster layers, precompositions, effects beyond blur and tint, expressions or motion tracking.
- Text is drawn with a system font from the allowlist, not an embedded font.
- Local AI can suggest one name for the selected layer. You review before after, then accept. See Local AI.
Concept, P0, P1, P7 export, P10 masks and mattes.
Back to Studios.
- Export (Render panel > More): Crop to area exports only a pixel rectangle of the composition for every format; it scales with the size setting.
- Rig > Appearance > Orient to path: rotation keys that make selected layers with a moving position face along it (pick which way the artwork points).
- Rig > Layers > Bake modifiers to keys: wiggle, loop and link modifiers become plain keys over the work area (every frame), then the modifiers are removed.
- Export crop: "Fit to selected layers" sets the crop to the box that holds the selected layers over the whole work area (plus 8 px).
- Poses can be applied or keyed mirrored (Mirror: around the canvas centre or around the pose); Pose to pose with Mirror on can go from a pose to its own mirror image, for walk cycles.
- Rig > Arrange > Array of copies: grid, row, column or circle of the selected layer (keyed positions move with each copy; circles rotate the copies outward). The command takes count, columns, spacing, radius.
- Render panel export check: under the format readouts it lists layers that would surprise you in the file (missing image, outside the crop or frame, not in the exported range, hidden, audio not included in frame exports).
- Rig > Layers > Close loop: every animated property of the selected layers gets a key on the last work-area frame with its value at the work-area start, so GIF, APNG and video loops have no jump.
- Colours (left panel): the solid colours the composition uses, with how many layers use each. Pick a new colour in a swatch to replace it in every layer's fill and stroke (one undo step, locked layers keep theirs).
- Rig > Appearance > Squash and stretch (light, medium, strong): scale keys that stretch a layer along its fastest axis and squash the other, from the speed of its position; a bouncing ball gets cartoon timing in one click.
- Composition settings: pick a size preset (1920x1080, 1080x1080, 1080x1920 and more) and choose what happens to the layers: keep, fit (scale to stay visible), fill (scale to cover) or centre (keep size). The top-level layers move and scale in one undo step; children follow their parents.
- Add layer > More shapes: regular polygons (3, 5, 6, 8 sides) and stars (5, 6, 8 points) as editable path layers, centred in the composition. The command takes sides, star, inner radius, radius and colour.
- Key tools > Time > Snap to markers: moves the selected keys to the nearest composition marker (beat sync); the (6) variant only moves keys within 6 frames.
- Rig > Layers > Work area to marker section: sets the work area to the stretch between the markers around the playhead (or the comp start/end), so preview loops and exports cover one section.
- Rig > Arrange > Stretch time: slows down or speeds up whole layers (50%, 75%, 125%, 200% length). Every key, colour key, effect and animator key and the out point scale about the layer's in point, snapped to frames. Layers that would leave the composition or whose keys would meet are skipped.
- Render panel > Lottie (JSON): the whole composition as a Lottie file for the web and apps (solid, null and shape layers with keys, easing, spatial tangents and parenting; flat fill and stroke). Text, images, nested compositions, audio, mattes, effects, masks, repeaters, gradients and modifiers are left out, and the panel lists what was left out.
- Timeline > Auto-key: while on, moving, scaling or rotating a layer on the canvas, or typing a value in the inspector, at the playhead turns a property without keys into an animated one (one key at the playhead) instead of changing the whole animation. Properties that already have keys add or update a key at the playhead as before. The mode is off by default and not saved.
- Rig > Arrange > Send to composition: copy or move the ticked layers into another composition of the project (listed by name). Parents and mattes between the sent layers follow; links to layers that stay behind are dropped. Layers that do not fit the other composition's length are skipped.
- Add layer > Camera...: adds a Camera null at the composition centre that all unlocked top level layers hang from, and ready-made moves (push in, pull out, pan, roll) keyed over the work area. Animate the Camera layer's position, scale or rotation for your own moves.
- Add layer > Camera... > Follow selected layer: keys the Camera position over the work area so the selected layer stays where it is in frame while everything else moves past (at most 120 linear keys; replaces the camera's position keys).
- Add layer > Camera... > Handheld shake: seeded position shake over the work area (default 8 px, rests at both ends). Reset camera clears the camera's position, scale and rotation keys.
- Rig and timing > Rig actions > Appearance > Label: tag the ticked layers with a colour (red, amber, green, blue, violet) or clear it. The colour shows on the layer bar in the timeline only; it is never rendered or exported.
- Timeline toolbar > Filter layers: type words to show only layers whose name, kind or colour label contains them (for example "red" or "text"). The selected layer always stays visible. View only.
- Modifiers > Add spring: after the last key the property overshoots the final move by Overshoot % and rings out (Frequency in swings per second, Damping as decay per second). Needs two keys. Bake modifiers turns it into keys.
- Rig and timing > Rig actions > Layers > Unpack precomposition: copies the layers of a ticked precomposition layer into this composition, timed to where the precomp plays them. A null with the precomp layer's name keeps its transform and the layers hang from it. The precomposition itself stays. Precomp layers with effects, masks, a matte, opacity, speed, loop or audio are not unpacked.
- Rig and timing > Rig actions > Motion > Around a layer > Aim at first ticked: tick the target first, then the layers that should point at it, and choose which side of the layer points (right, down, left, up). Rotation keys are baked over the work area (at most 120 per layer), so they follow the target as it moves now; run it again after changing the target's motion.
- Rig and timing > Rig actions > Motion > Around a layer > Orbit first ticked: tick the centre first, then the layers that should circle it (one or two turns, clockwise or counter-clockwise). Position keys are baked over the work area on a circle that starts where each layer is now, and follow the centre if it moves.
- Bounce: tick the ground layer first, then the layers above it, and choose Rig actions > Motion > Physics and effects > Drop and bounce. The others fall from where they are now onto the ground, each bounce lower than the last. Keys are baked (replaces position keys). Aim, orbit and bounce now sit under Rig actions > Motion.
- Travel along a path: tick a path shape layer first, then the layers that should follow it, and choose Rig actions > Motion > Along and across > Travel along the path. The layers move along the path over the work area (closed paths come back to the start); the second entry also turns them to face the way of travel. Keys are baked from the path as it is at the work-area start and replace position (and rotation) keys.
- Bounce with squash and stretch: Rig actions > Motion > Physics and effects > "Drop and bounce 3 times, squash and stretch" also keys the scale: stretched tall while fast in the air, squashed wide at contact. Scale pivots on the anchor, so set the anchor to the layer's bottom for a ball that squashes into the ground. It replaces the scale keys.
- Parallax: tick layers from far to near, then Rig actions > Motion > Along and across and choose a drift (left, right, up, down) or "Push in". Over the work area every layer moves by a share that rises with its tick order (the last ticked moves the full 10 percent of the composition width or height; push in grows the nearest layer by 20 percent). Layers that already have position (or scale) keys, and locked layers, are skipped but keep their depth slot.
- Mirror motion: tick a layer that marks the mirror line (its anchor), then the layers to mirror, and choose Rig actions > Motion > Along and across > Mirror. Positions (every key and its curve handles) are reflected across that line and rotations reverse, so a duplicated layer can move as the symmetric partner of the original. The artwork is not flipped (no negative scale), and layers with a parent are skipped.
- Export check, two new notes: a layer that is fully transparent for the whole exported range is named (it will not show), and with "Seamless loop" on, layers that are not in the same pose (position, scale, rotation, opacity) on the first and last frame are named, because the loop will jump there.
- Burst: tick one layer, put the playhead where it should go off, and choose Rig actions > Motion > Physics and effects > 8, 16 or 24 copies (8, 16 or 24 copies). The copies fly out from the layer's position, slow down, drop a little, spin, shrink and fade away over one second, then disappear. The original stays. The same seed gives the same burst; size the original small first (copies use its size).
- Scatter: tick two or more layers and choose Rig actions > Motion > Physics and effects > Scatter: place them anywhere in the frame, nudge each by up to 60 px, or shuffle their positions among each other. Every run picks a new random result (undo and run again for another). Layers with position keys move as a whole; for "anywhere" and "shuffle" layers with a parent are skipped.
- Rig actions > Motion now has three submenus instead of eight: Around a layer (aim, orbit), Along and across (path travel, mirror, parallax) and Physics and effects (bounce, burst, scatter). The actions themselves are unchanged.
- Overshoot: tick layers that already have position, scale or rotation keys and choose Rig actions > Motion > Physics and effects > "Overshoot and settle" (or "Anticipate, overshoot and settle"). Inside every moving segment of at least 4 frames a key is added at 80 percent of the segment that swings 15 percent past the target (the second entry also adds a pull-back key at 12 percent), so the motion settles into the target key. Existing keys keep their times and values; held segments and curved position paths are skipped; scale never goes below 0.
- Glow pulse (Motion > Effects): a glow on the ticked layers breathes up and down across the work area, keyed (2 or 6 pulses).
- Copy effects (Motion > Effects): the first ticked layer's whole effect stack, keys included, is cloned onto the other ticked layers.
- Soften (Keys tools > Values): each selected key moves halfway toward the average of its neighbours; the first and last key of a track stay.
- Crossfade (Rig > Appearance > Fade): ticked layers dissolve into each other in start order, 12 frames overlap; the earlier layer's out point is extended when it ends sooner.
- On twos/threes/fours (Rig > Appearance > Step motion): animated transform properties of the ticked layers become held poses every N frames across the work area, sampled from the current motion.
- Freeze at the playhead (Rig > Appearance > Hold poses): the ticked layers keep the pose they have at the playhead; later keys are removed.
- Trail (Motion > Effects): one ticked layer gets 4 or 8 fading ghost copies that follow its motion a few frames late; the ghosts sit behind the original.
- Export check now warns about layers whose opacity flashes more than 3 times a second (checked on every frame of the exported range).
- Wave (Motion > Effects): a sine wave (bob, swing or breathe) runs through the ticked layers in tick order, each 45 degrees behind the one before; baked as linear keys over the work area.
- Shift all colours (Colours section): rotate the hue or change lightness and saturation of every solid fill and stroke in the composition in one step.
- Camera > Zoom in on selected layer: from the playhead the camera glides (24 frames) until the selected layer is centred and fills about 60 percent of the frame, then holds. Text size is estimated from its characters.
- Spin (Motion > Around a layer): the ticked layers turn 1 or 2 whole turns (or 1 backwards, or eased) around their anchor over the work area.
- Wipe (Rig > Appearance > Wipe): opens (in) or closes (out) a rect mask across the ticked layers from the left, right, top or bottom. Layers that already have masks are skipped.
- Flicker (Motion > effects): stutters the ticked layers like a failing neon sign from the work area start for 12 or 36 frames (seeded hold keys on opacity, each layer its own pattern) and settles on their opacity. Layers with animated opacity are skipped.
- Shake (Motion > effects): rattles the ticked layers from the playhead like an impact, light (6 px) or strong (20 px) for 12 frames, decaying to rest. Baked linear position keys, one per frame, replacing the keys in that range.
- Export check also warns about layers scaled down to zero for the whole export range and text layers with no text.
- Fly in / out (Rig > Appearance > Slide): the ticked layers fly in from past the left or right canvas edge to where they are, or out past it, over 12 frames. Command parameters also allow up and down. Layers with a parent or animated position are skipped.
-
Counter (Rig > Appearance > Count): a text layer counts from 0 to 100 (or 10,000 with thousands commas) over 60 frames from its in point. Write
{n}in the text where the number goes, for example{n}% done; without it the number is the whole text. The commandanimation.text.countalso takes from, to, frames, decimals and grouping. Not drawn by the Lottie export. - Palette shift now also moves gradient colours (fill and stroke, stops included), colour keys and gradient colour keys, not only the flat fill and stroke colours.
- Colours panel now lists and replaces gradient colours (fill and stroke, stops included) and effect colours (glow, shadow, tint), and "Shift all colours" moves effect colours and their colour keys too.
- The Rig > Motion menu now has five groups: around, along, physics and effects, impact and light (pulse, flicker, shake), copies and trails.
- Export check also warns about text that ends up under 10 px in the exported file, taking the layer scale, its parents and the export size into account.
- Export check also says when no layer shows in the first or last six or more frames of the export range, so you can trim it (Work area to layers).
- Reach (Rig > Motion > around): a two-bone arm or leg. Tick upper arm, forearm, hand and target in that order (forearm hangs from the upper arm, hand from the forearm, anchors at the joints). The upper arm and forearm get rotation keys over the work area so the hand's anchor lands on the target's anchor; the elbow keeps its side. A target out of reach stretches the arm straight at it. Baked keys (at most 120), not a live constraint.
- Draw (Rig > Appearance > Draw): tick stroked shapes and pick Draw on or Draw off. Each stroke's trim runs 0 to 100 (or back), one layer after the other in tick order (default 24 frames each, 6 frames apart; the stagger is squeezed so the last one ends inside its layer). Shapes without a stroke, or locked, are skipped.
- Cascade (Rig > Arrange > Cascade by position): tick two or more layers and pick a direction (from the left, right, top, bottom, centre outward, edges inward). Each layer slides in time (in, out and its keys together) by how far along that direction its anchor sits at its in point; the spread is 12 frames across all ticked layers. A layer that would run past the end of the composition is trimmed at the end. Layers at the same spot are refused.
- Iris (Rig > Appearance > Wipe > Iris in/out): a circle mask opens from the layer centre until it covers the corners (or closes to the centre). Same 12 frames, ease and rules as the other wipes.
- Colour cycle (Rig > Appearance > Colour cycle): the fill colour of each ticked solid, shape or text layer runs once round the hue wheel over the layer's life (9 colour keys, ending on the start colour). Layers with a gradient or existing fill colour keys are skipped; greys have no hue and stay grey. Command parameters: cycles (1 to 8) and target (fill or stroke).
- Swing (Rig > Motion > Effects > Swing): a damped pendulum on the rotation of the ticked layers, released at 25 degrees from the playhead (60 frames, one swing every 24 frames) and settling on the layer's rest angle. The anchor is the pivot, so move it to where the layer hangs. Baked linear keys, one per frame; existing rotation keys in that range are replaced. Command parameters: angle, frames, period.
- Blink (Rig > Motion > Impact > Blink): the ticked layers squeeze to 10% of their height for four frames every 60 frames or so (gaps vary by a third, the same for all ticked layers so a pair of eyes blinks together). The anchor is the pivot. Baked linear scale keys; layers whose scale is already keyed are skipped. Command parameters: gap (8 to 240 frames) and seed.
- Snap to grid (Rig > Arrange > Align > Snap positions to a 10 px grid): rounds the static position and every position key of the ticked layers to the grid. Positions are the layer's own, so a child snaps relative to its parent. Layers with a position modifier are skipped, and nothing happens when every layer already sits on the grid. Command parameter: size (1 to 200 px).
- Cascade, random order (Rig > Arrange > Cascade by position > Random order): the same slide in time, but the delays are shuffled with a seed instead of following position (command parameter seed, 0 to 99999).
- Text case (Rig > Appearance > Text case): UPPERCASE, lowercase, Title Case or Sentence case on the ticked text layers. A counter's {n} slot is left alone. Find and replace (command palette, animation.text.replace, parameters find, replace, matchCase): replaces text in the ticked text layers, or in every unlocked text layer when none is ticked. Both are one undo step.
- Copy the look (Rig > Arrange > Match first layer > Copy the look): the fill colour or gradient, the stroke and the effects of the first ticked layer go onto the other ticked layers, like a format painter. Shape, size, position and timing stay. Colour keys are not copied (a layer with fill or stroke colour keys keeps that part); a text layer takes the colour but no gradient; the stroke is copied between shapes only. Command parameter parts (fill, stroke, effects) limits what is copied.
- Audio fade: the audio layer's volume section has one "Fade volume" select (Fade in, Fade out, Fade in and out; 12 frames). The volume gets keys from silence to the current level (and back) inside where the clip plays, in one undo step. The same command (animation.layers.fade) now fades audio layers too. Not offered once the volume already has keys.
- Duck (audio layer inspector, Volume: Duck under another clip): pick the voice clip and the volume of the selected (music) layer fades down to 25% just before the voice starts (8 frames) and back up just after it ends. The level and fade length are command parameters (animation.audio.duck: layer, under, level, frames). Keys the music already has inside that stretch are replaced; other keys stay. One undo step. Only the overlap of the two clips is ducked, and it is a baked volume lane, not a live sidechain.
- Normalise (audio layer inspector, Volume, Volume actions: Normalise to a 90% peak): sets the volume so the loudest peak of the part that plays (from the stored waveform) reaches 90% of full scale, up to 200%. A keyed volume keeps its shape and is scaled as a whole. Command animation.audio.normalize (target 10 to 100). The waveform is a coarse peak summary, so the result is accurate to a few percent. The Fade entries of the same select (Fade in, Fade out, Fade in and out) are only offered while the volume has no keys.
-
Trim silence (P300): the "Volume actions…" select in the audio inspector and
animation.audio.trimSilencecut quiet stretches off the start and end of the clip (default threshold 4 % of full scale, 0.05 s padding). The remaining sound stays at its place on the timeline. It works from the stored peak bins, so the cut is exact to one bin. One undo step. -
Fit length to content (P301): command
animation.comp.fitDuration(command palette) sets the composition length to the end of the last layer, rounded up to a whole frame. Audio clips count with their placement. One undo step; markers past the new end and the work area are clipped as with any shorter duration. -
Remove unused compositions (P302): command
animation.comp.purgeUnused(command palette) deletes every composition that the open composition does not reach through comp layers, including chains of unused ones. One undo step. - Split audio (P303): the Split command now also cuts audio clips at the playhead. The second part continues the same file at the same place (trim start and offset are set so nothing shifts), and the volume curve is kept. One undo step.
-
Repeat audio to the end (P304): command
animation.audio.loopToEnd(command palette) repeats the selected audio clip back to back until the composition ends (the last copy is cut at the end, at most 20 copies). Running it twice adds nothing; clips with a volume curve are skipped. One undo step.
Home · Releases · Repository documentation · MIT license
Documentation baseline: 13 October 2026. Check release notes for platform support and known limits. Design proposals are not released features.
Somnia
- Home
- Ai And Collaboration
- Cli
- Deploy
- Extensions
- Faq
- Features
- Frameworks
- Hero Actions
- Local Ai
- Local Source Search
- Quickstart
- Releases
- Settings
- Studios
- Studio 3d
- Studio Animation
- Studio Code
- Studio Design
- Studio Documents
- Studio Interface
- Studio Photos
- Studio Sheets
- Studio Slides
- Studio Sound
- Studio Vector
- Studio Vibe Space
- Studio Video
- Troubleshooting