SVGANIM Open the instrument

SVGANIM Operating Manual

Instructions for the animation of SVG drawings and their delivery as pure CSS. Read once through before beginning. Refer to Sec. 3 thereafter.

Instrument SVGANIM
Document Operating Manual
Revised Oct 16, 2026
Price None
Sec. 1

General

SVGANIM is an instrument for animating SVG drawings in the browser. A drawing is received, its parts are set in motion upon a timeline, and the result is delivered as one SVG file animated by CSS alone.

No player library ships with the drawing. No account is required. No fee is charged. Drawings never leave the machine: all work is done in the browser and retained there between sessions.

30°PIVOTAT REST
Fig. 1. Layer turned 30° about a pivot set at its lower left corner.
Sec. 2

Principal Features

Keyframe timeline
Position, scale, rotation, opacity, fill, stroke, stroke width and draw-on. Each property runs on its own track.
Pivot at any point
Rotation and scale act about an anchor placed freely, or fixed to a corner, edge or center of another layer.
Easing per transition
Bezier curves set by hand, standard presets, hold, bounce, elastic and spring.
Roving keys
One easing runs through several keys. Inner keys take their time from the span, and speed holds through them.
Path editing
Anchors, handles and pen, after the manner of the standard illustration programs.
Shape morphs
A path keyed at several times changes form between them.
Group work
Several layers moved, scaled and turned as one. Smart guides for alignment.
Onion skins
Neighboring poses drawn as tinted ghosts, by keyframe or every few frames.
True preview
The editor drives the very CSS properties the export writes. What is seen on the sheet is what is shipped.
Clean delivery
One .svg file, or a Svelte 5 component. Names are prefixed, so many drawings may share a page.
Sec. 3

Procedure

  1. 01

    Receive the drawing. Drop an .svg file on the page, paste markup with ⌘V, or press Import. Each top-level shape or group becomes a layer. A group may be broken into its parts with Divide, in the inspector.

  2. 02

    Set the pivot. Select a layer and drag its ⊕ anchor to the point about which it shall turn. The anchor snaps to the corners, edges and centers of every layer.

  3. 03

    Record keyframes. Auto-key is on from the start. Move the playhead and alter the layer. Each change is recorded as a keyframe at that time. The ◆ control in the inspector adds or removes a key outright.

  4. 04

    Fix the easing. Select a keyframe. Its easing governs the passage to the next key. Drag the curve handles or choose a preset.

  5. 05

    Proof the motion. Space runs the animation. ← and → step between keyframe times. ↑ and ↓ step single frames.

  6. 06

    Deliver. Export writes an .svg file or a Svelte 5 component. Save writes a .svganim.json project for later work.

Sec. 4

Easing

Every keyframe carries the easing of the motion leaving it. The last key of a track has none. Set default fixes an easing for every key made afterward.

Bezier
Exported as CSS cubic-bezier(). Handles may overshoot, for anticipation and recoil.
Hold
The value stands until the next key, then jumps. Exported as steps(1, end).
Roving keys
Select an inner key and press R. Its time is then derived: the easing of the fixed key before it runs on to the next fixed key, and the roving key is placed by its share of the distance, so the motion passes through without slowing. Press R again to fix it in time; the motion is kept as it stands. On export the span is cut into plain keyframes at the exact points, so the CSS replays it faithfully.
Bounce, elastic, spring
No single Bezier describes these. They are exported as CSS linear(), a polyline held within 0.15 percent of the true curve, with a cubic-bezier() fallback for older browsers.
P1P2TIME →10PROGRESS →
Fig. 2. Easing cubic-bezier(0.65, 0, 0.35, 1). Handles P1 and P2 govern the rate.
Sec. 5

Path Editing and Morphs

Double-click a shape, or select it and press Enter, to edit its path. Rectangles, circles, ellipses, lines and polygons are converted to paths on entry.

  • Drag an anchor to move it. Drag a handle to shape the curve. ⌥ breaks a smooth handle.
  • Click the outline to add an anchor. ⌥-click or double-click an anchor to switch it between corner and smooth.
  • ⇧ while dragging locks anchors to an axis, and handles to 45° steps.
  • Drag across empty space to box anchors. Hold ⌥ to swing the box about its first corner; it clings to the path’s own axes, and ⇧ steps it by 15°.
  • ⌫ deletes the selected anchors. ⌥ and the arrow keys nudge them.
  • The pen (P) draws a new path. Click for corners, drag for curves, Enter to finish.

