Creative Communities of the World Forums

The peer to peer support community for media production professionals.

Activity Forums Adobe After Effects Expressions kinetic typography with radial wave movement

  • Julian Chojnacki

    April 4, 2024 at 3:26 am

    Hi Oleg,

    add 2 sliders to your layer called Anim and Delay and try the following code on an expression selector either based on characters or words:

    const ti = textIndex - 1;

    const { basedOn } = thisProperty.propertyGroup(1);

    const anim = effect("Anim")("Slider");

    const delay = effect("Delay")("Slider").value;

    const lines = text.sourceText.value.split(/\n|\r|\3/);

    let lineIndex = itemsInLine = totalCount = 0;

    for (let line of lines) {

    const count = basedOn == 3 ? line.split(" ").length : line.length;

    totalCount += count;

    if (totalCount > ti) {

    itemsInLine = count;





    const colIndex = ti - (totalCount - itemsInLine);

    const dx = colIndex - (itemsInLine - 1) / 2;

    const dy = lineIndex - (lines.length - 1) / 2;

    const center = Math.hypot(dx, dy);

    anim.valueAtTime(time - framesToTime(delay) * center);

    // anim.valueAtTime((time - framesToTime(delay) * center) % (anim.key(anim.numKeys).time));

    Now animate the slider and tweak your delay as you wish 🙂

    You can easily create a looping radial wave animation using loopOut() on the Anim slider or with the code I commented out in the last line.

    Just watch out when using paragraph/boxText: this won’t work unless you add your linebreaks manually.

  • Oleg Friesen

    April 4, 2024 at 11:47 am

    Nice! Its work! Radius was still interesting for my task. Here are a few adapted lines that take this into account

    const radius = effect(“Radius”)(“Slider”).value;


    anim.valueAtTime((time – framesToTime(delay) * center / radius) % (anim.key(anim.numKeys).time));

  • Oleg Friesen

    April 4, 2024 at 11:49 am

    could you still make the source of the wave motion from the position of a null object?

  • Julian Chojnacki

    April 4, 2024 at 12:21 pm

    Sure, is a second (invisible) text layer for the calculations ok?

    The radius is a great addition btw, I totally forgot about that!
    You could even go fancy and apply separate radii to dx & dy directly in the center variable.

  • Julian Chojnacki

    April 4, 2024 at 12:49 pm

    If you only need a fixed layout like a grid, a one-layer solution would definitely render much faster

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