Creative Communities of the World Forums

The peer to peer support community for media production professionals.

Activity Forums Adobe After Effects Expressions Custom speeds when easing via expression ease(t,a,b,x,y)

  • Demian Krentz

    May 21, 2020 at 6:36 pm

    Worked great. Thanks Marc and Matthias.

  • Dagur Maunason

    September 21, 2021 at 3:02 pm

    Thanks 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 pm

    Hi 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


  • Dagur Maunason

    September 21, 2021 at 9:13 pm

    Thanks a ton Jacob! That works perfectly 😃

  • Yoan Boisjoli

    April 4, 2025 at 12:46 am

    Hey 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 pm

    Best 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 am

    Hi 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;

Page 2 of 2

We use anonymous cookies to give you the best experience we can.
Our Privacy policy | GDPR Policy