Activity › Forums › Adobe After Effects Expressions › Custom speeds when easing via expression ease(t,a,b,x,y)
-
Custom speeds when easing via expression ease(t,a,b,x,y)
Matthias Stoll replied 2 weeks, 1 day ago 12 Members · 17 Replies
-
Dagur Maunason
September 21, 2021 at 3:02 pmThanks everyone for this! It works great for position, but I need to use it in the offset on a text animator, which only has one dimension, so I’ve been trying for an hour now to make it work but without any success. It’s throwing an ‘couldn’t turn result into numeric value’ on line 1 if that is any indication of what’s actually the problem..?
Is there any kind soul out there who might be able to help me figure it out?
-
Jacob Mellin
September 21, 2021 at 8:06 pmHi Dagur, if you’re using Matthias’ Script, you should just be able to remove the mention of the y parameter and read in and return the computation for the single value, like so:
EaseOut = function(power){return function(t){return 1 - Math.abs(Math.pow(t-1, power))}};
dur=3; power=5; //1=linear, 2=Quad, 3=Cubic, 4=Quart, 5=Quint
startValue=value;
endValue= 100;
t=linear(time-inPoint,0,dur,0,1);
Exp=EaseOut(power)(t);
computedValue=startValue+(endValue-startValue)*Exp;
computedValue
-
Yoan Boisjoli
April 4, 2025 at 12:46 amHey everyone,
This thread brings back memories. I ran into the same issues trying to apply Penner easings to different property types, especially in expression-driven setups. Doing it manually was always a bit fragile, especially across 1D vs 2D.
I ended up building a tool called Keyless that automates this. It applies Penner easings without keyframes and works across 1D, 2D, and 3D properties. No need to rewrite expressions every time, just apply and tweak.
I’m at the stage where I’m looking for feedback to try and make it better. I spent two years learning how to script and making it so let me know if you tried it!
https://aescripts.com/keyless/
-
Demian Krentz
April 4, 2025 at 6:24 pmBest of luck to you, but Flow, ease and whiz, and one or two other scripts already more or less do away with the expressions/scripting.
-
Matthias Stoll
April 12, 2025 at 8:22 amHi everybody,
some time ago I came up with nicer solution. I am not sure where the “formula” for the easing originates (maybe “ease and wizz”). But it is by far the most intuitive and flexible way to do it.
The expression doesn’t care how much dimensions you use and there there is no deciding between easeIn or easeOut.
“ratio” (between 0 and 1) interpolates smoothly where the easing is strongest – 0.5 gets you a symmetric curve.
“strength” defines how steep the curve can get. I recommend using something between 0.8 and 1 because this is where the “formula” shines & drops jaws.
And of course there is “dur”(-ation). 1 Second is a very good start!
start = [0,0];
end = [500,500];
ratio = 0;
steepness = 1;
dur = 1;
function expoOut (t,steepness){
if (steepness == 0) return x;
return (Math.exp(-steepness*t*7) - 1) / (Math.exp(-steepness*7) - 1);
}
function expoIn (t,steepness){
if (steepness == 0) return t;
return (Math.exp(steepness*t*7) - 1) / (Math.exp(steepness*7) - 1);
}
function expoInOut(t,ratio,steepness){
if (t <= ratio){
func = expoIn(linear(t,0,ratio,0,1),steepness);
return (func * ratio);
}
if (t > ratio){
func = expoOut(linear(t,ratio,1,0,1),steepness);
return (func*(1-ratio)+ratio);
}
}
t = linear(time - inPoint, 0, dur, 0, 1);
exp = expoInOut(t,ratio,steepness);
start + (end - start) * exp;
Reply to this Discussion! Login or Sign Up