With auto-key on, a path edited at the playhead records a shape keyframe. Between two shape keyframes the path morphs. Anchors added or deleted apply to every keyframe of that path, so its forms always correspond point for point.

Morphs are delivered as SVG <animate> on the path’s d attribute. Safari does not animate the CSS d property; <animate> runs in every browser, inside <img> as well.

Sec. 6

Delivery to a Svelte Site

Two forms are offered. Both carry the same keyframes.

SVG and CSS

One self-contained .svg file, its keyframes written in a <style> block within. Place it in static/ and reference it with an image tag, or import it raw and render it inline. Hover and manual playback require it inline.

<!-- static/gear.svg -->
<img src="/gear.svg" alt="Gear" width="240" height="240" />

<!-- inline, for hover and manual playback -->
<script>
  import gear from '$lib/gear.svg?raw';
</script>

{@html gear}

Svelte 5 component

The same drawing as a .svelte file. It takes a playing prop and passes class and all other attributes through to the svg.

<script>
  import Gear from '$lib/Gear.svelte';
  let playing = $state(true);
</script>

<Gear class="w-48" {playing} />

Options

  • Repeat. A set count, or forever.
  • Direction. Forward, or ping-pong.
  • Playback. Autoplay, on hover, or manual. Manual playback holds until the custom property --sa-play is set to running on the svg or a parent.
  • Reduced motion. Under prefers-reduced-motion the drawing freezes at the first frame, freezes at the end, or ignores the preference, as chosen.
Sec. 7

Specifications

Animated propertiesPosition, scale X and Y, rotation, opacity, fill, stroke, stroke width, draw-on, path shape
Easingcubic-bezier, presets, hold, bounce, elastic, spring, roving spans
DeliverySVG with embedded CSS. Svelte 5 component.
RuntimeNone. CSS animations; SVG <animate> for morphs.
BrowsersCurrent Chrome, Edge, Firefox and Safari
Accepted input.svg drawings and .svganim.json projects, 15 MB each at most
SanitationAllowlist. Scripts, event handlers, foreign content and outside references are stripped on receipt.
Timeline0.1 s to 10 min. 1 to 240 frames per second.
Sheet size1 to 20,000 units a side
Path capacity500 subpaths and 20,000 anchors per path
StorageIn the browser. Project files on demand.
PriceNone
Sec. 8

Questions Commonly Put

Is SVGANIM free?

Yes. No account, no fee, no watermark.

Does the exported animation require a JavaScript library?

No. The SVG runs on CSS keyframes, and path morphs on SVG’s own <animate> element. The Svelte component carries a few lines of its own and nothing more.

How does SVGANIM compare with Lottie?

Lottie delivers JSON played by a JavaScript player of considerable weight. SVGANIM delivers SVG and CSS that the browser plays natively, and that search engines and screen readers read as ordinary markup. Lottie files are not imported.

Are my drawings uploaded anywhere?

No. All work is done in the browser. Drawings and projects never leave the machine.

Which SVG files are accepted?

Output of Illustrator, Figma and Inkscape, icon sets, and hand-written markup. Style rules are folded into attributes. Gradients, masks, clip paths, patterns and filters are kept.

Can a shape change form, as in a morph?

Yes. Edit its path at two or more times with auto-key on. The path morphs between the recorded forms.

Does the export respect reduced motion?

Yes. Under prefers-reduced-motion the drawing freezes at the first frame or at the end, or plays regardless, as chosen at export.

Will the SVG work outside Svelte?

Yes. The .svg file is plain SVG and CSS. It serves in React, Vue, Astro, WordPress or plain HTML, anywhere an image or inline SVG serves.

Can several animations share one page?

Yes. Every class and keyframe name carries the export name as prefix, so no two drawings collide.

Is my work saved?

The project is kept in the browser between sessions. Save writes a .svganim.json file for safekeeping or for transfer to another machine.