Everything you need for rapid motion design workflows in Adobe After Effects β free forever.
Smart boundary-aware precomposing, dynamic auto-sizing text boxes with animated carets, math-curved fade animators, animated arrowhead paths, interactive 9-point anchor alignment, procedural lightning FX, and background H.264 preview rendering β all in a single dockable ScriptUI panel.
Download & Install Β· Key Features Β· The manual Β· Trouble? Β· What's New in 1.12 Β· Development & Tests
Developed by Raisul Sohan Β· Version 1.12 Β· Free & open source (MIT) Β· Changelog
Need help or have suggestions? Email me at lettertosohan@gmail.com or visit raisulsohan.com.
- Official Brand Logo & Visual Overhaul. Embedded the official Sleeping Cat on Diamond Keyframe logo mark directly into the ScriptUI panel header.
- Hero Brand Banner & Animated Demos. Full high-resolution brand banner (
assets/banner.png&assets/banner.svg), interactive feature demo GIF, and 60fps MP4 video added to documentation. - LazyLord-style Documentation Layout. Streamlined header with quick access links, release badge, and video presentation.
- Head to Line drew the wrong shape, and now does not. Every "Triangle" was really a three-pointed star turned inside out. After Effects numbers a polystar's Type the other way round from what the code assumed, spells its roundness match names
Roundesswith one n, and putsShape Directionat property 1 so every numeric fallback was off by one -- which is how tickingRoundended up writing 15 into the inner radius. - A second click changes the head instead of stacking one behind it. Pick Triangle, change your mind, pick Circle: you get a circle. The Head Size and Offset Angle you had set come back with the new shape, and a head you renamed is still recognised.
- Stagger can move keyframes instead of layers.
Keys onlyleaves the layer bars alone and steps the animation apart -- for layers that run the whole comp. Easing, hold keys, spatial tangents and roving keys all survive the move.
- Stagger. Step the selected layers apart in time, top to bottom, by however many frames you like. It adds spacing rather than rebuilding your timing, so it is safe to run on a stack that is already animated, and a negative number closes the spread up again.
Revworks from the bottom. - Null + Parent. One null on top, centred on the selection, everything hanging off it. A layer whose own parent is also selected keeps that parent instead of being flattened onto the null.
- The arrowhead actually turns now. Head to Line asked After Effects for
ADBE Rotation, which does not exist on a 2D layer; the failure was swallowed, so every head ever made sat on the end of its line pointing right, whatever the line did. Its opacity never followed the line either. Both work, and all eight head shapes are covered by a new test. - Auto Box is about a third cheaper per frame. The size and the centre each measured the text separately. Only the size needs smoothing, so the centre measures once now: 939 ms down to 657 ms over 100 frames on the same box. Long paragraphs also turn their own smoothing down, which takes a 600-character block from the slowest thing in the comp to 10.8 ms a frame.
- Box colour, caret colour and reveal ease are in the Auto Box dialog. All three existed in the code and none of them had a control, so every box came out the same dark grey with the same ease.
- Remove box. Undo was the only way back, and deleting the box by hand left the measure layer, the LazyType animators and the Reveal sliders behind on the text.
- The panel remembers your settings. Fade length, speed, easing, head shape, the Auto Box dialog -- all of it comes back after a restart.
- Nothing fails in silence. A box that could not be parented used to stay in the comp measuring nothing; now it is removed and listed with a reason. Deleting a text layer or a line no longer permanently disables the expressions on what it left behind.
- β‘ LazyType Reveal Rig (Auto Box Overhaul): Complete modernization of the text typewriter experience.
- Measurement Layer Engine: Uses an invisible, guide-marked measurement layer to compute dynamic text bounds frame-by-frame with zero stepping or delay.
- Character Settling Animations: Adds expressive secondary animation to incoming characters (Blur + rise, Scale pop, Drop) with configurable settle bands.
- Dynamic Animated Caret: Optional blinking terminal-style caret with customizable width, gap, color, and blink rate synced with the typing edge.
- Non-blocking Dialog Configuration: Dedicated modal dialog to configure reveal timing (by unit or total frames), reveal easing, stroke, and styling.
- Figma / React Premium Dark Theme: Rebuilt the entire ScriptUI interface based on the modern React design (
LazyMotionToolkit UI). - Interactive Header Bar & Clickable Links: Edge-clustered header with author name and menu dots linking directly to
https://raisulsohan.com. - Pixel-Perfect 50/50 Column Geometry: Strictly synchronized column pairs ensuring the central divider is in exact vertical alignment with the top tools.
- Custom Vector onDraw Buttons: Rich dark styled buttons (
#222428) with clean border styling and crisp centered typography. - Glowing Accent Buttons: Full-width Indigo/Blue accent (
#5865f2) forβ‘ LazyStrike FXandβ‘ Applywith white typography. - Interactive 9-Point Anchor Pad: 3Γ3 direction grid with live active-state highlighting (matching the React UI's indigo circle indicator).
- Etched Section Headers: Clean uppercase category titles with 1px horizontal etched divider lines (
#2a2c32). - Pill-Style Swatch Controls: Color blocks with live active border indicators and mini
F(Fill) andS(Stroke) pill buttons. - β‘ LazyStrike FX (was QuickStrike FX): lightning bolts, flashes and sky flashes, by timing or driven by audio.
- Effect settings are found by match name, so it works in any After Effects language.
- Fixed: Forking was always maxed out.
- Keyframes are set in one call per property (faster).
- Audio-Driven removes its temporary Audio Amplitude layer and puts back your work area and selection.
- If nothing fits (the playhead is past the work area) it says so instead of making empty layers.
- π¬ LazyPreview Render (was QuickPreviewRender): renders the work area to H.264 in the background and plays it back as a solo'd layer.
- Cancel stops only this render. It used to kill every aerender on the computer.
- It knows a render has finished when aerender actually exits, not when the file size stops changing.
- It refuses to render the wrong comp when two share a name.
- Remove deletes the rendered file too. If After Effects is still holding it open, the file is deleted on a later try.
- Toggle can switch the preview back on. It used to fail.
- It works from project folders with non-English letters (e.g. Bengali): paths reach aerender in their short ASCII form.
Every change below was checked inside After Effects 2026 (26.5) by tools/ae-smoke-test.jsx, as well as by the offline tests.
- Precomp (1:1) no longer loses animation or cuts the layer. 1.4 deleted Position/Scale/Rotation keyframes, froze them at the current frame, and started the precomp at the playhead, cutting off everything before it. Footage, solid and comp layers are now precomposed with all attributes left outside, so keyframes, effects, masks, time remapping and parenting stay exactly as they were. Shape and text layers keep their in/out points.
- Mask cropping is now exact at every frame. The crop covers the masks across all their keyframes, including BΓ©zier handles, feather and expansion. Inverted or expression-driven masks are never cropped, and the anchor point, mask paths and effect points are moved with the crop. The result: no pixel moves on screen.
- Fade Speed works the right way round. 2 means twice as fast; in 1.4 it meant twice as slow.
- Fades respect the layer's own opacity (a layer at 60% fades between 0 and 60) and start and end on fully transparent frames. A layer shorter than two fades no longer jumps in the middle.
- Clear only removes what the toolkit added. It removes LazyMotion fade expressions and the
fade in/fade outmarkers. 1.4 deleted every marker and any opacity expression. Applying a fade twice no longer stacks markers, and an opacity expression of your own is never overwritten. - QuickSwatch colours solids again. The solid check never matched in 1.4. Stroke now works on text layers too, and animated colours get a keyframe instead of an error.
- Anchor Point pad handles animated position and split X/Y position. Center in Comp centres the layer's content, not its anchor point.
- No silent failures. Layers that can't be processed (cameras, parented shapes, animated rotationβ¦) are listed with the reason, and one bad layer no longer stops the rest.
- Grid Designer refuses impossible margins and more than 400 cells instead of making hundreds of broken layers.
- Group Precomp refuses to strand a child whose parent isn't selected, and turns on Collapse Transformations when 3D layers go inside, so they keep the scene camera.
Everything below is the tour. Everything in detail is in docs/:
| The manual | Installing, then every control in the panel in the order you meet it, what it remembers, and what each tool names its layers. |
| How Auto Box works | The measure layer, every effect control the rig adds, what it costs per frame, and where it gives up. |
| If something goes wrong | Symptoms and fixes for each tool, and every message the panel can print. |
| Building from source | How the file is laid out, the engine-and-wrapper rule, the seven checks a change has to pass, and the After Effects traps found the hard way. |
LazyMotionToolkit is a lightweight, high-performance ScriptUI panel designed to eliminate repetitive motion design tasks. It unifies ten toolsets into one cohesive workflow without relying on external plugins or bloated dependencies.
[ π¦ Precomp (1:1) ](Individual Precomp): Select multiple layers and precompose each layer into its own precomposition.- Footage, solids and comps: attributes stay on the outside ("Leave all attributes"), so every keyframe, effect, mask, time remap and parent is untouched. If the layer has masks, the precomp is cropped to the area they can ever show (over all keyframes, with BΓ©zier handles, feather and expansion). The anchor point, mask paths and effect points move with the crop, so nothing shifts on screen at any frame.
- Shape and text layers: attributes move inside a comp-sized precomp that keeps the layer's in/out points. Parented or 3D shape/text layers are skipped with a note: use Group Precomp for 3D.
- Nulls, cameras and lights are skipped and listed.
[ π Precomp (Group) ](Group Precomp): Combine all selected layers into a single precomposition spanning their collective in/out. It refuses (and says why) if a selected layer's parent is not selected. With 3D layers inside, Collapse Transformations is turned on so they keep the scene's camera and lights.
One box, three points of the same reveal.
- LazyType Reveal Rig: Modern typewriter animator with smooth character settling, multi-style eases, and frame-rate independent reveal control.
- Smart Measurement Layer: Utilizes a hidden guide measure layer to evaluate character extents in real-time, eliminating stepped box jitter.
- Animated Terminal Caret: Dynamic blinking cursor tracking the typography edge, customizable in size, gap, color, and blink speed.
- Zero Squish / Undistorted Geometry: Modifies vector shape rectangle geometry directly rather than layer transform scaling. Corner roundness remains true circular geometry at any text length or aspect ratio.
- Fade In / Fade Out Sync: Automatically inherits the parent text layer's
Transform > Opacityand character animator opacity. - Dedicated Effect Controls: Adds
Padding X,Padding Y,Roundness,Box Opacity,Box Color,Box Lead,Box Smooth,Caret,Caret Width, andCaret Blinkcontrols directly to the box layer. - Box and caret colour, and the reveal ease, are chosen in the dialog before the box is built; the dialog reopens with whatever you used last.
Remove boxtakes the box, the measure layer, the LazyType animators and the Reveal controls back off the selected text layers in one click.- The text's own colour is not part of the rig. It belongs to your text layer: set it in the Character panel, or with this panel's Swatch, which colours text fill and stroke.
- 1-Click Arrow & Pointer Generator: Select any Pen-drawn line or Bezier path, choose a head style, and click
π― Head it!to instantly attach an auto-orienting head. - 8 Head Styles:
Triangle,Circle,Star,Rectangle,Pentagon,Hexagon,Heptagon, andOctagon. - Changing your mind is one click: clicking
Head it!again with a different style replaces the head instead of adding a second one, keeping the Head Size and Offset Angle you had set. A head you renamed is still recognised. - Smart Tangent Tracking: Head automatically rotates (
tangentOnPath) and follows every curve and bend without manual keyframing. - Round Corners & Double-Sided: Optional rounded corner smoothing and double-sided heads (heads at both Start and End).
- Trim Paths Animation Sync: Check
Animate (f)with custom duration in frames to automatically generate smooth, easy-eased path drawing with the head riding the animated tip.
- Mathematical Easing Curves:
Linear(Constant rate)Ease In (Expo)(Exponential acceleration)Ease Out (Sine)(Smooth deceleration)Ease InOut (Quad)(Smooth quadratic transition)Ease InOut (Cubic)(Deep cubic transition)Bounce(Physics-based bounce)Elastic(Spring-damped overshoot)
- Custom Parameters: Fade Duration in frames, and a Speed multiplier (2 = twice as fast, 0.5 = twice as slow).
- Keeps your opacity: the fade scales the layer's own opacity value or keyframes; the first and last frames are fully transparent.
- Flexible Application: Independent
Fade InandFade Outtoggles, with optional timeline Layer Markers (fade in/fade out). Re-applying replaces the fade instead of stacking markers. [ π Apply Fade ]&[ β Clear ]: batch apply and clean up across selected layers. Fade expressions start with// LazyMotion Fade. Apply never overwrites another opacity expression, and Clear removes only LazyMotion fades and their markers.
- Directional Keypad: Visual 3x3 pad (
β€ β² β₯ β β βΆ β£ βΌ β’) to snap anchor points to Top-Left, Center, Bottom-Right, etc. - Zero Visual Shift: Compensates Position (including scale and rotation, every Position keyframe, and separated X/Y Position) so the layer does not jump when the anchor point moves. Layers with animated anchor, scale or rotation, and 3D layers, are skipped with a note, because no single offset could keep them in place.
- Center in Comp: moves the centre of the layer's visible content to the centre of the comp. Parented layers are skipped, since their position isn't in comp space.
[ β₯ Stagger ]: steps the selected layers apart in time, top to bottom, by the number of frames in the box. Each layer keeps its own start, so only the spacing is added: run it on a stack that already has timing and the timing survives.Revstarts from the bottom layer instead, and a negative number closes the spread back up. Layers are ordered by where they sit in the timeline, not by the order you clicked them. Locked layers are skipped with a note.Keys onlymoves the keyframes and leaves the layer bars where they are β for layers that run the whole comp and only their animation should cascade. Easing, hold keys, spatial tangents and roving keys come through intact, and a layer with no keyframes is reported rather than silently ignored. Left off, the whole layer moves and its keyframes go with it, because a keyframe's time is stored against its layer's start.
[ β Null + Parent ]: one null on top, centred on the selection, with everything selected parented to it. A layer whose own parent is also selected keeps that parent β it already follows the null through it, and re-parenting would flatten the rig you built. The null turns 3D if anything in the selection is, its anchor sits in its middle so it rotates and scales around itself, and nothing on screen moves.
- Layout Presets: 1-click presets for
2x2,3x3 Rule of Thirds,3 Columns Split, and12 Columns Web Layout. - Custom Dimensions: Full control over Columns, Rows, Gutters (X/Y px), and Margins (X/Y px).
- Multiple Output Formats: Generate solid Shape Tiles (Fill), Outline Strokes, or Guide Nulls.
- Guard rails: up to 400 cells; margins and gutters that leave no room are refused, and the dialog stays open to fix them.
- Instant Fill & Stroke: 1-click buttons under each swatch.
- Shape layers: every Fill or Stroke in their contents, nested groups included.
- Text layers: fill or stroke. Stroke is switched on with a visible width.
- Solids: Fill, via a Fill effect, so other layers using the same solid keep their colour.
- Animated colours get a keyframe at the current time.
- Native Color Picker: Click any swatch tile to open the native OS color dialog (
$.colorPicker) and update palette colors on the fly. - Configurable Layout: Customize total swatches (1β10) and grid columns (1β6).
- Session Persistence: Palette configurations and custom colors are automatically saved via
app.settingsacross After Effects restarts.
Click β‘ LazyStrike FX to open its window (it stays open while you work).
- Styles:
Direct Bolt + Flash: an animated Advanced Lightning bolt plus a full-frame flash.Sky Flash: decaying flickers across the frame.Both Combined: bolt, flash and sky flash together.Audio-Driven: one flash per loud peak of an audio layer.
- Colors: Bolt and Flash, via the system colour picker.
- Timing: strike length and gap (frames), number of strikes, sky flickers per strike. Either fill the work area, or start at the playhead.
- Intensity & Randomness: bolt and flash brightness, and how irregular the strikes are.
- Audio Sync (Audio-Driven):
Threshold: how loud a peak must be.Gain: how bright its flash gets.Decay: frames each flash holds.Min Gap: frames between flashes.- It uses After Effects' Convert Audio to Keyframes, then removes the helper layer and restores your work area and selection.
- Pre-compose option wraps the generated layers in one precomp.
- Layers are Add-mode solids named
LazyStrike β¦; everything is one undo step.
Like Premiere Pro's Render In to Out.
βΆ Render InβOut:- Set the work area (
B/N) first. - The panel saves the project, then renders the work area with
aerendertoAE_Previews/preview_<date>_<time>_<n>.mp4next to the project, using H.264 at 15 Mbps. - The render runs in the background while you keep working, with a Cancel button.
- When it finishes, the video goes on top of the comp as a solo'd
[PREVIEW] previewlayer (red label), spanning the work area. Its footage goes in the Lazy Preview Files bin.
- Set the work area (
Toggle: switch between the preview and the live comp.Remove: delete the preview layer, its footage and the rendered file. A file After Effects still holds open is deleted the next time you render or open the panel.- Needs:
- a saved project;
- After Effects 2023 or newer (for the H.264 output module);
- on Windows, a composition name in English letters (aerender can't receive other letters there).
- Good to know:
- Project folders with other letters work when Windows short names are available, which is the default on the system drive. Otherwise the panel explains what to change.
- Cancel stops only this render's aerender.
- If two compositions share a name, rename one first: aerender picks compositions by name.
- Download the
LazyMotionToolkit-v*.zipfrom the latest release and unzip it. - Windows: double-click
Install LazyMotionToolkit.batand click Yes when Windows asks for administrator rights.
macOS: double-clickInstall LazyMotionToolkit (macOS).command(if macOS refuses, right-click β Open) and type your Mac password if asked. - Restart After Effects and open Window > LazyMotionToolkit.jsx.
The installer copies the panel into the ScriptUI Panels folder of every After Effects it finds. Run it again to update. The zip also has an uninstaller.
LazyPreview Render also needs Allow Scripts to Write Files and Access Network: Edit > Preferences > Scripting & Expressions (Windows) or After Effects > Settings > Scripting & Expressions (macOS).
-
Copy
LazyMotionToolkit.jsxto your After EffectsScriptUI Panelsdirectory:-
Windows:
C:\Program Files\Adobe\Adobe After Effects <Version>\Support Files\Scripts\ScriptUI Panels\OR for current user:
C:\Users\<Your-Username>\AppData\Roaming\Adobe\After Effects\<Version>\Scripts\ScriptUI Panels\ -
macOS:
/Applications/Adobe After Effects <Version>/Scripts/ScriptUI Panels/
-
-
Restart After Effects.
-
Open the panel via the top menu bar:
- Window > LazyMotionToolkit.jsx
-
Dock the panel anywhere into your AE workspace.
- In After Effects, go to File > Scripts > Run Script File...
- Browse and select
LazyMotionToolkit.jsx.
- Language: Adobe ExtendScript (ES3 compliant, compatible with all AE versions).
- Host Support: Adobe After Effects CC 2020 through CC 2026+.
- Operating Systems: Windows 10/11 & macOS (Intel / Apple Silicon).
- Dependencies: Zero external plugins or libraries required.
The panel is a single file, LazyMotionToolkit.jsx. The tools/ folder is only for development; users never need it.
| Command (Windows) | What it checks |
|---|---|
cscript //Nologo tools\check-extendscript.js |
The script compiles as ES3 and avoids names and comments that real ExtendScript rejects. |
cscript //Nologo tools\test-toolkit.js |
The engine against a mocked After Effects: precompose choices and cropping (including After Effects' own re-centring on comp resize), mask bounds, fade expressions evaluated frame by frame, anchor maths, colours, grid limits, lightning schedules and audio peaks, the aerender job (encoded command lines, non-English paths) and preview file clean-up. |
"C:\Program Files\Adobe\Adobe After Effects 2026\Support Files\AfterFX.com" -noui -r tools\ae-smoke-test.jsx |
The same behaviour inside the real After Effects: pixel placement measured with After Effects' own expression engine, fades, colours, LazyStrike layers, and a real aerender preview render (from a folder with Bengali letters) including Cancel. It writes %TEMP%\lazymotion-smoke-results.txt and quits without saving. Close After Effects first; needs Allow Scripts to Write Files. |
β¦ AfterFX.com -r tools\ae-ui-test-audio.jsx |
LazyStrike's Audio-Driven mode, which needs After Effects' UI (no -noui): a generated WAV with two bursts must give two flashes, with the helper layer removed and the work area restored. Results in %TEMP%\lazystrike-audio-results.txt. |
β¦ AfterFX.com -r tools\ae-ui-test-panel.jsx |
Builds the real panel and the LazyStrike FX window. Results in %TEMP%\lazymotion-panel-results.txt. |
When $.global.LazyMotionToolkitTest is set before loading, the script hands back its engine functions instead of building the panel; the tests use this. It is never set in normal use.
Release zip: node tools/package-release.mjs puts LazyMotionToolkit-v<version>.zip (the script, the installers from tools/installer/, and the licence) into the 00 Install from here folder next to the repository. It stops if the README or CHANGELOG describe another version.
- Developer: Raisul Sohan
- Website: https://raisulsohan.com
- GitHub: @raisulsohan
- Suite: LazySuite Creative Tools Ecosystem
LazyMotionToolkit is free and open source under the MIT License: use it, share it, change it, including in commercial work.




