Forum Replies Created

Page 41 of 277
  • Filip Vandueren

    March 17, 2022 at 9:13 am in reply to: Style a single word in a text layer?

    Hi there,

    it’s not possible to set multiple styles in 1 sourceText object, you can getStyleAt() for a particular character, but you can only set style for the whole layer.

    Unfortunately, this also means that if you manipulate the sourceText in any form (like add a “|” string to the end), the style of the entire sourceText gets changed to the styling of, I believe, the first character.

  • Filip Vandueren

    March 16, 2022 at 10:17 am in reply to: Puppet Pin Tool Odd Behavior

    You are trying to apply the Puppet Pin to a shape or a continuosly rasterized layer, which doesn’t work as described here:

    https://helpx.adobe.com/after-effects/using/animating-puppet-tools.html

  • Sorry Ralph, you’re correct that it needed to be square brackets, but also we need to start counting from 0, since it is an array of layers, unlike After Effects’s built in methods like key() or layer() which start counting from 1.

    So, I hope this solves all problems:

    app.beginUndoGroup("Null_Capture");
    var comp = app.project.activeItem; // active comp
    var sl = app.project.activeItem.selectedLayers;
    if (comp instanceof CompItem) {
    for (i = 0; i < sl.length; i++) {
    var l = sl[i];
    if (l.marker.numKeys) {
    var c = l.property("Marker").keyValue(1).comment;
    l.parent = comp.layer(c);
    }
    }
    }
    app.endUndoGroup();
  • Oops, I think

    l=comp.layer(i);

    should be:

    l=comp.selectedLayers(i);

    Or it will be wrong when not all layers of the comp are selected when the script is run

  • I’m not a scripting expert but I think this works and is reasonably robust:

    app.beginUndoGroup("Null_Capture");
    var comp = app.project.activeItem; // active comp
    if (comp instanceof CompItem) {
    for (i = 1; i <= app.project.activeItem.selectedLayers.length; i++) {
    l = comp.layer(i);
    if (l.marker.numKeys) {
    c = l.property("Marker").keyValue(1).comment;
    l.parent = comp.layer(c);
    }
    }
    }
    app.endUndoGroup();
  • I think I would just do:

    longestTxt = Math.max(txt1X,txt2X,txt23,txtSocial, 500);

    then 500 is the minimum ( before adding margins)

  • BTW, if it doesn’t need to be vector/shape:

    There’s a neat trick you can do with creating an audio Tone and then rendering it with Audio Waveform

    https://imgur.com/qnOFJxr

    here is the project-file:

    https://we.tl/t-dHnsT6gcj2

    View post on imgur.com

  • Filip Vandueren

    March 14, 2022 at 9:29 am in reply to: motion blur? HELP?

    I think there’s nothing wrong with your expression on the scale, but the values it is getting from soundkey are not doing something smoothly, so when AE samples the values at different subframe-times, their motion is unexpected.

    Can you check in the speed graph of the Sound Keys Output that maybe the motion inbetween keyframes is indeed not linear ?

    Does that property also have an expression ?

    Maybe it’s been converted to keyframes, but the keyframes have an easy ease or a hold keyframe appleid ?

    Stuff like that will make the motion blur act weird.

  • That’s not possible, the effector on the Shape’s path is something very different to a pixel-effect. There’s no way to limit it’s range or strength or mask it in anyway.

    The only way I can think of is with expressions in the shape path’s but that would be pretty complex to program.

  • Filip Vandueren

    March 12, 2022 at 9:23 am in reply to: Scrolling shapes along a square path

    Hi Tom,

    I propose giving all the character layers another colour-label than other Nulls and layers in your comp, so it’s easy to quickly select them all by clicking on the coloured square in front of one layer’s name and choosing “Select Layer Group”. That makes it quick to paste an expression to multiple layers.

    I’m assuming the character’s anchorpoints are not all perfectly on their baseline, as they would be when the outlines are created in the first place ?

    Then we need some extra steps:

    Add a “Control Null”, position it at [0,0].

    Select all the character layers and center their anchorPoints (Layer -> Transform -> Center AnchorPoint in Layer Content);

    Add a Point Control “firstChar”, and position it under your first Character, where you want it to attach to the Path (so, on the baseline)

    Add this expression to all of their anchorPoints:

    value - [0,position.valueAtTime(-1)[1]-thisComp.layer("Control Null").effect("firstChar")("Point")[1]];

    The characters will now all have crazy vertical offsets, don’t mind about that for now.

    To the control-nulll add a slider named “spacing” (set to about 30), and a second slider named “offset” (keep at 0).

    Give all the Characters this expression for position, it is based on the position expression that the “Trace” option of Paths to nulls made:

    The main thing you need to adjust is to make sure the name of the pathLayer and the name of pathToTrace is correct for your composition, you should copy those from the “trace” Null’s position expression.

    var pathLayer = thisComp.layer("Shape Layer 1"); 
    var progress = thisComp.layer("Control Null").effect("offset")("Slider")/100;
    var spacing = thisComp.layer("Control Null").effect("spacing")("Slider")/100;
    hPos = position.valueAtTime(-1)[0] - thisComp.layer("Control Null").effect("firstChar")("Point")[0];
    progress += (hPos*spacing)/1000;
    progress = ((progress%1)+1)%1;
    if (time<=-1) { value } else {
    var pathToTrace = pathLayer("ADBE Root Vectors Group")(1)("ADBE Vectors Group")(1)("ADBE Vector Shape");
    pathLayer.toComp(pathToTrace.pointOnPath(progress));
    }

    Add this expression to each character’s rotation:

    var pathToTrace = thisComp.layer("Shape Layer 1")("ADBE Root Vectors Group")(1)("ADBE Vectors Group")(1)("ADBE Vector Shape"); 
    var progress = thisComp.layer("Control Null").effect("offset")("Slider")/100;
    var spacing = thisComp.layer("Control Null").effect("spacing")("Slider")/100;
    hPos = position.valueAtTime(-1)[0] - thisComp.layer("Control Null").effect("firstChar")("Point")[0];
    progress += (hPos*spacing)/1000;
    progress = ((progress%1)+1)%1;
    var pathTan = pathToTrace.tangentOnPath(progress);
    radiansToDegrees(Math.atan2(pathTan[1],pathTan[0]));

    Also based on the original Trace expression.

    You don’t need the Trace Null anymore.

    Now you can finetune the character spacing and animate the offset. (The exact value is dependent on the length of your PathToTrace, the length of the line, the width of each character,… but the result should be perfectly proportional to your original layout and easy to dial in)

    If you notice a bit of offset from the path to the characters, check to see that in your Shape Group the position <i style=”font-weight: bold;”>of the Contents (not the layer transform) is set to [0,0], then reposition the layer, not the Contents.

Page 41 of 277

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