DRY - Don't Repeat Yourself
Boost Your After Effects Workflow 🚀
last update: 2025-02-10
Boost Your After Effects Workflow 🚀
last update: 2025-02-10
6 Free Presets to Save Time & Enhance Your Motion Design
Tired of typing the same expressions over and over? These 6 ready-to-use After Effects presets will speed up your workflow, keep your animations consistent, and make your life easier.
What You Get
📌 6 powerful presets for motion designers
⏳ One-click animations – no need to rewrite expressions
🛠 Easily customizable with intuitive controls
⏳ One-click animations – no need to rewrite expressions
🛠 Easily customizable with intuitive controls
🔥 How to Use These Presets
1️⃣ Download the preset pack
2️⃣ Unzip under your "User Pressets Folder", usually:
[MAC] ~/Documents/Preferences/Adobe/After Effects [CC Version]/User Presets/
[WIN] %userprofile%\documents\Adobe\After Effects [CC Version]\User Presets\
[MAC] ~/Documents/Preferences/Adobe/After Effects [CC Version]/User Presets/
[WIN] %userprofile%\documents\Adobe\After Effects [CC Version]\User Presets\
3️⃣ Open or restart your After Effects (In case it was opened while doing the previous step
4️⃣ Call FX Console and filter by typing "X-" or search for the expression you want based on the names bellow:

Name: X-FadeByTime
Description: Controls the layer's opacity based on its In Point and Out Point, gradually fading from the set opacity to 0 over a duration defined by the slider control.
Description: Controls the layer's opacity based on its In Point and Out Point, gradually fading from the set opacity to 0 over a duration defined by the slider control.
var fadeDuration = effect("Time to fade (seconds)")("Slider");
var inCompleated = inPoint+fadeDuration;
var outStart = outPoint-fadeDuration;
var inCompleated = inPoint+fadeDuration;
var outStart = outPoint-fadeDuration;
if(time<inCompleated){
ease(time,inPoint,inCompleated,0,value)
}
else{
ease(time,outStart,outPoint,value,0)
}
ease(time,inPoint,inCompleated,0,value)
}
else{
ease(time,outStart,outPoint,value,0)
}

Name: X-FixedAnchorPoint
Description: Keeps the anchor point fixed in place while allowing the layer to move freely, ensuring consistent positioning without unwanted shifts.
Description: Keeps the anchor point fixed in place while allowing the layer to move freely, ensuring consistent positioning without unwanted shifts.
var src = thisLayer.sourceRectAtTime(time)
var x = src.left + src.width/2;
var y = src.top + src.height/2;
[x,y]
var x = src.left + src.width/2;
var y = src.top + src.height/2;
[x,y]

Name: X-FixedStrokeWidth
Description: Maintains a consistent stroke width regardless of scale changes, ensuring your outlines stay visually uniform at defined size.
Description: Maintains a consistent stroke width regardless of scale changes, ensuring your outlines stay visually uniform at defined size.
var src = thisLayer.sourceRectAtTime(time)
var x = src.left + src.width/2;
var y = src.top + src.height/2;
[x,y]
var x = src.left + src.width/2;
var y = src.top + src.height/2;
[x,y]

Name: X-IgnoreParent
Description: Allows a layer to remain visually unaffected by its parent’s transformations, preserving its original rotation and (or) scale while staying linked to the hierarchy.
Description: Allows a layer to remain visually unaffected by its parent’s transformations, preserving its original rotation and (or) scale while staying linked to the hierarchy.
[Scale]
var check = effect("Ignore-Scale")("Checkbox");
var parentScale = parent.transform.scale.value;
var s = [];
if(check==1 & hasParent){
for (i = 0; i < parentScale.length; i++){
s[i] = (parentScale[i]== 0) ? 0 : value[i]*100/parentScale[i];
}s}
else{ value }
var check = effect("Ignore-Scale")("Checkbox");
var parentScale = parent.transform.scale.value;
var s = [];
if(check==1 & hasParent){
for (i = 0; i < parentScale.length; i++){
s[i] = (parentScale[i]== 0) ? 0 : value[i]*100/parentScale[i];
}s}
else{ value }
[Rotation]
var check = effect("Ignore-Rotation")("Checkbox");
check==1 & hasParent ? value - parent.transform.rotation : value
var check = effect("Ignore-Rotation")("Checkbox");
check==1 & hasParent ? value - parent.transform.rotation : value

Name: X-LoopPath
Description: Creates a continuous animation by looping a path over time, behaving like the traditional "loopOut()" method.
Description: Creates a continuous animation by looping a path over time, behaving like the traditional "loopOut()" method.
if (numKeys >1 && time > key(numKeys).time) {
t1 = key(1).time;
t2 = key(numKeys).time;
span = t2 - t1;
delta = time - t2;
t = delta%span;
valueAtTime(t1 + t)
} else {
value
}
t1 = key(1).time;
t2 = key(numKeys).time;
span = t2 - t1;
delta = time - t2;
t = delta%span;
valueAtTime(t1 + t)
} else {
value
}

Name: X-LoopWiggle
Description: Creates a continuous random animation by looping per cycle the random values generated
Description: Creates a continuous random animation by looping per cycle the random values generated
frequency = effect("Speed (Frequency)")("Slider"); // wiggles per second
amplitude = effect("Distance (Amplitude)")("Slider"); // amount of pixels to wiggle
secondsToLoop = effect("Cicle Duration (Seconds)")("Slider"); // time to loop in seconds
t = time % secondsToLoop;
wiggle1 = wiggle(frequency, amplitude, 1, 0.5, t);
wiggle2 = wiggle(frequency, amplitude, 1, 0.5, t - secondsToLoop);
linear(t, 0, secondsToLoop, wiggle1, wiggle2)
amplitude = effect("Distance (Amplitude)")("Slider"); // amount of pixels to wiggle
secondsToLoop = effect("Cicle Duration (Seconds)")("Slider"); // time to loop in seconds
t = time % secondsToLoop;
wiggle1 = wiggle(frequency, amplitude, 1, 0.5, t);
wiggle2 = wiggle(frequency, amplitude, 1, 0.5, t - secondsToLoop);
linear(t, 0, secondsToLoop, wiggle1, wiggle2)