<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shayan</title>
    <description>The latest articles on DEV Community by Shayan (@codeideal).</description>
    <link>https://dev.to/codeideal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3259876%2F4dad300e-95c9-4bcc-8ad1-bfe6bf0568a0.jpeg</url>
      <title>DEV Community: Shayan</title>
      <link>https://dev.to/codeideal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codeideal"/>
    <language>en</language>
    <item>
      <title>AtomCut made its own intro using Opus 5.5 ( Launch Motion design )</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sun, 27 Sep 2026 21:29:46 +0000</pubDate>
      <link>https://dev.to/codeideal/atomcut-made-its-own-intro-using-opus-55-launch-motion-design--2pg9</link>
      <guid>https://dev.to/codeideal/atomcut-made-its-own-intro-using-opus-55-launch-motion-design--2pg9</guid>
      <description>&lt;p&gt;The motion design you see was entirely built using Opus 5.5 using atomcut MCP. &lt;br&gt;
and it has a great taste.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/7wp0C5wHW2M" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This is one of those short articles, nothing more to say.&lt;br&gt;
Just amazed by the results and the fact that all is editable, and customizable.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>motion</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The easiest way to add liquid glass to your videos</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Mon, 21 Sep 2026 05:39:14 +0000</pubDate>
      <link>https://dev.to/codeideal/the-easiest-way-to-add-liquid-glass-to-your-videos-3efb</link>
      <guid>https://dev.to/codeideal/the-easiest-way-to-add-liquid-glass-to-your-videos-3efb</guid>
      <description>&lt;p&gt;Liquid glass looks great. It actually deserves to stay the design trend also in 2027.&lt;/p&gt;

&lt;p&gt;And getting them to your video is usually hard and needs extra work.&lt;/p&gt;

&lt;p&gt;So I added a built-in &lt;strong&gt;Glass UI&lt;/strong&gt; effect to &lt;a href="https://atomcut.net" rel="noopener noreferrer"&gt;AtomCut&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Draw your shape
&lt;/h3&gt;

&lt;p&gt;Create any shape on the canvas.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Add the Glass UI effect
&lt;/h3&gt;

&lt;p&gt;Inside the effects panel, add  &lt;strong&gt;Liquid Glass&lt;/strong&gt; effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tweak it
&lt;/h3&gt;

&lt;p&gt;Adjust the settings until it looks right.&lt;/p&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;You can animate the shape, change its position, scale, opacity, and the glass effect itself — just like any other layer in AtomCut.&lt;/p&gt;

&lt;p&gt;No After Effects setup.&lt;br&gt;
No plugins.&lt;br&gt;
No manually building the glass effect.&lt;/p&gt;

&lt;p&gt;Just draw → apply → animate → export.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://atomcut.net" rel="noopener noreferrer"&gt;Try it in AtomCut&lt;/a&gt; for free&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>uidesign</category>
      <category>marketing</category>
      <category>editing</category>
    </item>
    <item>
      <title>Figma-inspired video editing and motion design, done right</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sun, 20 Sep 2026 00:49:13 +0000</pubDate>
      <link>https://dev.to/codeideal/figma-inspired-video-editing-and-motion-design-done-right-5gcd</link>
      <guid>https://dev.to/codeideal/figma-inspired-video-editing-and-motion-design-done-right-5gcd</guid>
      <description>&lt;p&gt;A Figma-inspired video editor is one where the canvas is the place you work, the document is the truth, the browser is the runtime, and the free tier is the whole tool rather than a trial. AtomCut is that, with one addition Figma never made: a real multi-track timeline under the canvas, so a frame has a duration, a group is a clip, and every property you can see can be keyframed. It is free, needs no account, runs offline, and exports MP4, WebM, GIF, PNG sequences, SVG and Lottie. I built it alone over the last few months, and this post is about which Figma ideas survived contact with a time axis, which had to change, and what "done right" has cost so far.&lt;/p&gt;

&lt;p&gt;AtomCut is a free motion design and video editor that runs in the browser, at &lt;a href="https://app.atomcut.net" rel="noopener noreferrer"&gt;app.atomcut.net&lt;/a&gt;. I am not affiliated with Figma; it is the reference point because it is the one most designers and developers already have in their hands.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frulu9luww07eaaf158aw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frulu9luww07eaaf158aw.webp" alt="The AtomCut studio: a Lucide rocket icon on a 1920×1080 frame on the canvas, the Plugins panel on the left, the inspector on the right, and the timeline below showing the Rocket group on Track 1 with its four path layers as rows" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Canvas above, timeline below, one document underneath both. The rocket is a group; the group is a clip; its four paths are its rows.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What Figma got right, and what a timeline does to each idea
&lt;/h2&gt;

&lt;p&gt;Figma's real invention was not the pen tool. It was a set of decisions about where work lives: on an infinite canvas with artboards, in one document, edited by direct manipulation, in a browser tab you can send to anyone. Everything below is one of those decisions, what it became in AtomCut, and the thing time does to it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;In Figma&lt;/th&gt;
&lt;th&gt;In AtomCut&lt;/th&gt;
&lt;th&gt;What time adds&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frames (artboards) on an infinite canvas&lt;/td&gt;
&lt;td&gt;Frames on an infinite canvas, &lt;code&gt;F&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;a frame carries a duration and its own frame rate; nest one inside another and it becomes a clip with speed, loop, ping-pong and reverse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;Pages, plus auto-managed Nested and Components pages&lt;/td&gt;
&lt;td&gt;pre-comps and component sources live on their own pages, so the page you design on stays clean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components and instances&lt;/td&gt;
&lt;td&gt;Components: a frame flagged as a shared source; an instance is a nested clip pointing at it&lt;/td&gt;
&lt;td&gt;⌥-drag, paste and duplicate make new instances; editing the source updates all of them at the current time; detaching deep-clones on purpose&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variables&lt;/td&gt;
&lt;td&gt;Five typed variables: color, number, fontFamily, fontWeight, string; bind any field&lt;/td&gt;
&lt;td&gt;a variable shares one value across layers; a keyframe animates one value over time; they are different axes and both work on the same field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto layout&lt;/td&gt;
&lt;td&gt;Select what you already arranged, press &lt;code&gt;⇧A&lt;/code&gt;; the row, column or grid you made becomes the rule, gap included&lt;/td&gt;
&lt;td&gt;gap, padding and alignment are keyframeable, so a layout can widen over time like a shape changes colour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fills and strokes as paint lists&lt;/td&gt;
&lt;td&gt;Paint lists, solid and gradient, dashes, caps, joins&lt;/td&gt;
&lt;td&gt;every stop keyframes; a stroke can be trimmed along its length over time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boolean operations&lt;/td&gt;
&lt;td&gt;Composite groups: union, subtract, intersect, mask, as a mode on the group you already have&lt;/td&gt;
&lt;td&gt;the group is also a clip, so the boolean result can be trimmed, faded and moved as one thing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crop-mode image fill&lt;/td&gt;
&lt;td&gt;A cropped layer has two transforms: the window and the picture inside it&lt;/td&gt;
&lt;td&gt;you can pan the footage inside a nailed-down frame, and the two never fight between keyframes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugins&lt;/td&gt;
&lt;td&gt;Sandboxed plugins with a typed API; install from a &lt;code&gt;.zip&lt;/code&gt; under Plugins → Manage plugins…&lt;/td&gt;
&lt;td&gt;the built-in Icons, Waveform Visualizer and LipSync Studio are plugins, and they insert ordinary clips&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multiplayer&lt;/td&gt;
&lt;td&gt;Not yet&lt;/td&gt;
&lt;td&gt;this is the gap; more below&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern in the right column is the whole design. Nothing in the timeline is a special case bolted onto the canvas; every canvas idea kept its shape and gained a time dimension.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where Figma stops: a canvas has no time axis
&lt;/h2&gt;

&lt;p&gt;Every browser tool for motion I have used picks a side. Canvas-first tools (Jitter, Fable, Figma's own prototype transitions) have a stage you can draw on and a thin timeline. Video-first tools (CapCut, Clipchamp, Canva's video mode) have a timeline and no pen, no boolean ops, no keyframes on arbitrary properties. Both are good at what they chose. Neither lets you draw a lower third with a pen tool and then ripple-trim it against a talking-head clip in the same window.&lt;/p&gt;

&lt;p&gt;AtomCut's one structural bet is that the two halves belong together: canvas above, an NLE below. The timeline is a proper one, not a keyframe strip. Tracks are unified channels, so any clip rides any lane. Drag a clip into its neighbour to ripple or overwrite. Grab the seam between two clips to roll the edit. Link clips so they trim and delete together, the DaVinci way. Split with the razor and the split is keyframe-aware, so the curve is continuous across the cut. Audio shows real decoded waveforms and carries its own effect stack.&lt;/p&gt;

&lt;p&gt;None of that is new to video editors. What is new is what sits above it: the same frame that plays in the timeline is an artboard you can pen-edit, auto-layout and turn into a component.&lt;/p&gt;
&lt;h2&gt;
  
  
  A group is a clip, and the row is the container
&lt;/h2&gt;

&lt;p&gt;The place where "Figma idea meets timeline" is most visible is grouping. In Figma a group is a folder in the layers panel. In a video editor a group is usually a pre-comp: a separate composition you drill into, with its own timeline you cannot see next to the parent's.&lt;/p&gt;

&lt;p&gt;In AtomCut a group is a clip, exactly like any other, that happens to hold rows of its own. It sits on an ordinary lane of its parent, at any z. Open it and its rows appear nested under its bar, in the same timeline, at the same zoom. Because it is a clip it carries what every clip carries: transform, paint, effects, opacity, blend mode, feather, an in and an out animation, on top of whatever its members carry.&lt;/p&gt;

&lt;p&gt;Its span is a window, not a container that owns its children's time. Trim the group's edge and members past the edge are hidden, never retimed; trim it back out and they reappear where they were. Drop any clip onto a group and it joins. Drag a member past the group's edge and it lifts out onto its own row. A clip is in a group because it sits on one of that group's rows; there is no &lt;code&gt;clip.groupId&lt;/code&gt; field anywhere, so moving a clip onto a row is moving it into the group, and nothing ever needs compacting.&lt;/p&gt;

&lt;p&gt;This is also what an icon becomes. Drop a Lucide rocket from the built-in icon search and it lands as a group of four path layers. Turn on Draw On and the outline inks itself in over 900 ms, one path after another, in the order it was drawn. The group is the clip you trim; the paths are the rows you keyframe.&lt;/p&gt;
&lt;h2&gt;
  
  
  "Done right" means one document, evaluated as a function of time
&lt;/h2&gt;

&lt;p&gt;Here is the engineering under the claim, because "done right" is cheap to type.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The document is the product.&lt;/strong&gt; Everything a project is (frames, layers, paints, effects, keyframes, sounds, captions, variables, node graphs, motion tracks) lives in one zod-validated JSON document, &lt;code&gt;AtomCutDocument&lt;/code&gt;, currently at schema version 75. Every migration up to it still runs on load, so a file saved by an older build still opens. Nothing editor-specific leaks into the document; the web editor renders it, and a future native plugin could rebuild it from the same file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;durationMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;stageBackground&lt;/span&gt;      &lt;span class="c1"&gt;// one shared timeline for all frames&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;                    &lt;span class="c1"&gt;// Figma-style workspaces; the canvas shows one&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;frames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;                  &lt;span class="c1"&gt;// artboards (comps): x, y, w, h, durationMs, fps, component, instanceOf…&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;tracks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Track&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;                  &lt;span class="c1"&gt;// kind-agnostic lanes; a track with groupId is a ROW of that group&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graphs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;trackers&lt;/span&gt;      &lt;span class="c1"&gt;// typed variables, node graphs, motion tracks&lt;/span&gt;
&lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;markers&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The core is pure.&lt;/strong&gt; &lt;code&gt;@atomcut/core&lt;/code&gt; has no DOM and no React. Evaluation is a deterministic function, &lt;code&gt;(document, time) → frame&lt;/code&gt;, and it is the same code path for playback, scrubbing, the MP4 and WebM encoders, the PNG sequence and the Lottie translator. If the export ever differs from what you saw while scrubbing, that is a bug with one place to look, not a second renderer to reconcile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo is patches, not snapshots.&lt;/strong&gt; Every mutation goes through one store using immer's &lt;code&gt;produceWithPatches&lt;/code&gt;. A history entry stores forward and inverse patches; a continuous gesture coalesces into one entry through a merge key. Undo cost is proportional to the change, not to the document.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A frame rate is a grid, never a time.&lt;/strong&gt; Every frame carries its own &lt;code&gt;fps&lt;/code&gt; and there is no document-global rate, because a global rate plus a per-frame override is two stored fields for one fact, and the halves of the app that read each one disagreed the moment a comp set its own. A rate only quantizes: it is what the ruler ticks on, what ← and → step by, what snapping magnetises to, what the exporter iterates. So nesting composes for free. A 12 fps flipbook inside a 60 fps comp holds each drawing for 83.33 ms regardless; the parent samples every 16.67 ms and sees the same cell five times. Nothing resamples across a comp boundary, so nothing drifts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One fact, one field.&lt;/strong&gt; A mirrored layer is a negative scale and nothing else; there is no &lt;code&gt;flipX&lt;/code&gt; flag, because a flag plus a sign disagree the moment a keyframe interpolates between them. The pivot is stored as a fraction of the layer's own box, like CSS &lt;code&gt;transform-origin&lt;/code&gt;, so it survives a resize, a re-wrap and a media swap. Each of these replaced a family of bugs, not one bug.&lt;/p&gt;

