Creative Communities of the World Forums

The peer to peer support community for media production professionals.

Activity Forums Adobe After Effects Expressions For loop in a specific folder and For loop in selected layers

  • For loop in a specific folder and For loop in selected layers

    Posted by Antonio Carba on May 20, 2022 at 2:15 pm

    Hello everyone! Hope you can help on this.

    Im trying to figure out how to accomplish a for loop in an specific folder name; and then another for loop over selected layers in a comp.
    All my attemps went wrong 🙁

    If any of you have the experience, it would be awesome and thanks in advance.

    What im trying to get:

    #1- Loop for specific folder:
    Let’s say I have a folder called “myFolder” into the project panel which contains 3 compositions with differents names.
    I need to loop for over the whole items into “myFolder” and change their name with “_Old_Not_Use”, but just if they are compositions.

    #2 – Loop for selected layer into a comp:
    I have different types of layers into a comp (images, videos, audio, text, etc)
    After manually select them, I need to add expressions depending on its type:

    For images and text….. opacity expression
    for audio… an audio level expression
    for video… an audio and opacity expression

    Hope any of you could shed some light on this!
    Thanks everyone

    Antonio Carba replied 4 years, 3 months ago 2 Members · 5 Replies
  • 5 Replies
  • Dan Ebberts

    May 20, 2022 at 3:16 pm

    This should get you started for #1:

    function renameComps(theFolderName, theSuffix){

    var theFolder = null;

    for (var i = 1; i <= app.project.numItems;i++){

    if ((app.project.item(i).name == theFolderName) && (app.project.item(i) instanceof FolderItem)){

    theFolder = app.project.item(i);

    break;

    }

    }

    if (theFolder == null){

    alert("Can't find folder '" + theFolderName + "'");

    retrun;

    }

    var myComps = [];

    for (var i = 1; i <= app.project.numItems; i++){

    if ((app.project.item(i).parentFolder.id == theFolder.id) && (app.project.item(i) instanceof CompItem)){

    myComps.push(app.project.item(i));

    }

    }

    for (var i = 0; i < myComps.length; i++){

    myComps[i].name = myComps[i].name + theSuffix;

    }

    }

    renameComps("myFolder", "_Old_Do_Not_Use");

    and this for #2:

    function addExpressions(){

    var myOpacityExpr = 'ease(time,inPoint,inPoint+1,0,100)';

    var myAudioExpr = 'ease(time,inPoint,inPoint+1,[-192,-192],[0,0])';

    var myComp = app.project.activeItem;

    if ((myComp == null) || ! (myComp instanceof CompItem)){

    alert ("No comp active.");

    return;

    }

    for (var i = 1; i <= myComp.numLayers; i++){

    if (myComp.layer(i).hasVideo){

    myComp.layer(i).property("Opacity").expression = myOpacityExpr;

    }

    if (myComp.layer(i).hasAudio){

    myComp.layer(i).property("Audio Levels").expression = myAudioExpr

    }

    }

    }

    addExpressions();

  • Antonio Carba

    May 20, 2022 at 4:07 pm

    Thanks a lot Dan!
    This is working perfect.

    Thank you so much for your time on this 😃

  • Antonio Carba

    May 20, 2022 at 9:27 pm

    Dan! Hope you are great.
    For case #2 I just notice that on my test I selected all the layers in the comp and it worked fine!
    But my intention is to apply the expressions just to the selected layers.

    I’ve tried changing “numLayers” by “selectedLayers” but nothing happend.
    Could you shed some ligtht here please?

    Thanks again for your help!
    Best!

  • Dan Ebberts

    May 20, 2022 at 10:48 pm

    This should do it:

    function addExpressions(){

    var myOpacityExpr = 'ease(time,inPoint,inPoint+1,0,100)';

    var myAudioExpr = 'ease(time,inPoint,inPoint+1,[-192,-192],[0,0])';

    var myComp = app.project.activeItem;

    if ((myComp == null) || ! (myComp instanceof CompItem)){

    alert ("No comp active.");

    return;

    }

    var myLayers = myComp.selectedLayers;

    for (var i = 0; i < myLayers.length; i++){

    if (myLayers[i].hasVideo){

    myLayers[i].property("Opacity").expression = myOpacityExpr;

    }

    if (myLayers[i].hasAudio){

    myLayers[i].property("Audio Levels").expression = myAudioExpr

    }

    }

    }

    addExpressions();

  • Antonio Carba

    May 21, 2022 at 7:43 pm

    Working perfect again!
    Thank you so much Dan for your help!

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