Skip to main content
Teguh82
Inspiring
December 4, 2014
Answered

How to apply expression using script?

  • December 4, 2014
  • 1 reply
  • 3299 views

I'm using a script and an expression to automate all selected layer to follow the control layer. So, I do it on two step right now, first make a control layer using this script:

{

var comp = app.project.activeItem;

var slctd_layer = comp.selectedLayers;

var new_adjustment = comp.layers.addSolid([1,1,1], "Controler", comp.width,comp.height,comp.pixelAspect,comp.duration);

new_adjustment.adjustmentLayer = true;

var addSlider1 = app.project.activeItem.selectedLayers[0].Effects.addProperty("ADBE Slider Control");

addSlider1.name = "delay";

addSlider1.property(1).setValueAtTime(0, 0.06);

var addSlider2 = app.project.activeItem.selectedLayers[0].Effects.addProperty("ADBE Slider Control");

addSlider2.name = "opacity";

addSlider2.property(1).setValueAtTime(2, 0);

addSlider2.property(1).setValueAtTime(2.03, 100);

}

Then I select all layer below the controler and apply the expression, for example:

delay = thisComp.layer("Controler").effect("delay")("Slider")*index;

t = time+delay;

exp = thisComp.layer("Controler").effect("opacity")("Slider").valueAtTime(t);

exp;

I'm working on a tight schedule animation and tons of material with tons of layer for each comp right now. So, I'm just thinking if it's possible to combine this two step into one script that will automate this work for me. I'm still new on scripting and need any help with it. Thanks

This topic has been closed for replies.
Correct answer UQg

Thanks UQg, I try to animate the delay slider as you said and it's works. But again, is it possible to add easeIn or easeOut keyframes on it? here is my code:

addSlider1.name = "delay";

addSlider1.property(1).setValueAtTime(0, 0.2);

addSlider1.property(1).setValueAtTime(2.03, 0.03);

Thanks a lot.


Like this:

var ease = new KeyframeEase(0,100/6);    // speed (0 for easeIn or easeOut, influence range: 0-100)

var addSlider1 = new_adjustment.effect.addProperty("ADBE Slider Control");

addSlider1.name = "delay";

// 1st key: value + ease

addSlider1.property(1).setValueAtTime(0, 0.2);

addSlider1.property(1).setTemporalEaseAtKey(1, [ease], [ease]);

addSlider1.property(1).setInterpolationTypeAtKey(1, KeyframeInterpolationType.LINEAR, KeyframeInterpolationType.BEZIER);

// 2nd key: value + ease

addSlider1.property(1).setValueAtTime(2.03, 0.03);

addSlider1.property(1).setTemporalEaseAtKey(2, [ease], [ease]);

addSlider1.property(1).setInterpolationTypeAtKey(2, KeyframeInterpolationType.BEZIER, KeyframeInterpolationType.LINEAR);

(The use of setInterpolationTypeAtKey is unnecessary, it is only there to make things looks like what one would obtain by doing things by hand).

Xavier

1 reply

UQg
Legend
December 4, 2014

Something like this maybe:

var expression = "delay = thisComp.layer(\"Controler\").effect(\"delay\")(\"Slider\")*index;\rt = time+delay;\rexp = thisComp.layer(\"Controler\").effect(\"opacity\")(\"Slider\").valueAtTime(t);\rexp;";

var idx = new_adjustment.index;

for (var j=idx+1; j<=comp.numLayers; j++){

    comp.layer(j).transform.position.expression = expression;

    };

expression is a read/write attribute of properties (String). This is an example for position.

But there is something unclear : if you add a layer usually AE queues it at the bottom of the layer stack, so you'll probably have to move your solid before (use new_adjustment.moveToBeginning(), or new_adjustment.moveBefore(comp.selectedLayers[0]) ).

Xavier.

Teguh82
Teguh82Author
Inspiring
December 4, 2014

It's perfectly working on my AE CS 6. I don't know why but my new layer

always queues at the top of the layer stack. One more request question, How

to adjust my expression to make the layers follow slower in the beginning

and than gradually faster? Here is my code for the opacity with 89 layer in

the comp:

{

var comp = app.project.activeItem;

var slctd_layer = comp.selectedLayers;

var new_adjustment = comp.layers.addSolid(, "Controler",

comp.width,comp.height,comp.pixelAspect,comp.duration);

new_adjustment.adjustmentLayer = true;

var addSlider1 =

app.project.activeItem.selectedLayers[0].Effects.addProperty("ADBE Slider

Control");

addSlider1.name = "delay";

addSlider1.property(1).setValueAtTime(0, 0.06);

var addSlider2 =

app.project.activeItem.selectedLayers[0].Effects.addProperty("ADBE Slider

Control");

addSlider2.name = "opacity";

addSlider2.property(1).setValueAtTime(2, 0);

addSlider2.property(1).setValueAtTime(2.03, 100);

var expression = "delay =

thisComp.layer(\"Controler\").effect(\"delay\")(\"Slider\")*index;\rt =

time+delay;\rexp =

thisComp.layer(\"Controler\").effect(\"opacity\")(\"Slider\").valueAtTime(t);\rexp;";

var idx = new_adjustment.index;

for (var j=idx1; j<=comp.numLayers; j+){

comp.layer(j).transform.opacity.expression = expression;

};

}