&lt;p&gt;If you build editors, I wrote up &lt;a href="https://atomcut.net/blog/a-group-is-a-clip" rel="noopener noreferrer"&gt;why a group is a clip&lt;/a&gt; and &lt;a href="https://atomcut.net/blog/frame-rate-is-a-grid" rel="noopener noreferrer"&gt;why a frame rate is a grid&lt;/a&gt; at length; the two-transform crop, and why the content transform must know nothing about the crop insets, is next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keyframe anything, including whether an effect is on
&lt;/h2&gt;

&lt;p&gt;Figma's canvas is stateless in time. AtomCut's rule is: if a property has a value, it keyframes. Click the ◆ next to any field in the inspector to plant a key at the playhead. Or arm Record and just edit; every change you make while it is armed becomes a keyframe at the current time, which is how you animate things that have no obvious slider, like whether a blur is enabled or which font weight a word has.&lt;/p&gt;

&lt;p&gt;Keys are value-typed. Numbers interpolate. Colours blend in RGBA. Discrete values (a font weight, the text itself, an effect's on/off) hold until the next key. So a gradient stop, a shadow's blur, an EQ band and an auto-layout gap all animate through the same engine as a position. The curves panel shows real Bézier easing with draggable tangents; non-numeric tracks show as a dope sheet you retime.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in the box
&lt;/h2&gt;

&lt;p&gt;The point of this post is the model, not the feature list; I wrote &lt;a href="https://atomcut.net/blog/a-full-motion-studio-in-a-browser-tab" rel="noopener noreferrer"&gt;the full contents, with every gap I know of&lt;/a&gt; separately. The short version: 337,000 open-source icons from 208 sets, searchable inside the editor and each one a group of paths that can draw itself on. 4,555 CC0 sound effects with an ear guard that measures perceived loudness. 103 kinetic text looks, captions you tap in time to the clip, text on a path that re-lays on a live curve. 36 keyframeable effects, 23 transitions, motion tracking, a frame-by-frame mode with onion skin, 43 pressure brushes including a watercolour that bleeds.&lt;/p&gt;

&lt;p&gt;Export is where a Figma-shaped tool usually falls down, so: MP4, WebM, GIF, PNG sequence, a lossless MOV master with PCM sound for Resolve and Premiere, SVG with real glyph outlines, and Lottie with a fidelity report that says what the translator could not carry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fww809akplua81wfnqk90.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fww809akplua81wfnqk90.webp" alt="The AtomCut export dialog: Image, Video and Lottie tabs, a preview of a captioned 1920×1080 frame, Format set to MP4 video, Size 720p (1280×720), 30 fps, Include sound on, Encoder: WebCodecs or live recording" width="800" height="916"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The export dialog. Free is everything up to 720p, no watermark. Lifetime is the ceiling removed.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Figma work into it
&lt;/h2&gt;

&lt;p&gt;There is no &lt;code&gt;.fig&lt;/code&gt; import, and I am not going to pretend one is close. What works today: select the frame in Figma, export it as SVG, drop the file onto the AtomCut canvas. It lands as one resolution-independent layer, instantly, however many nodes it has. Click &lt;strong&gt;Edit as vector&lt;/strong&gt; and every disjoint piece becomes its own layer with its own fill, transform, effects and keyframes. From there it is an AtomCut document. Figma outlines text on SVG export by default, so words arrive as paths; for anything you want to retype or animate per glyph, set the type again in AtomCut with &lt;code&gt;T&lt;/code&gt; and bind it to a fontFamily variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does not do, in the order it will bother you
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No multiplayer.&lt;/strong&gt; This is the Figma feature, and AtomCut does not have it. The document is typed, versioned and patch-based, which is the groundwork a CRDT layer needs, and live collaboration is the next big piece of work. No date. Today it is one person per file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No speech-to-text.&lt;/strong&gt; Captions are typed and tapped, not transcribed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No 3D.&lt;/strong&gt; No cameras, no lights, no extruded text with materials; the text extrude is stepped 2D copies and its blurb says so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not for a two-hour feature.&lt;/strong&gt; It is for motion graphics, short video, UI animation, launch clips and captions. A native NLE will handle a 4K multicam timeline better than a browser tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two months old, one maintainer.&lt;/strong&gt; Rough edges exist, and there is no community yet to have found them for you. Reported bugs are usually fixed in the next release, and the &lt;a href="https://atomcut.net/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt; is public.&lt;/p&gt;

&lt;h2&gt;
  
  
  What free means here, and what $29 buys
&lt;/h2&gt;

&lt;p&gt;Every tool, effect, panel, icon and sound is free, with no watermark and no account, exporting up to 720p. AtomCut Lifetime is $29 once at launch ($49 later) and removes the resolution ceiling: Full HD, 4K, transparent and per-layer export, on web and desktop, every future version included. There is no subscription and there will not be one. The free tier has to be the real tool, because the only moment anyone pays is the moment they have something they want in HD.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is AtomCut a Figma plugin?&lt;/strong&gt; No. It is a standalone editor at app.atomcut.net. Figma work comes in as SVG.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I import a Figma file?&lt;/strong&gt; Not &lt;code&gt;.fig&lt;/code&gt;. Export or copy the frame as SVG, drop it in, click Edit as vector.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work offline and on an iPad?&lt;/strong&gt; Yes. It installs as a PWA and keeps working offline, saving projects locally; on an iPad it is the same workspace with touch and pencil pressure. Desktop builds exist for macOS, Windows and Linux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can several people edit one file at once?&lt;/strong&gt; Not yet. See the gaps above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it open source?&lt;/strong&gt; No. The &lt;a href="https://github.com/novincode/atomcut" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; hosts the releases and the &lt;a href="https://atomcut.net/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt; is public; the source is not open today.&lt;/p&gt;

&lt;p&gt;Open &lt;a href="https://app.atomcut.net" rel="noopener noreferrer"&gt;app.atomcut.net&lt;/a&gt;, press &lt;code&gt;R&lt;/code&gt;, draw a rectangle, arm Record, drag it somewhere else, and press Space.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>A full motion design studio in a browser tab, free, on Mac, Windows, Linux and iPad</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 14:01:59 +0000</pubDate>
      <link>https://dev.to/codeideal/a-full-motion-design-studio-in-a-browser-tab-free-on-mac-windows-linux-and-ipad-1b03</link>
      <guid>https://dev.to/codeideal/a-full-motion-design-studio-in-a-browser-tab-free-on-mac-windows-linux-and-ipad-1b03</guid>
      <description>&lt;p&gt;AtomCut is a free motion design and video editor that runs in the browser: a Figma-style infinite canvas with a real multi-track timeline underneath it, in one window, with no account and no install. It ships with 337,000 open-source icons, 4,555 public-domain sound effects, 103 kinetic text looks, 36 keyframeable effects, 23 transitions, vector morphing, captions, motion tracking and a frame-by-frame mode, and it exports MP4, WebM, GIF, PNG sequences, SVG and Lottie. It runs on macOS, Windows and Linux as a desktop app, on an iPad with touch, and offline once it has loaded.&lt;/p&gt;

&lt;p&gt;I built it, alone, so discount everything below by however much you like. Then open &lt;a href="https://app.atomcut.net" rel="noopener noreferrer"&gt;app.atomcut.net&lt;/a&gt;. It is free and there is nothing to sign up for, which means every sentence in this post can be checked in about ten minutes. That is the only reason I feel fine writing a post that is, unavoidably, a list of things my own app does.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyhwh8lqxlfkb2mlolume.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyhwh8lqxlfkb2mlolume.png" alt="AtomCut" width="799" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What "a whole studio in a tab" means
&lt;/h2&gt;

&lt;p&gt;Most browser tools for motion pick a side. Canvas tools (Jitter, Fable, Figma's prototype animations) have a good stage and a thin timeline. Video tools (CapCut, Clipchamp, Canva's video mode) have a timeline and no real vectors, no pen, no keyframes on arbitrary properties. AtomCut's one structural bet is that the two halves belong in one window: the canvas above, an NLE below, and one document underneath both, so a group is a clip, a text layer is a caption, an icon is a set of paths, and all of them keyframe the same way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2anl8yhowol6zvh9njkc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2anl8yhowol6zvh9njkc.webp" alt="The AtomCut studio: a Lucide rocket icon on a 1920×1080 frame, the Plugins panel on the left listing Icons, Waveform Visualizer and LipSync Studio, the inspector on the right, and the timeline below showing the Rocket group on Track 1 with its four path layers as rows" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;One window. Canvas, inspector, plugins rail, and the timeline with a group opened to show the four paths a Lucide rocket is made of.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The rest of this post is the contents. I have kept a "what it does not do" line in most sections, because a list with no gaps is an advert, and because those lines are where you decide whether it fits your work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vector tools that are actually vector tools
&lt;/h2&gt;

&lt;p&gt;A Bézier pen with per-node corner rounding. Parametric shape tools. Segment-level path editing. Boolean composite groups (union, subtract, intersect) that carry their own fill, stroke and effects and that you can still get back out of. Strokes are a pipeline, so one path can have trim, dash, wave, taper and markers stacked on it. Masks, track mattes and feathering. Auto layout that reads the row, column or grid you already arranged and makes it the rule (⇧A).&lt;/p&gt;

&lt;p&gt;Shape morphing is keyframed path geometry: set the points at one time, set them differently at another, and the app interpolates point by point. Draw on a raster layer with 43 pressure-sensitive brushes, including a simulated watercolour with wet bleed, granulation and drying, then split the drawing on its ink into separate layers.&lt;/p&gt;

&lt;p&gt;What it does not do: it is not Illustrator. No mesh gradients, no CMYK, no print workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  337,000 icons that animate themselves
&lt;/h2&gt;

&lt;p&gt;Every open-source icon set (208 sets: Lucide, Tabler, Phosphor, Material Symbols, Simple Icons, the emoji and flag sets) is searchable inside the editor, licence-gated so nothing non-commercial or share-alike can end up in your export. An icon is not a special object; it goes in through the SVG importer and lands as path layers in a group, so it morphs, takes effects, keyframes and exports like anything you drew.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpor57g0cyv7qa70cd467.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpor57g0cyv7qa70cd467.png" alt="Free Motion Design Icons inside AtomCut" width="799" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Draw On&lt;/strong&gt; is the part people stop on. It is a layer animation that inks the outline instead of moving the layer: together, one by one along the length, or staggered; from either end or the middle; fills kept, faded along or faded late. Drop a Lucide rocket, and it draws itself on over 900 ms, in the order it was drawn. Change the icon, the timing stays. Change the timing, the icon stays.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fghvw722ncsdukaxvuj5s.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fghvw722ncsdukaxvuj5s.webp" alt="A rocket icon half drawn on the canvas at frame 12, the Animate tab open on the right with Draw On at 900 ms, Order set to One by one, and its ease curve" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Frame 12 of a 900 ms Draw On. It is one tile in the same Animate tab every layer has.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What it does not do: search matches icon names, not synonyms. "home" misses the sets that call it "house". I wrote up &lt;a href="https://atomcut.net/blog/every-open-source-icon-draws-itself" rel="noopener noreferrer"&gt;how the icon panel is built&lt;/a&gt; if you want the engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Text animation is the big one
&lt;/h2&gt;

&lt;p&gt;Text was the first thing AtomCut did and it is still the deepest. Per-character styling. 103 text looks in the library (Karaoke, Neon, Synthwave, VHS, Typed, Terminal, Hologram, Lower Third, Title Card, Credits, Ticker, Datamosh…), each previewed as the real animation, each recoloured by one colour dial. 43 layer animations for entrances and exits. Per-glyph shadow, glow, extrude and echo as effect cards you can stack, sort and keyframe. Text converts to editable vector outlines. Right-to-left and bidirectional text with Arabic shaping, because I type Persian.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text on a path&lt;/strong&gt;: the text tool grows a wave cursor over any shape's edge; click, and the text binds to that outline. It never snapshots, so a morph or a keyframed corner radius re-lays the words on the live curve. Slide it along in laps, flip it, detach it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Captions&lt;/strong&gt;: a caption is a text layer with timed words. Type the words, press Tap sync and tap along as the clip plays, and the spoken word lights up at the playhead, styled however you like (Karaoke lights it as a white segment of the band; Punch switches it to the look's second colour; Whisper weights it). Retyping a word never shifts the others' timing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sound per letter&lt;/strong&gt;: a typing sound lands on each glyph as it appears, with its hit point on the transient, so kinetic type clicks in time rather than roughly near it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Favflsdqgvgy3zalgbn81.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Favflsdqgvgy3zalgbn81.webp" alt="AtomCut inspector on the Focus scope of a caption, four overrides listed (highlight colour, radius, padding) and a Focus pop scale of 106%, while on the canvas the word " width="800" height="426"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Focus scope: what the spoken word looks like, separate from the rest of the caption.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What it does not do: it does not transcribe. You type the words and tap the timing. If you need a first pass from speech, get it elsewhere and bring the words.&lt;/p&gt;

&lt;h2&gt;
  
  
  4,555 sound effects, and a sound stack
&lt;/h2&gt;

&lt;p&gt;An archive of public-domain sounds (Kenney, OpenGameArt's CC0 subset, a synthesized set of ours; 37 publishers, 91 packs), searchable from inside the editor. Every row draws its real waveform before you download a byte. ↓ walks the shelf and plays as it goes; ↵ drops the sound at the playhead with its transient on the playhead, not its first sample. An ear guard measures each sound's perceived loudness, not its peak, and holds anything above a ceiling down to it, so a brickwalled impact cannot ambush you between two soft ticks.&lt;/p&gt;

&lt;p&gt;Audio clips carry an effect stack of their own: parametric EQ, reverb, echo, compressor and drive, plus keyframed gain, fades, pitch and keep-pitch. Cut transitions crossfade audio. A Waveform Visualizer plugin draws a procedural waveform or spectrum that reacts to any clip's sound, live; a LipSync Studio plugin maps mouth shapes to a voice clip and generates the switches as an ordinary nested clip.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fli5d4okqzcvrd76ovnjb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fli5d4okqzcvrd76ovnjb.webp" alt="Three audio clips on the AtomCut timeline: Riser Tension, a whoosh, and Transition Glitch selected at the playhead, with the inspector showing volume, fades, the sound effect stack and role SFX" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Three sounds placed with Enter. Ordinary audio clips, tagged SFX, each with fades, an effect stack and keyframable gain.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What it does not do: dragging a sound onto a lane places the file as it is and ignores the landing settings; use ↵ or Add for those. The &lt;a href="https://atomcut.net/blog/a-sound-effects-library-that-protects-your-ears" rel="noopener noreferrer"&gt;loudness story&lt;/a&gt; is its own post.&lt;/p&gt;

&lt;h2&gt;
  
  
  36 effects, 23 transitions, and everything keyframes
&lt;/h2&gt;

&lt;p&gt;The effect stack is one list, on any layer, and every field on every card keyframes. Shadow, glow, blur, motion blur, RGB split. Light rays, lens flares, a travelling shine, live lightning. Bulge, wave, twirl, lens distortion, roughen edges, glitch. Halftone, pixelate, bevel, posterize, gradient map. A liquid glass that refracts the real backdrop behind it. Film grain, damage, scanlines, vignette, sharpen. Lift/gamma/gain colour wheels. Chroma key and one-click background removal. The same stack applies to the whole frame as a final pass, or through an adjustment layer with a scoped reach.&lt;/p&gt;

&lt;p&gt;Transitions: Cross, Soft, Additive and Blur Dissolve, Dip to Colour, Push, Slide Over, Slide Apart, Roll, Iris, Clock Wipe, Barn Door, Bloom, Flash, Glitch, Shake, Smear, Pop, Displace, and a few more, each with its own knobs.&lt;/p&gt;

&lt;p&gt;Motion tracking follows position, scale and rotation in a video and drives any layer, effect region or matte with it.&lt;/p&gt;

&lt;p&gt;What it does not do: there is no GPU-heavy 3D. No cameras, no lights, no extruded 3D text with materials. The extrude on text is stepped 2D copies behind each letter, and its blurb says so.&lt;/p&gt;

&lt;h2&gt;
  
  
  Animation: keyframe anything, including on/off
&lt;/h2&gt;

&lt;p&gt;Any property keyframes, including whether an effect is enabled. Record mode keys every edit you make while it is on. A curve editor and a dope sheet, easing presets and custom cubic-béziers, motion paths with spatial tangents. Speed is a keyframed property too: ramp into slow motion, hold a frame, drift back. Node graphs and expression drivers, modulators, typed variables that layers reference across the document, so one colour variable retints a whole brand's worth of icons.&lt;/p&gt;

&lt;p&gt;A flipbook mode does frame-by-frame with onion skinning, and each nested composition keeps its own frame rate, which nests correctly because a frame rate is a grid, not a clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  Export: MP4, WebM, GIF, PNG, SVG, Lottie
&lt;/h2&gt;

&lt;p&gt;MP4, WebM and GIF. PNG sequences. Transparent and per-layer exports. Audio-only bounce. SVG, where a text on a path carries real glyph outlines already placed on the curve. Lottie, with a fidelity report that tells you what the translator could and could not carry, because Lottie cannot read a live relation and so every derived frame is baked to ordinary keys first, Draw On included.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0gzlco2w4jp3yx3vxehy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0gzlco2w4jp3yx3vxehy.webp" alt="The AtomCut export dialog: Image, Video and Lottie tabs, a preview of a captioned 1920×1080 frame, Format set to MP4 video, Size 720p at 0.67× (1280×720), 30 fps, Include sound on, Encoder: WebCodecs or live recording" width="800" height="916"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The export dialog on a 1080p composition, sized to 720p. Free is everything up to 720p; Lifetime is the ceiling removed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What it does not do: there is no MOV or ProRes, and no 4K in the free tier. Free exports are capped at 720p with no watermark; AtomCut Lifetime is $29 once (the launch price; $49 later) for Full HD, 4K and beyond, transparent and per-layer export, on web and desktop, every future version included. There is no subscription and there will not be one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mac, Windows, Linux, iPad, offline
&lt;/h2&gt;

&lt;p&gt;It is a web app first: &lt;a href="https://app.atomcut.net" rel="noopener noreferrer"&gt;app.atomcut.net&lt;/a&gt; is the whole thing, and it installs as a PWA and keeps working offline, saving projects locally. There are desktop builds for macOS, Windows and Linux for people who want a dock icon and file associations. On an iPad it is the same workspace with touch: long-press menus, two-finger gestures, pressure on the brushes with a pencil. One workspace at every screen size, not a mobile subset.&lt;/p&gt;

&lt;p&gt;Shortcuts match the physical key, so ⌘Z works under a Persian, Arabic, Cyrillic or Greek layout, and there are keymap presets for Premiere, DaVinci Resolve and Blender if your hands already know one of those.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is bad at
&lt;/h2&gt;

&lt;p&gt;It is two months old, and one person maintains it, so there are rough edges, and there is no community yet to have found them for you. It is for motion graphics, short video, UI animation, launch clips and captions; it is not for cutting a two-hour feature, where a native NLE will handle a 4K multicam timeline better than a browser tab will. There is no live collaboration; a document is typed and versioned (schema v72, every migration still running), which is the groundwork for it, but today it is one person per file. No speech-to-text. No 3D.&lt;/p&gt;

&lt;p&gt;Reported bugs are usually fixed in the next release, and the &lt;a href="https://atomcut.net/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt; is public, so you can read exactly what changed and when.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is it free?
&lt;/h2&gt;

&lt;p&gt;Because I think the studio should be the free part. Every tool, effect and panel, every icon and sound, no watermark, no account: that is what makes it possible to open a link and check this post instead of taking my word. The thing you pay for once is the resolution ceiling coming off, at the moment you have something you want in HD. That is the whole business model, and it means the free app has to be genuinely good, or nobody ever reaches that moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is AtomCut really free?&lt;/strong&gt; Yes. The whole studio, with no watermark, exporting up to 720p. Lifetime ($29 once at launch) removes the resolution limit and adds transparent and per-layer export.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use the icons and sounds commercially?&lt;/strong&gt; Yes. Icon sets are gated to licences that permit commercial use in rendered artwork (CC BY sets show who to credit). Every sound is CC0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work on Linux and iPad?&lt;/strong&gt; The web app runs anywhere a modern browser does, including iPad with touch. Desktop builds exist for macOS, Windows and Linux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I export to After Effects or Figma?&lt;/strong&gt; No. Export is MP4, WebM, GIF, PNG sequence, SVG and Lottie. Lottie is the interchange format for developers; SVG for designers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it open source?&lt;/strong&gt; The source is public under a Fair Source licence (FSL-1.1-MIT): you can read it, run it and modify it, and it converts to MIT after two years.&lt;/p&gt;

&lt;p&gt;Open &lt;a href="https://app.atomcut.net" rel="noopener noreferrer"&gt;app.atomcut.net&lt;/a&gt;, press T, type something, and press Space.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>330,000 free icons for video, and every one of them can draw itself on</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 02:20:42 +0000</pubDate>
      <link>https://dev.to/codeideal/330000-free-icons-for-video-and-every-one-of-them-can-draw-itself-on-gnd</link>
      <guid>https://dev.to/codeideal/330000-free-icons-for-video-and-every-one-of-them-can-draw-itself-on-gnd</guid>
      <description>&lt;p&gt;AtomCut now ships an Icons panel: Lucide, Tabler, Phosphor, Material Symbols, Simple Icons, the emoji sets, the flag sets, 208 open-source icon sets and 337,000 icons, searchable from inside the editor and dropped onto the canvas as ordinary vector layers. Pick an ink, a size and an entrance in the panel's footer, drag an icon onto the stage or a timeline lane, and it lands drawing itself on: the strokes ink in over 900 ms, one piece after another, in the order the icon was drawn. That is an animated icon for a video, made from a free icon, in one drag. AtomCut is a free motion design and video editor that runs in the browser, no account, no install.&lt;/p&gt;

&lt;p&gt;I want to write down the two decisions underneath it, because both look obvious afterwards and neither was the first thing I built.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do 337,000 icons come from?
&lt;/h2&gt;

&lt;p&gt;Not from us. Every serious open icon set is published in the Iconify data format: a JSON file per set with the set's name, author, licence, sample icons, and one entry per icon holding its SVG body and viewBox. The same format feeds the Iconify plugin for Figma and the icon pickers in half the component libraries you have used. There is a public API in front of it that lists the sets, lists a set's icons, searches names across all of them, and returns bodies in batches.&lt;/p&gt;

&lt;p&gt;My first instinct was a pipeline: pull the JSON, index it, publish it to object storage next to the sound library, ship a search. I got as far as sketching the manifest before noticing I was re-deriving, badly, exactly the three endpoints the API already had. So the editor asks the API. It asks it through a hostname I own, a Cloudflare Worker that caches every answer at the edge and forwards nothing but the four paths the panel uses, with the public API as the fallback if that Worker is ever down. If I later want richer tags than names, that is a different origin behind the same base URL, not a rewrite.&lt;/p&gt;

&lt;p&gt;The one thing I did build is a licence gate. The catalogue includes sets under non-commercial and share-alike terms, and a 24px glyph must never put a condition on the video you export. AtomCut offers a set only if its SPDX licence is on a short list that allows commercial use in a rendered artwork, shows the licence on every set's cover, and for CC BY sets names who to credit. That cut 238 sets to 208.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8j4ib6b2byg99lhu8v1r.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8j4ib6b2byg99lhu8v1r.webp" alt="The Icons panel open over the AtomCut studio: a rail of sets on the left, and on the right the families Interface, Material, Emoji and Logos as horizontal rows of set covers, each showing four sample icons, its icon count and its licence" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Home. One row per family, the licence on every cover, View all at the end of each row.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an icon is not an icon layer
&lt;/h2&gt;

&lt;p&gt;It would have been quick to add an &lt;code&gt;icon&lt;/code&gt; clip kind that stores &lt;code&gt;lucide:rocket&lt;/code&gt; and renders the body. It would also have been wrong in the way that costs the most later: a new kind of layer is a new row in every table in the app. Selection, keyframes, effects, the SVG exporter, the Lottie translator, morphing, the pen tool, the Layers panel: each would need to learn what an icon is, and until every one had, an icon would be the layer that does less.&lt;/p&gt;

&lt;p&gt;So an icon goes in through the SVG importer, the same door a dropped &lt;code&gt;.svg&lt;/code&gt; file uses. The importer already splits every disjoint piece of an SVG into its own path layer and groups them. A Lucide rocket therefore arrives as four path layers in a group called Rocket, each with a stroke list, each editable with the pen, each keyframeable, each able to morph into something else. The panel's only job is to decide what the SVG says before it goes in: the ink (which can be a colour variable, so a brand palette retints every icon at once), the landing size, and the stroke width if you want thinner lines than the set drew.&lt;/p&gt;

&lt;p&gt;One real bug fell out of doing it this way, and it was in the importer, not the panel. Lucide, Feather and Tabler put the whole look on the root &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt; element: &lt;code&gt;fill="none" stroke="currentColor" stroke-width="2"&lt;/code&gt;. The importer walked the root's children starting from an empty style, so every icon came in black and filled. Nobody had noticed because nobody had dropped a bare Lucide file before; the panel dropped a thousand of them in an afternoon. The fix made the root part of the cascade, and every SVG import in the app got a little more correct.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdydwts34npofcaktiu3k.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdydwts34npofcaktiu3k.webp" alt="A Lucide rocket on the canvas, selected, with the timeline below showing a Rocket group on Track 1 and its four path layers as rows underneath it" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;What lands: a group of path layers, not an icon object. Everything a path can do, the icon can do.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Draw On, and why it is not a pose
&lt;/h2&gt;

&lt;p&gt;Layer animations in AtomCut are poses: a preset takes a progress from 0 to 1 and returns an opacity, an offset, a scale, a rotation, a blur. Fades, slides, bounces and spins are all that one function. It is deliberately small, because the same pose is read by the canvas, by text glyphs, by the SVG exporter and by the Lottie translator, and none of them has to know which preset produced it.&lt;/p&gt;

&lt;p&gt;A stroke drawing itself on is not a pose. It cannot be expressed as where the layer is; it is how much of a line exists. I did not want to teach a pose about outlines, because then a text glyph and a Lottie transform would be carrying a field that means nothing to them. So Draw On is a second channel of the same preset: same id, duration, easing, in and out edges, and the same timeline handle drags it, but only the stroke pipeline reads it. The compositor sees the identity pose and takes its fast path.&lt;/p&gt;

&lt;p&gt;The pipeline was ready for it, which is the part I was most pleased about. Every stroke in AtomCut already runs a trim stage, and trim is cut as exact Béziers along arc length. A draw-on is a trim window per strand that opens over time, applied before the stroke's own trim, so a dash of light can still chase around a half-drawn logo. The knobs are the ones After Effects' Trim Paths and every SVG draw-on library converged on:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Knob&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Order&lt;/td&gt;
&lt;td&gt;Together, One by one (along the total length, the pen never lifts), Staggered (equal shares, each a beat after the last)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stagger&lt;/td&gt;
&lt;td&gt;For staggered: 0% is together, 100% is back to back, more leaves a pause between pieces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pieces&lt;/td&gt;
&lt;td&gt;Bottom piece first, the way the icon was drawn, or top first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Start at&lt;/td&gt;
&lt;td&gt;Where along each strand the ink begins, 0 to 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direction&lt;/td&gt;
&lt;td&gt;Forward, backward, or both ways out of the start point&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fill&lt;/td&gt;
&lt;td&gt;Keep, fade along, or fade late (the fill lands as the last line does)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pen&lt;/td&gt;
&lt;td&gt;The width borrowed when a filled icon has no stroke of its own&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last row is what makes it work on Material and Font Awesome, which are silhouettes with no line to draw. Draw On inks the silhouette's edge in the fill colour and then brings the fill in behind it.&lt;/p&gt;

&lt;p&gt;A group read-through does the rest. Put Draw On on the Rocket group and its four paths draw as one drawing, bottom piece first, because that is document order in the SVG and the order a person drew it in. A child with its own Draw On keeps it; clear the group's and every child is untouched. It is the same rule a group's fill already followed, and it is the whole deep-customisation story: one setting for the icon, and any piece that deserves its own timing gets its own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1sri0kerm2kdtpplvq2p.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1sri0kerm2kdtpplvq2p.webp" alt="The rocket half drawn on the canvas at frame 12, the Animate tab open on the right showing Draw On at 900 ms with Order set to One by one, From set to Start and Fill set to Fade late, and its ease-in-out curve" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Frame 12 of a 900 ms entrance. The Animate tab is the same one every layer has; Draw On is one more tile in it.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Animated icons for video, without the marketplace
&lt;/h2&gt;

&lt;p&gt;The reason this matters more than a picker: an animated icon pack is a product category. Sites sell them by the thousand, as Lottie files or MP4 loops, one motion baked per icon. Here the motion is a setting and the icon is a layer, so the pairing is yours. Any of 337,000 icons, any entrance in the gallery, any easing, any duration, in the brand colour from your variables, exported as MP4, WebM, GIF, PNG sequence, SVG or Lottie from the same render. Change your mind about the timing after the fact and it is a slider, not a re-download.&lt;/p&gt;

&lt;p&gt;Lottie was the export I expected to lose, and did not. A Lottie trim is one window per shape group, keyed over time; a draw-on is exactly that, one per strand, so the exporter bakes the windows it would have drawn, one key per frame, and a filled icon gets the same borrowed outline the canvas gives it. The file is bigger than a hand-authored one would be. It plays the same.&lt;/p&gt;

&lt;p&gt;The panel is in the Plugins rail of the editor now. The documentation, with every knob and every family, is at &lt;a href="https://atomcut.net/docs/icons" rel="noopener noreferrer"&gt;/docs/icons&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>svg</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Add animated captions to a video in the browser, free</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Wed, 16 Sep 2026 16:46:46 +0000</pubDate>
      <link>https://dev.to/atomcut/add-animated-captions-to-a-video-in-the-browser-free-1pg1</link>
      <guid>https://dev.to/atomcut/add-animated-captions-to-a-video-in-the-browser-free-1pg1</guid>
      <description>&lt;p&gt;AtomCut adds word-by-word, karaoke-style captions to a video in your browser: you type the words, cut them into cues, sync the timing, style the active word, and export an MP4. AtomCut is a free motion design and video editor that runs in the browser, no account, no install.&lt;/p&gt;

&lt;p&gt;There's one thing it doesn't do yet: it doesn't listen to your audio and write the words for you. You type the script, and you time it. That's slower than a one-click auto-transcribe, and it's also why the timing is exactly what you want and not what a speech model guessed.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Import your clip
&lt;/h2&gt;

&lt;p&gt;Drag your video onto the canvas, or use &lt;strong&gt;Import media&lt;/strong&gt; in the Media panel and then &lt;em&gt;Place on frame&lt;/em&gt;. It lands on its own track with its sound attached; the composition below is a 1920×1080 frame, but a vertical 1080×1920 reel is one click away in the new-project dialog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faq84nxxeuuyseh35lbyy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faq84nxxeuuyseh35lbyy.webp" alt="The AtomCut studio: a talking-head clip on the canvas, the caption above it on Track 1 and the video on Track 3 in the timeline" width="800" height="470"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The whole studio. The caption sits on the track above the video, so it draws on top.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Type the words as a text layer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;+ Clip → Text&lt;/strong&gt; in the timeline header adds a text layer at the playhead. Open &lt;em&gt;Content&lt;/em&gt; in the inspector and type what's said, exactly as it's said. This is the one string every caption cue will be a span of, so get the words right here.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Turn it into a caption and cut it into cues
&lt;/h2&gt;

&lt;p&gt;In the same &lt;em&gt;Content&lt;/em&gt; section, switch on &lt;strong&gt;Captions&lt;/strong&gt;. That seeds one cue per word across the clip and gives the spoken word a highlight you can see immediately. (There's also &lt;strong&gt;+ Clip → Caption&lt;/strong&gt; if you'd rather start with a caption and type into it.)&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Cues&lt;/strong&gt; tab appears on the right rail. Its &lt;em&gt;re-cut&lt;/em&gt; menu recuts the same text one word per cue, one line per cue, or one letter per cue; word-level is the karaoke look most people want. Each cue is a span of your original string, so retyping a word in the cue list later doesn't touch any other cue's timing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftiy3qk188oygc6xi6z4c.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftiy3qk188oygc6xi6z4c.webp" alt="The caption selected on the canvas with the Animate tab open: a Scale In animation per word, 260 ms, with its easing curve" width="800" height="426"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A caption is a text layer, so it takes any text animation: here Scale In, per word.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Time the cues
&lt;/h2&gt;

&lt;p&gt;Two ways to do it. Tap sync plays the clip and lets you tap a button in time with each word, which stamps that cue's start where you tapped. Or spread every cue evenly across the clip's duration with one click, then drag individual cue boundaries by hand where the even spacing is off. You can also give a cue a word from its neighbour, split one cue in two, or merge two into one, all from the same cue list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno4i341yp8x18olh1fyo.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno4i341yp8x18olh1fyo.webp" alt="The Cues panel: Tap sync button, re-cut and even controls, and eight word cues with their durations, the fifth one active at the playhead" width="800" height="426"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Cues panel. The lit row is the word under the playhead.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Style the word being spoken
&lt;/h2&gt;

&lt;p&gt;The inspector for a caption has two scopes at the top: &lt;strong&gt;Text&lt;/strong&gt; (the whole layer) and &lt;strong&gt;Focus&lt;/strong&gt; (the word being spoken). Pick &lt;em&gt;Focus&lt;/em&gt; and every field you touch overrides only that word: its colour, a highlight colour with its own radius and padding, and a &lt;em&gt;Focus pop&lt;/em&gt; scale. The focus is a style range on the same text layer, not a separate object, so it stays attached to its word as you keep editing cues around it.&lt;/p&gt;

&lt;p&gt;For the look in these screenshots we didn't style anything by hand: the Library's &lt;em&gt;Text looks&lt;/em&gt; has a &lt;strong&gt;Captions&lt;/strong&gt; group (Subtitle, Punch, Karaoke, Clean Sub, Boxed, Shout, Ticker, Whisper), and &lt;em&gt;Karaoke&lt;/em&gt; applied to the selected layer gives the green band with the spoken word switching to white. A caption look carries its own idea of the spoken word, so applying one restyles the lit word too. Everything else in the caption can carry its own reveal preset and stagger, the same system that drives any AtomCut text animation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hdv8km258150g4eypxw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hdv8km258150g4eypxw.webp" alt="The Focus scope of the caption inspector: four highlight overrides (colour, radius, padding) and a Focus pop scale of 106 %" width="800" height="426"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Focus scope: the overrides that apply only to the word being spoken.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Export
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://atomcut.net/docs/exporting" rel="noopener noreferrer"&gt;Export&lt;/a&gt; as MP4, WebM or GIF. Every export is free with no watermark, capped at 720p; the one-time $29 adds HD, 4K and transparent export if you need more than social-post resolution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh5fkr9ftd5sws1dr1cq4.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh5fkr9ftd5sws1dr1cq4.webp" alt="The Export dialog on the Video tab: MP4 video, 720p HD, 30 fps, include sound on" width="800" height="916"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Export, Video tab. 720p is the free ceiling; the one-time licence unlocks the sizes above it.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AtomCut does not transcribe your audio. There's no speech-to-text step: you type the caption's text yourself and time the cues by tapping along or dragging, rather than getting a rough auto-transcript to clean up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Questions people ask
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does AtomCut transcribe my audio automatically?&lt;/strong&gt;&lt;br&gt;
No. You type the words as a text layer, then convert them to a caption and cut them into cues. If you already have an SRT or a transcript, you'd paste the text in and time the cues from there rather than importing timed subtitles directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I give one word a different look from the rest?&lt;/strong&gt;&lt;br&gt;
Yes. Select a run of letters or words in the caption and give that span its own animation or style, independent of the rest of the layer, without splitting it into a separate text layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this work on a tablet?&lt;/strong&gt;&lt;br&gt;
The drawing and timeline tools share one workspace at every size, so tap-syncing cues works the same on a tablet as it does with a mouse.&lt;/p&gt;

&lt;p&gt;Once your cues are timed, the next thing worth trying is a sound on every word instead of just a style change — see &lt;a href="https://atomcut.net/blog/kinetic-typography-with-sound" rel="noopener noreferrer"&gt;kinetic typography with a sound per letter&lt;/a&gt; or the full reference at &lt;a href="https://atomcut.net/docs/text-animation" rel="noopener noreferrer"&gt;/docs/text-animation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://app.atomcut.net" rel="noopener noreferrer"&gt;app.atomcut.net&lt;/a&gt; — free, no account, works offline.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>video</category>
      <category>tutorial</category>
      <category>design</category>
    </item>
    <item>
      <title>I built a motion design studio in the browser. Here's what it took.</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Wed, 16 Sep 2026 15:46:53 +0000</pubDate>
      <link>https://dev.to/atomcut/i-built-a-motion-design-studio-in-the-browser-heres-what-it-took-3ic1</link>
      <guid>https://dev.to/atomcut/i-built-a-motion-design-studio-in-the-browser-heres-what-it-took-3ic1</guid>
      <description>&lt;p&gt;&lt;a href="https://atomcut.net" rel="noopener noreferrer"&gt;AtomCut&lt;/a&gt; started as a tool that was supposed to animate text. Today it's an infinite canvas above a multi-track timeline, in the browser, where you can keyframe anything, paint with a wet watercolour brush, track motion, add captions that follow a voice, and export to MP4, GIF, SVG or Lottie. It's free, there's no account, and it works offline.&lt;/p&gt;

&lt;p&gt;This is the honest version of how it got there, because the tidy version ("I had a vision and executed") isn't useful to anyone building something ambitious on their own time.&lt;/p&gt;

&lt;h2&gt;
  
  
  It started as a typing animation
&lt;/h2&gt;

&lt;p&gt;The folder is still called &lt;code&gt;typomation&lt;/code&gt;. The first thing it did was type words onto a frame, one letter at a time, with a sound on each keystroke, so a short clip could have a title that arrived the way a typewriter would put it there.&lt;/p&gt;

&lt;p&gt;The problem with a tool that only does one thing well is that the second thing you need is always outside it. I needed a background clip under the text. Then a sound on each letter. Then the text had to move along a path. By the time I had those, I had a timeline that didn't care what kind of clip sat on it, and the question stopped being "what should a text tool do" and became "what is the smallest set of ideas that makes everything else a special case".&lt;/p&gt;

&lt;h2&gt;
  
  
  The one rule everything else hangs on
&lt;/h2&gt;

&lt;p&gt;Anything that describes &lt;em&gt;what&lt;/em&gt; an animation is lives in a pure package with no DOM and no React. Anything that describes &lt;em&gt;how it's shown or edited&lt;/em&gt; lives in the app. That's the whole architecture, and every good week I had came from it.&lt;/p&gt;

&lt;p&gt;Concretely: a project is one JSON document, validated with zod, versioned. The document is at schema version 71 today, and every one of those migrations still runs, so a project from the first month opens. Rendering a frame is a pure function: &lt;code&gt;(document, time) → what you see&lt;/code&gt;. Playback, scrubbing, the MP4 exporter, the PNG sequence exporter and the Lottie exporter all call the same function. There is no "export renderer" that drifts from the "preview renderer", because there's only one.&lt;/p&gt;

&lt;p&gt;Undo is patches, not snapshots. Every mutation runs through one store that records a forward patch and an inverse patch. Undo cost is proportional to the size of the change, not the size of the project, and a continuous gesture (dragging a keyframe for two seconds) coalesces into one history entry.&lt;/p&gt;

&lt;p&gt;None of this is novel. It's the same shape Figma and Photoshop ended up at. What I'm saying is that if you &lt;em&gt;start&lt;/em&gt; there, a lot of features become a union variant and a registry row instead of a rewrite. A group on the timeline is a clip that happens to contain rows. A caption is a text clip with a cue map. A flipbook is a nested composition whose cells are drawings. When the primitives are right, the feature list grows without the codebase growing the same way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbmoicuul7hr6w1ez9ju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbmoicuul7hr6w1ez9ju.png" alt="The AtomCut studio: a 9:16 frame on the canvas with a caption whose first word is lit at the playhead, the timeline below with a text clip and a caption clip on one track, and the typography inspector open for the two selected layers" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The studio: canvas above, timeline below. Two layers selected, the caption&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What was actually hard
&lt;/h2&gt;

&lt;p&gt;Not the effects. Thirty-six layer effects sounds like the hard part; it's the easy part, because an effect is a shader and a settings card, and the keyframe engine already animates any number.&lt;/p&gt;

&lt;p&gt;The hard parts were the ones where two true things fight:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A cropped video has two things you can move.&lt;/strong&gt; The window and the picture inside it. If you store that as one transform plus four insets, every keyframed reframe visibly swims between keys, because three animated quantities cancel to a constant that the interpolation doesn't know about. The fix was two transforms, one for the window and one for the content, and a rule that the content transform never reads the crop. It took a week to see that the bug was in the data model and not in the interpolation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A mirrored layer is a negative scale, and nothing else.&lt;/strong&gt; I had a &lt;code&gt;flipX&lt;/code&gt; flag for a while. A flag plus a sign is two fields for one fact, and they disagreed the moment a keyframe interpolated across a flip. Deleting the flag deleted a family of bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A frame rate is a grid, never a time.&lt;/strong&gt; There is no project-wide fps. Each composition carries its own, and a rate only ever quantises: it's what the ruler ticks on, what the arrow keys step by, what export iterates on. A 12 fps flipbook inside a 60 fps comp holds each cell for 83.33 ms and nothing resamples anything, so nothing can drift. The earlier version had a global rate plus overrides, and half the app read one while half read the other.&lt;/p&gt;

&lt;p&gt;The crop one cost the most. I fixed the interpolation three times before I admitted the data was wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The changelog is the spec
&lt;/h2&gt;

&lt;p&gt;Every change has to earn one line in a public changelog, written before the code: what can a user do now that they couldn't before. If I can't write that line, the change doesn't ship. It sounds like process; it's actually the fastest way I've found to kill work that only feels productive. Half of what I started never got its line.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it's bad at
&lt;/h2&gt;

&lt;p&gt;Cutting a two-hour 4K timeline. It renders in the browser; a native NLE will beat it on heavy footage. It's young, so you will find rough edges; when someone reports one, it's usually fixed in the next release, and you can watch that happen in the changelog.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;It's free and it stays free. Exports are capped at 720p; $29 once, not a subscription, removes the cap. After that, the plan is live collaboration, an assistant inside the editor that can operate the timeline, and the plugin SDK opening up.&lt;/p&gt;

&lt;p&gt;If you make anything with it, I'd like to see it. It opens at &lt;a href="https://app.atomcut.net" rel="noopener noreferrer"&gt;app.atomcut.net&lt;/a&gt; with no signup.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>MotionKit Figma Motion: import, sync, and push native animation (yes, even baked physics)</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sun, 28 Jun 2026 00:19:07 +0000</pubDate>
      <link>https://dev.to/codeideal/motionkit-figma-motion-import-sync-and-push-native-animation-yes-even-baked-physics-40e6</link>
      <guid>https://dev.to/codeideal/motionkit-figma-motion-import-sync-and-push-native-animation-yes-even-baked-physics-40e6</guid>
      <description>&lt;p&gt;Figma shipped native Motion. A real animation timeline, right inside the file.&lt;/p&gt;

&lt;p&gt;When that landed, a lot of people emailed me some version of the same question: &lt;em&gt;"is MotionKit dead now?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Fair question. My honest first reaction was a quiet "...maybe." But the more I used native Motion, the clearer it got — it's genuinely good, and it's &lt;em&gt;not&lt;/em&gt; trying to be everything. No physics. No frame-by-frame. No Lottie export. No morphing. So the move was never to compete with it. The move was to &lt;strong&gt;bridge to it&lt;/strong&gt; — let the two tools hand work back and forth, and let MotionKit be the power layer that does the stuff native Motion can't.&lt;/p&gt;

&lt;p&gt;So that's what this update is. A two-way bridge between MotionKit and Figma's native Motion.&lt;/p&gt;

&lt;p&gt;Here's everything it does, and exactly how to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Four moves, one little control in the header:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Import&lt;/strong&gt; native Motion into MotionKit as real, editable keyframes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live sync&lt;/strong&gt; (read-only by default) so changes in Figma Motion flow into MotionKit as you work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link for export&lt;/strong&gt; so your native Motion renders inside a Lottie &lt;em&gt;without&lt;/em&gt; duplicating anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Push&lt;/strong&gt; MotionKit keyframes back into native Motion — including motion you baked from the physics engine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the headline trick: &lt;strong&gt;bake a real physics drop in MotionKit, then push it into Figma Motion as native keyframes.&lt;/strong&gt; Native Motion has no physics engine. Now it kind of does.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, find the bridge
&lt;/h2&gt;

&lt;p&gt;Look at the top-right of the toolbar, next to the Pro star. There's a small badge: the &lt;strong&gt;MotionKit diamond, an arrow, and the Figma logo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That little arrow &lt;em&gt;is&lt;/em&gt; the status. You don't have to open anything to read it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;faint dotted line&lt;/strong&gt; → not connected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;arrow pointing into MotionKit&lt;/strong&gt; → reading from Figma, live, read-only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;arrows on both ends&lt;/strong&gt; → two-way, MotionKit also writes back&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If there's native Motion sitting on the current frame but you haven't connected, you'll see a small purple dot on the Figma side — that's "hey, there's something here to import." Click the badge to open the bridge.&lt;/p&gt;

&lt;p&gt;That's the whole mental model. Direction of the arrow = direction of the data. I rebuilt this specifically so you never have to remember what some toggle does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Import: pull native Motion in as editable keyframes
&lt;/h2&gt;

&lt;p&gt;This is the one most people want first. You (or a teammate) animated something in Figma Motion, and you want it as proper MotionKit keyframes — to refine the curves, add morphs, export to Lottie, whatever.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;select the animated frame&lt;/li&gt;
&lt;li&gt;open the bridge and hit &lt;strong&gt;Import from Figma Motion&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;pick how conflicts resolve — &lt;strong&gt;Figma wins&lt;/strong&gt; (native overwrites) or &lt;strong&gt;Keep mine&lt;/strong&gt; (native only fills gaps)&lt;/li&gt;
&lt;li&gt;done. you get a little report of what came across, what got an approximated easing, and what was skipped&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It pulls transforms, opacity, size, corner radius, stroke weight, auto-layout spacing, solid fills and strokes, drop and inner shadows, and blur — as real keyframes you can grab and move. Position and scale come in as proper X/Y so you can edit each axis on its own.&lt;/p&gt;

&lt;p&gt;One honest note: once MotionKit owns a transform, MotionKit drives it during preview. That's the trade for editability. If you'd rather native Motion stay in charge of movement, keep reading — &lt;strong&gt;Link&lt;/strong&gt; is for exactly that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Live sync: read-only by default, on purpose
&lt;/h2&gt;

&lt;p&gt;Turn the direction control to &lt;strong&gt;Read&lt;/strong&gt; and MotionKit keeps pulling changes from Figma Motion as you work. Tweak a curve natively, it shows up here.&lt;/p&gt;

&lt;p&gt;The important part: &lt;strong&gt;read-only is the default, and it will never touch your Figma file&lt;/strong&gt; unless you explicitly switch to Two-way. Sync turning on used to scare people because an early version could write back when you didn't expect it. Not anymore — Off, Read, and Two-way are one clear three-way switch, and Read is a one-way street into MotionKit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Link for export: native Motion in your Lottie, zero duplication
&lt;/h2&gt;

&lt;p&gt;This is the cleanest option and honestly the one I'd reach for most.&lt;/p&gt;

&lt;p&gt;When you &lt;strong&gt;Link Figma Motion for export&lt;/strong&gt;, MotionKit &lt;em&gt;references&lt;/em&gt; the native animation instead of copying it. Nothing gets added to your timeline. Nothing moves on the canvas. No duplicate rows, no two engines fighting over the same layer and sending it twice as far as it should go.&lt;/p&gt;

&lt;p&gt;Then when you export to Lottie, MotionKit folds the native Motion in at render time and ships one animation — your MotionKit layers and the native Motion together. Your MotionKit keyframes always win on any property you actually animated; native just fills the rest.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;open the bridge&lt;/li&gt;
&lt;li&gt;hit &lt;strong&gt;Link Figma Motion for export&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;animate the rest in MotionKit like normal&lt;/li&gt;
&lt;li&gt;export to Lottie — the native motion is baked into the file&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you go back and edit the Figma path afterward, just hit Link again to refresh the snapshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fun one: bake physics in MotionKit, push it into Figma Motion
&lt;/h2&gt;

&lt;p&gt;Native Motion can't simulate physics. MotionKit can — and it bakes the result into normal keyframes. So you can author a real physical bounce in MotionKit and then hand those keyframes to native Motion.&lt;/p&gt;

&lt;p&gt;Here's the full loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;drop in the layer you want to throw or bounce&lt;/li&gt;
&lt;li&gt;add a &lt;strong&gt;Physics&lt;/strong&gt; modifier — set gravity, bounce, mass, and mark whatever's the floor or a wall as a collider&lt;/li&gt;
&lt;li&gt;hit &lt;strong&gt;Bake&lt;/strong&gt;. MotionKit runs an actual rigid-body simulation and writes it back as real position/rotation keyframes (re-bake as much as you want — it always replays from the top)&lt;/li&gt;
&lt;li&gt;happy with the drop? open the &lt;strong&gt;Figma Motion bridge&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;expand &lt;strong&gt;Advanced → Push to Figma Motion&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;confirm (back up your file first — every push is backed up and revertable, but still), and the baked bounce now lives as &lt;strong&gt;native Figma Motion keyframes&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now the motion is native. It plays with Figma's own Motion engine, lives in the file, and anyone can open it without the plugin. You used MotionKit purely as the physics authoring tool. That's the whole idea of the bridge — each tool doing the part it's best at.&lt;/p&gt;

&lt;p&gt;Push writes the round-trip-safe subset (transforms, opacity, size, color, shadows, blur, and friends), so a tumbling, bouncing object's position and rotation transfer cleanly. Easings without an exact native match get approximated, and the report tells you which.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: nested frames animated in Figma Motion
&lt;/h2&gt;

&lt;p&gt;If a child frame inside your frame is animated natively, MotionKit can pull it in as a previewable &lt;strong&gt;clip&lt;/strong&gt; — so it actually plays inside your timeline, with its own loop mode you control per clip. When MotionKit spots one, you'll get a one-click "import as clips" prompt. Handy for building a scene out of pieces other people animated natively.&lt;/p&gt;

&lt;h2&gt;
  
  
  What survives the trip (the honest table)
&lt;/h2&gt;

&lt;p&gt;Trust matters more than hype, so here's the real list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round-trips both ways:&lt;/strong&gt; position, scale, rotation, opacity, size, corner radius, stroke weight, auto-layout spacing, solid fill &amp;amp; stroke color, drop &amp;amp; inner shadow, layer &amp;amp; background blur.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MotionKit-only (stays here, reported as skipped on push):&lt;/strong&gt; text animation, shape morphing, frame-by-frame, gradient-stop animation, the beta noise/texture/glass effects, and expression-driven properties. These are the things native Motion has no slot for — so MotionKit keeps them, and uses Link-for-export when you need them in a final render.&lt;/p&gt;

&lt;p&gt;No silent data loss. The bridge always hands you a report of what mapped, what got an approximated easing, and what it couldn't translate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one real limitation
&lt;/h2&gt;

&lt;p&gt;Figma's plugin API lets me &lt;em&gt;read&lt;/em&gt; and &lt;em&gt;write&lt;/em&gt; Motion keyframes, but it can't move native Motion's playhead or evaluate it at an arbitrary time. So I can't show you Figma's native render and MotionKit's preview playing in perfect lockstep on the same canvas — that part isn't possible yet.&lt;/p&gt;

&lt;p&gt;That's why Link-for-export is a snapshot you re-link after edits, instead of a live mirror. The day Figma adds a "give me the value at time &lt;em&gt;t&lt;/em&gt;" call, that seam flips to live and most of this gets even better. I've already filed it as the number one thing I want from the Motion API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this is going
&lt;/h2&gt;

&lt;p&gt;The direction is simple: &lt;strong&gt;MotionKit as the Pro power layer that sits on top of native Motion.&lt;/strong&gt; Native Motion handles the clean, file-native basics. MotionKit handles physics, frame-by-frame, morphing, expressions, and Lottie — and the bridge moves work between them without you redoing anything.&lt;/p&gt;

&lt;p&gt;And as always — if something feels off or breaks, tell me. Half of every release is just people telling me what annoyed them.&lt;/p&gt;

&lt;p&gt;happy animating.&lt;/p&gt;

</description>
      <category>figma</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Figma's New Motion vs MotionKit — timeline is here, but is it enough?</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Fri, 26 Jun 2026 20:52:11 +0000</pubDate>
      <link>https://dev.to/codeideal/figmas-new-motion-vs-motionkit-timeline-is-here-but-is-it-enough-2ici</link>
      <guid>https://dev.to/codeideal/figmas-new-motion-vs-motionkit-timeline-is-here-but-is-it-enough-2ici</guid>
      <description>&lt;p&gt;Figma finally added a real &lt;strong&gt;timeline-based motion system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That changed the game a bit.&lt;/p&gt;

&lt;p&gt;But once you actually use it in real animation workflows… you notice something quickly:&lt;/p&gt;

&lt;p&gt;It’s powerful — but still incomplete.&lt;/p&gt;

&lt;p&gt;That’s where MotionKit still sits in a very different category.&lt;/p&gt;

&lt;p&gt;This isn’t “which is better”.&lt;/p&gt;

&lt;p&gt;It’s more like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;what Figma gives you vs what you actually need once animation gets serious.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Figma Native Motion actually does now
&lt;/h2&gt;

&lt;p&gt;Figma’s motion system now includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real timeline editing&lt;/li&gt;
&lt;li&gt;keyframe-based animation&lt;/li&gt;
&lt;li&gt;basic easing control&lt;/li&gt;
&lt;li&gt;physics-like behavior (limited / experimental level depending on setup)&lt;/li&gt;
&lt;li&gt;improved Smart Animate pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yes — it’s no longer just prototype transitions.&lt;/p&gt;

&lt;p&gt;You can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;animate objects across time&lt;/li&gt;
&lt;li&gt;scrub animations&lt;/li&gt;
&lt;li&gt;control timing visually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That alone is a big shift.&lt;/p&gt;

&lt;p&gt;But here’s the catch:&lt;/p&gt;

&lt;p&gt;It still focuses on &lt;strong&gt;flat motion inside a single layer context&lt;/strong&gt;, not structured animation systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Figma Motion still falls short
&lt;/h2&gt;

&lt;p&gt;Even with the timeline, a few big gaps remain:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. No real text content animation system
&lt;/h3&gt;

&lt;p&gt;You can animate text transforms, but not true content-level animation logic (like structured text transitions, sequencing, or per-character systems).&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Frame-by-frame (FBF) is still not a real mode
&lt;/h3&gt;

&lt;p&gt;You can fake it with frames, but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no true FBF workflow&lt;/li&gt;
&lt;li&gt;no synced editing across frames&lt;/li&gt;
&lt;li&gt;no onion-skin style consistency system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You still end up manually managing duplication.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Nested animations are not first-class
&lt;/h3&gt;

&lt;p&gt;Figma doesn’t properly support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nested frame animation trees&lt;/li&gt;
&lt;li&gt;reusable animation blocks inside components&lt;/li&gt;
&lt;li&gt;hierarchical animation timelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything still lives mostly at a flat level.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Physics is not truly baked
&lt;/h3&gt;

&lt;p&gt;Even when physics-like behavior exists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it’s not fully controllable&lt;/li&gt;
&lt;li&gt;it’s not always exportable as keyframes&lt;/li&gt;
&lt;li&gt;it doesn’t behave like a reusable system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it’s more “effect” than “simulation pipeline”.&lt;/p&gt;




&lt;h2&gt;
  
  
  What MotionKit actually brings to the table
&lt;/h2&gt;

&lt;p&gt;This is where the gap becomes obvious.&lt;/p&gt;

&lt;p&gt;MotionKit is not trying to compete with Figma’s timeline.&lt;/p&gt;

&lt;p&gt;It’s extending it in the directions where real motion work breaks down.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. True Frame-by-Frame (FBF) system
&lt;/h3&gt;

&lt;p&gt;MotionKit supports proper FBF workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;synced frame structure&lt;/li&gt;
&lt;li&gt;mirror selection across frames&lt;/li&gt;
&lt;li&gt;layer consistency enforcement&lt;/li&gt;
&lt;li&gt;editing one layer across all frames at once&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns FBF from “manual duplication” into an actual workflow.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Nested animation support
&lt;/h3&gt;

&lt;p&gt;MotionKit introduces structured animation layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;animations inside frames&lt;/li&gt;
&lt;li&gt;reusable nested motion blocks&lt;/li&gt;
&lt;li&gt;hierarchy-aware timelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of flat motion, you get:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;animation systems inside animation systems&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3. Physics baked into keyframes
&lt;/h3&gt;

&lt;p&gt;This is a big one.&lt;/p&gt;

&lt;p&gt;Instead of just simulating motion visually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you define physics (gravity, bounce, mass)&lt;/li&gt;
&lt;li&gt;MotionKit simulates it&lt;/li&gt;
&lt;li&gt;then &lt;strong&gt;bakes it into real keyframes&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So everything becomes editable afterward.&lt;/p&gt;

&lt;p&gt;No black box.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Full timeline control + modifiers
&lt;/h3&gt;

&lt;p&gt;Beyond keyframes, MotionKit adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offset modifiers&lt;/li&gt;
&lt;li&gt;Wiggle procedural motion&lt;/li&gt;
&lt;li&gt;curve-level editing&lt;/li&gt;
&lt;li&gt;editable baked simulations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So motion becomes &lt;em&gt;programmable&lt;/em&gt;, not just draggable.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Two-way sync with Figma Motion
&lt;/h3&gt;

&lt;p&gt;This is probably the most important difference.&lt;/p&gt;

&lt;p&gt;MotionKit doesn’t replace Figma Motion — it connects to it.&lt;/p&gt;

&lt;p&gt;You get &lt;strong&gt;bidirectional sync&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Figma Motion → MotionKit import&lt;/li&gt;
&lt;li&gt;MotionKit edits → back into Figma system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prototype quickly in Figma Motion&lt;/li&gt;
&lt;li&gt;refine deeply in MotionKit&lt;/li&gt;
&lt;li&gt;move back and forth without losing structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the real workflow upgrade.&lt;/p&gt;




&lt;h2&gt;
  
  
  Simple comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Figma Native Motion&lt;/th&gt;
&lt;th&gt;MotionKit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Timeline&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (advanced)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frame-by-frame&lt;/td&gt;
&lt;td&gt;Limited / manual&lt;/td&gt;
&lt;td&gt;Native system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nested animations&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physics&lt;/td&gt;
&lt;td&gt;Basic / experimental&lt;/td&gt;
&lt;td&gt;Fully baked keyframes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text content animation&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Structured support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sync with Figma&lt;/td&gt;
&lt;td&gt;Native only&lt;/td&gt;
&lt;td&gt;Two-way sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workflow depth&lt;/td&gt;
&lt;td&gt;Prototype level&lt;/td&gt;
&lt;td&gt;Production level&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  When Figma Motion is enough
&lt;/h2&gt;

&lt;p&gt;Use Figma Motion if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you’re building UI prototypes&lt;/li&gt;
&lt;li&gt;you just need simple transitions&lt;/li&gt;
&lt;li&gt;you don’t care about animation systems&lt;/li&gt;
&lt;li&gt;speed matters more than control&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When MotionKit becomes necessary
&lt;/h2&gt;

&lt;p&gt;Use MotionKit if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you’re doing real motion design work in Figma&lt;/li&gt;
&lt;li&gt;you need frame-by-frame animation control&lt;/li&gt;
&lt;li&gt;you care about reusable animation systems&lt;/li&gt;
&lt;li&gt;you want physics + keyframes together&lt;/li&gt;
&lt;li&gt;you need structured workflows, not hacks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The real takeaway
&lt;/h2&gt;

&lt;p&gt;Figma Motion is finally becoming a &lt;strong&gt;real animation layer inside design tools&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But MotionKit exists in a different layer entirely:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;turning Figma into a motion design system, not just a prototyping tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gap is still very real.&lt;/p&gt;

&lt;p&gt;And for anyone doing serious animation work inside Figma — it shows up immediately.&lt;/p&gt;

</description>
      <category>figma</category>
      <category>motion</category>
      <category>motionkit</category>
      <category>figmamotion</category>
    </item>
    <item>
      <title>Figma Motion Feels Like It Was Vibe-Coded</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Thu, 25 Jun 2026 03:11:03 +0000</pubDate>
      <link>https://dev.to/codeideal/figma-motion-feels-like-it-was-vibe-coded-40bl</link>
      <guid>https://dev.to/codeideal/figma-motion-feels-like-it-was-vibe-coded-40bl</guid>
      <description>&lt;p&gt;When Figma announced Motion at Config, I got excited.&lt;/p&gt;

&lt;p&gt;Finally.&lt;/p&gt;

&lt;p&gt;A native animation tool inside Figma.&lt;/p&gt;

&lt;p&gt;No plugins. No weird workflows. No jumping between tools.&lt;/p&gt;

&lt;p&gt;Then I actually used it.&lt;/p&gt;

&lt;p&gt;And honestly... what happened here?&lt;/p&gt;

&lt;h2&gt;
  
  
  It Feels Weirdly Unfinished
&lt;/h2&gt;

&lt;p&gt;This isn't a "beta has bugs" complaint.&lt;/p&gt;

&lt;p&gt;I expect bugs.&lt;/p&gt;

&lt;p&gt;What surprised me was how many basic UX decisions felt wrong.&lt;/p&gt;

&lt;p&gt;The timeline feels awkward.&lt;/p&gt;

&lt;p&gt;Interactions feel inconsistent.&lt;/p&gt;

&lt;p&gt;Simple actions somehow take more clicks than they should.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5tpk4ukjt2qr3txu6mqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5tpk4ukjt2qr3txu6mqw.png" alt="Figma native Motion Preview" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is It So Slow?
&lt;/h2&gt;

&lt;p&gt;The biggest problem isn't missing features.&lt;/p&gt;

&lt;p&gt;It's the feeling.&lt;/p&gt;

&lt;p&gt;Everything feels heavy.&lt;/p&gt;

&lt;p&gt;Dragging through the timeline feels heavy.&lt;/p&gt;

&lt;p&gt;Selecting things feels heavy.&lt;/p&gt;

&lt;p&gt;Working on larger files feels heavy.&lt;/p&gt;

&lt;p&gt;It's hard to explain, but the whole experience lacks that polished "Figma feeling" we're used to.&lt;/p&gt;

&lt;p&gt;The best Figma products usually disappear and let you focus on your work.&lt;/p&gt;

&lt;p&gt;Motion constantly reminds you that you're using Motion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Missing Things You'd Expect To Exist
&lt;/h2&gt;

&lt;p&gt;After a few hours I kept running into walls.&lt;/p&gt;

&lt;p&gt;Want to do advanced text animation?&lt;/p&gt;

&lt;p&gt;Good luck.&lt;/p&gt;

&lt;p&gt;Want to animate gradients?&lt;/p&gt;

&lt;p&gt;Limited.&lt;/p&gt;

&lt;p&gt;Want more sophisticated motion workflows?&lt;/p&gt;

&lt;p&gt;You'll hit restrictions quickly.&lt;/p&gt;

&lt;p&gt;Want nested animation systems?&lt;/p&gt;

&lt;p&gt;Not really.&lt;/p&gt;

&lt;p&gt;For a company with Figma's resources, I expected much more from version one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Strange Part
&lt;/h2&gt;

&lt;p&gt;There are already plugins solving many of these problems.&lt;/p&gt;

&lt;p&gt;Whether it's MotionKit, Figmotion, or other animation tools in the ecosystem, users have been doing advanced motion work inside Figma for years.&lt;/p&gt;

&lt;p&gt;So naturally I expected Figma to study what works and build something better.&lt;/p&gt;

&lt;p&gt;Instead it feels like they reinvented the wheel and somehow made it square.&lt;/p&gt;

&lt;h2&gt;
  
  
  It Doesn't Feel Like Figma
&lt;/h2&gt;

&lt;p&gt;This is probably my biggest criticism.&lt;/p&gt;

&lt;p&gt;The best Figma features feel obvious.&lt;/p&gt;

&lt;p&gt;You open them and immediately understand the workflow.&lt;/p&gt;

&lt;p&gt;Motion feels like the opposite.&lt;/p&gt;

&lt;p&gt;It feels like a separate product that got dropped into Figma.&lt;/p&gt;

&lt;p&gt;The UX feels disconnected from the rest of the platform.&lt;/p&gt;

&lt;p&gt;The performance feels off.&lt;/p&gt;

&lt;p&gt;The workflow feels overcomplicated.&lt;/p&gt;

&lt;p&gt;At times it genuinely felt like somebody shipped the first prototype and called it a beta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I really want Motion to succeed.&lt;/p&gt;

&lt;p&gt;A first-party animation tool inside Figma would be amazing for designers.&lt;/p&gt;

&lt;p&gt;But right now?&lt;/p&gt;

&lt;p&gt;I'm not frustrated because it's missing features.&lt;/p&gt;

&lt;p&gt;I'm frustrated because it doesn't feel finished.&lt;/p&gt;

&lt;p&gt;The whole thing feels surprisingly rough, surprisingly slow, and surprisingly difficult to enjoy.&lt;/p&gt;

&lt;p&gt;Maybe it'll become great in a year.&lt;/p&gt;

&lt;p&gt;Today, it feels less like a polished Figma product and more like a proof of concept that escaped into production.&lt;/p&gt;

</description>
      <category>figma</category>
      <category>ui</category>
      <category>ux</category>
      <category>motion</category>
    </item>
    <item>
      <title>MotionKit Review: The Most Powerful Animation Plugin for Figma?</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Tue, 16 Jun 2026 11:55:24 +0000</pubDate>
      <link>https://dev.to/codeideal/motionkit-review-the-most-powerful-animation-plugin-for-figma-gij</link>
      <guid>https://dev.to/codeideal/motionkit-review-the-most-powerful-animation-plugin-for-figma-gij</guid>
      <description>&lt;p&gt;Figma has become the default design tool for millions of designers, product teams, and developers.&lt;/p&gt;

&lt;p&gt;But when it comes to animation, many designers still leave Figma and jump to tools like After Effects, Jitter, or Rive.&lt;/p&gt;

&lt;p&gt;For years, that workflow felt normal.&lt;/p&gt;

&lt;p&gt;Design in Figma.&lt;/p&gt;

&lt;p&gt;Export assets.&lt;/p&gt;

&lt;p&gt;Import them somewhere else.&lt;/p&gt;

&lt;p&gt;Animate.&lt;/p&gt;

&lt;p&gt;Export again.&lt;/p&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;Recently, I tried MotionKit, and it made me question whether leaving Figma is still necessary for many animation workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Animation in Figma Still Feels Limited
&lt;/h2&gt;

&lt;p&gt;Figma's built-in prototyping tools are great for showing interactions and user flows.&lt;/p&gt;

&lt;p&gt;But the moment you want more advanced motion design, you quickly hit limitations.&lt;/p&gt;

&lt;p&gt;Common challenges include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No professional animation timeline&lt;/li&gt;
&lt;li&gt;Limited control over keyframes&lt;/li&gt;
&lt;li&gt;No frame-by-frame animation workflow&lt;/li&gt;
&lt;li&gt;Limited export options&lt;/li&gt;
&lt;li&gt;Difficult vector morphing workflows&lt;/li&gt;
&lt;li&gt;No dedicated motion design environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result, many designers end up maintaining multiple tools just to create animations.&lt;/p&gt;

&lt;p&gt;That adds complexity, cost, and context switching.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is MotionKit?
&lt;/h2&gt;

&lt;p&gt;MotionKit is an animation plugin built specifically for Figma.&lt;/p&gt;

&lt;p&gt;Instead of focusing on a single animation technique, it combines several animation workflows inside one environment.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Allow designers to create professional animations without leaving Figma.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At first glance, that sounds ambitious.&lt;/p&gt;

&lt;p&gt;After spending time with it, I realized that's exactly what makes MotionKit interesting.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes MotionKit Different?
&lt;/h2&gt;

&lt;p&gt;Most Figma animation plugins solve one problem.&lt;/p&gt;

&lt;p&gt;MotionKit solves several.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Timeline Animation
&lt;/h3&gt;

&lt;p&gt;For UI animations, onboarding flows, product showcases, and marketing videos, timeline-based animation is often the fastest approach.&lt;/p&gt;

&lt;p&gt;MotionKit includes a dedicated timeline system that feels familiar to anyone who has used professional animation software.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create keyframes&lt;/li&gt;
&lt;li&gt;Control timing&lt;/li&gt;
&lt;li&gt;Adjust easing&lt;/li&gt;
&lt;li&gt;Sequence animations visually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This alone covers a huge percentage of common design animations.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Frame-by-Frame Animation
&lt;/h3&gt;

&lt;p&gt;This is where things get interesting.&lt;/p&gt;

&lt;p&gt;Most Figma animation tools focus exclusively on keyframes.&lt;/p&gt;

&lt;p&gt;MotionKit also supports frame-by-frame animation.&lt;/p&gt;

&lt;p&gt;That means designers can create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Character animations&lt;/li&gt;
&lt;li&gt;Hand-drawn effects&lt;/li&gt;
&lt;li&gt;Custom illustration motion&lt;/li&gt;
&lt;li&gt;Traditional animation sequences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without switching to another application.&lt;/p&gt;

&lt;p&gt;Very few Figma animation tools support both approaches.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. SVG Morphing
&lt;/h3&gt;

&lt;p&gt;Morphing is one of those features that instantly makes animations feel more professional.&lt;/p&gt;

&lt;p&gt;Instead of abruptly changing one shape into another, MotionKit can smoothly transition between vector paths.&lt;/p&gt;

&lt;p&gt;This is particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logo animations&lt;/li&gt;
&lt;li&gt;Icon transitions&lt;/li&gt;
&lt;li&gt;Loading states&lt;/li&gt;
&lt;li&gt;Interactive UI effects&lt;/li&gt;
&lt;li&gt;Brand motion systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good morphing can dramatically improve the perceived quality of an animation.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Advanced Text Animation
&lt;/h3&gt;

&lt;p&gt;Text animation is often overlooked.&lt;/p&gt;

&lt;p&gt;Yet it appears everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Landing pages&lt;/li&gt;
&lt;li&gt;Product videos&lt;/li&gt;
&lt;li&gt;Social media content&lt;/li&gt;
&lt;li&gt;SaaS marketing sites&lt;/li&gt;
&lt;li&gt;App onboarding screens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MotionKit provides animation controls specifically designed for text, making it easier to create engaging typography effects directly inside Figma.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Export Options That Matter
&lt;/h3&gt;

&lt;p&gt;Creating animations is only half the workflow.&lt;/p&gt;

&lt;p&gt;Exporting them is equally important.&lt;/p&gt;

&lt;p&gt;MotionKit supports exporting animations into formats commonly used by modern teams, making it practical for real-world projects instead of just prototypes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters for Product Designers
&lt;/h2&gt;

&lt;p&gt;Most designers are not trying to become motion graphics artists.&lt;/p&gt;

&lt;p&gt;They simply want a fast way to create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product demos&lt;/li&gt;
&lt;li&gt;Feature showcases&lt;/li&gt;
&lt;li&gt;Landing page animations&lt;/li&gt;
&lt;li&gt;Marketing content&lt;/li&gt;
&lt;li&gt;Interactive prototypes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without constantly switching tools.&lt;/p&gt;

&lt;p&gt;The fewer tools involved, the faster the workflow becomes.&lt;/p&gt;

&lt;p&gt;That is where MotionKit provides the most value.&lt;/p&gt;




&lt;h2&gt;
  
  
  MotionKit vs Other Figma Animation Tools
&lt;/h2&gt;

&lt;p&gt;Many animation plugins do a great job solving specific problems.&lt;/p&gt;

&lt;p&gt;However, MotionKit stands out because of its breadth.&lt;/p&gt;

&lt;p&gt;Instead of specializing in only timeline animation or only prototyping, it combines multiple animation systems into a single workflow.&lt;/p&gt;

&lt;p&gt;The result feels less like a simple plugin and more like a dedicated animation studio built inside Figma.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Should Use MotionKit?
&lt;/h2&gt;

&lt;p&gt;MotionKit is especially useful for:&lt;/p&gt;

&lt;h3&gt;
  
  
  Product Designers
&lt;/h3&gt;

&lt;p&gt;Create polished onboarding experiences, micro-interactions, and feature walkthroughs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Marketing Teams
&lt;/h3&gt;

&lt;p&gt;Build promotional animations and product videos directly from existing Figma designs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Startups
&lt;/h3&gt;

&lt;p&gt;Reduce the need for multiple animation tools and simplify workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Systems Teams
&lt;/h3&gt;

&lt;p&gt;Create reusable motion patterns and animated components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content Creators
&lt;/h3&gt;

&lt;p&gt;Produce engaging visual content without leaving the design environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Most animation plugins help Figma do one extra thing.&lt;/p&gt;

&lt;p&gt;MotionKit feels different.&lt;/p&gt;

&lt;p&gt;It expands what Figma is capable of.&lt;/p&gt;

&lt;p&gt;The combination of timeline animation, frame-by-frame animation, SVG morphing, text animation, and export capabilities creates a workflow that simply doesn't exist in most Figma plugins.&lt;/p&gt;

&lt;p&gt;If you've ever searched for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best Figma animation plugin&lt;/li&gt;
&lt;li&gt;How to animate in Figma&lt;/li&gt;
&lt;li&gt;Figma alternative to After Effects&lt;/li&gt;
&lt;li&gt;Motion design in Figma&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MotionKit is worth exploring.&lt;/p&gt;

&lt;p&gt;The future of animation inside Figma may not be about adding one more feature.&lt;/p&gt;

&lt;p&gt;It may be about bringing an entire motion design workflow into the tool designers already use every day.&lt;/p&gt;

</description>
      <category>figma</category>
      <category>design</category>
      <category>animation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Best Figma Motion Design Tools in 2026, [Compared]</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sun, 07 Jun 2026 02:45:01 +0000</pubDate>
      <link>https://dev.to/codeideal/best-figma-motion-design-tools-in-2026-compared-1abg</link>
      <guid>https://dev.to/codeideal/best-figma-motion-design-tools-in-2026-compared-1abg</guid>
      <description>&lt;p&gt;Figma has quietly become a much more serious place for motion work. For a long time, Smart Animate was the main answer. Now, there is a real mix of plugins and workflows that cover everything from quick prototype transitions to proper animation timelines, exports, and banner builds. This article compares the main options without the hype, so you can pick the one that actually fits the job.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzodbf625s5iqye64ltay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzodbf625s5iqye64ltay.png" alt="Best Figma Motion Design Animation Plugin" width="800" height="533"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;If you only need simple screen-to-screen transitions, Figma’s native Smart Animate is enough. If you want a real motion workflow inside Figma, MotionKit and Figmotion are the strongest “stay inside the canvas” options. If you want fast polished motion with templates and collaboration, Jitter is very hard to ignore. If your output is banners, HTML, GIF, or video, Bannerify is the most purpose-built. If your goal is Lottie export and Lottie-based delivery, LottieFiles is the obvious pick. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Figma Smart Animate
&lt;/h2&gt;

&lt;p&gt;This is the native baseline. Smart Animate looks for matching layers across frames and animates the differences between them. It is built into Figma, available on any plan, and it is still the fastest way to make simple motion without installing anything. The catch is obvious. It is great for prototypes, but it is not a full motion design tool. &lt;/p&gt;

&lt;p&gt;Use it for loading states, simple transitions, toggles, expands, and quick product demos. Skip it when you need timeline control, frame-by-frame work, morphing, or export-focused motion.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. MotionKit
&lt;/h2&gt;

&lt;p&gt;MotionKit is the most complete “motion design inside Figma” tool in this group. Its official docs and site describe a full timeline, keyframes, frame-by-frame animation, vector morphing, text animation, easing presets, recording mode, nested compositing, and direct export to MP4, GIF, PNG sequence, and Lottie JSON. That makes it much closer to a real motion studio than a prototype helper.&lt;/p&gt;

&lt;p&gt;The big reason it stands out is depth. It is not just a neat plugin. It is trying to replace the “design in Figma, then rebuild the motion elsewhere” loop. That matters a lot if your motion work lives inside product design, social clips, explainers, or UI demo assets. &lt;/p&gt;

&lt;h2&gt;
  
  
  3. Figmotion
&lt;/h2&gt;

&lt;p&gt;Figmotion is another serious Figma animation plugin. Its site says the free tier includes animation features and export options, including code export and render output such as WEBM, MP4, GIF, and WEBP, with paid tiers adding things like versioning, support, and more advanced properties. &lt;/p&gt;

&lt;p&gt;Figmotion feels strong when you want classic motion control without leaving Figma, and it has been around long enough that a lot of designers already know the workflow. It is not the flashiest option, but it is one of the more established ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Jitter
&lt;/h2&gt;

&lt;p&gt;Jitter is not just a plugin, it is also a collaborative motion design tool with a Figma workflow. Its site positions it as a way to animate Figma designs with an intuitive timeline, presets, text animation, reusable animations, templates, and export to formats like video, GIF, and Lottie. It also leans hard into collaboration and speed. &lt;/p&gt;

&lt;p&gt;This is probably the best option if your top priority is making polished motion quickly, especially when templates and teamwork matter more than staying purely inside Figma.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Bannerify
&lt;/h2&gt;

&lt;p&gt;Bannerify is the banner export specialist. Its docs and product pages describe it as a Figma plugin for animated HTML banners, GIFs, and videos. It is aimed at production-ready ad work and banner workflows, not general motion design. &lt;/p&gt;

&lt;p&gt;That makes it very useful, but also very specific. If you need marketing banners, ad creatives, or HTML-based outputs, it is one of the best tools in the list. If you want general motion design, it is probably too narrow. &lt;/p&gt;

&lt;h2&gt;
  
  
  6. LottieFiles for Figma
&lt;/h2&gt;

&lt;p&gt;LottieFiles for Figma is built around Lottie export and lightweight motion delivery. The official pages describe creating, animating, and exporting Lottie animations from Figma without leaving the app. That makes it strong when your end goal is web or app implementation, not just a pretty preview.&lt;/p&gt;

&lt;p&gt;It is less about being a full motion studio and more about connecting design to a runtime-friendly animation format. If your team already uses Lottie, this one belongs on the shortlist. &lt;/p&gt;

&lt;h2&gt;
  
  
  So, which one is best?
&lt;/h2&gt;

&lt;p&gt;For pure motion design inside Figma, MotionKit is the strongest overall choice in this list because it goes furthest toward a real animation workflow, not just prototyping. For speed and collaboration, Jitter is the easiest recommendation. For simple product motion, Smart Animate still wins on convenience. For banner ads, Bannerify. For Lottie delivery, LottieFiles. That is the honest answer. &lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;What it does best&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smart Animate&lt;/td&gt;
&lt;td&gt;Quick prototypes&lt;/td&gt;
&lt;td&gt;Native, fast, built in, good for simple transitions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MotionKit&lt;/td&gt;
&lt;td&gt;Full motion inside Figma&lt;/td&gt;
&lt;td&gt;Timeline, frame-by-frame, morphing, text animation, exports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Figmotion&lt;/td&gt;
&lt;td&gt;Classic Figma animation&lt;/td&gt;
&lt;td&gt;Keyframe-style motion and export-focused workflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jitter&lt;/td&gt;
&lt;td&gt;Fast polished motion&lt;/td&gt;
&lt;td&gt;Templates, collaboration, easy animation, multiple exports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bannerify&lt;/td&gt;
&lt;td&gt;Banner and ad exports&lt;/td&gt;
&lt;td&gt;Animated HTML banners, GIFs, and video.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LottieFiles&lt;/td&gt;
&lt;td&gt;Lottie workflow&lt;/td&gt;
&lt;td&gt;Create and export Lottie animations from Figma.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Link to each one in Figma
&lt;/h2&gt;

&lt;p&gt;Smart Animate: built into Figma prototypes&lt;br&gt;
MotionKit: &lt;a href="https://www.figma.com/community/plugin/1602896408819057835/motionkit" rel="noopener noreferrer"&gt;https://www.figma.com/community/plugin/1602896408819057835/motionkit&lt;/a&gt;&lt;br&gt;
Figmotion: &lt;a href="https://www.figma.com/community/plugin/733025261168520714/figmotion" rel="noopener noreferrer"&gt;https://www.figma.com/community/plugin/733025261168520714/figmotion&lt;/a&gt;&lt;br&gt;
Jitter: &lt;a href="https://www.figma.com/community/plugin/961270034818256057/jitter-animation-for-figma" rel="noopener noreferrer"&gt;https://www.figma.com/community/plugin/961270034818256057/jitter-animation-for-figma&lt;/a&gt;&lt;br&gt;
Bannerify: &lt;a href="https://www.figma.com/community/plugin/796124491692147799/bannerify-banner-studio" rel="noopener noreferrer"&gt;https://www.figma.com/community/plugin/796124491692147799/bannerify-banner-studio&lt;/a&gt;&lt;br&gt;
LottieFiles: &lt;a href="https://www.figma.com/community/plugin/809860933081065308/lottiefiles" rel="noopener noreferrer"&gt;https://www.figma.com/community/plugin/809860933081065308/lottiefiles&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you think?
&lt;/h2&gt;

&lt;p&gt;I can't select the winner here, you should ( Write inside comments )&lt;br&gt;
But I definitely suggest you try MotionKit ( because it's newer and you  don't usually hear about it ). &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
