Forum Replies Created

Page 13 of 1278
  • Walter Soyka

    January 3, 2023 at 9:49 pm in reply to: Reduce Project and maintain expressions

    I agree with you — it would be great if Ae tracked expression dependencies in addition to tracking item hierarchy dependencies. Maybe you could submit it as a feature request [link]?

  • Walter Soyka

    January 3, 2023 at 9:43 pm in reply to: update all label colors

    This challenge is actually really similar to another nearby post about guide layers [link], so I’ve modified the script I wrote for that a little bit.

    Save the block of text below as a JSX file, and install in your scripts folder.

    Select the items(s) with the label color that you want to push through the project in the project panel, and run this script.

    // keen-PushItemLabelsToLayers.jsx
    // this script takes the the project selection, searches each comp for layers sourced from those item(s), and sets their layer label color to match
    var selectedItems = app.project.selection.length > 0 ? app.project.selection : null;
    if (selectedItems != null) {
    // we always set an undo to be nice to our users
    app.beginUndoGroup("Push item labels to layers");
    // we'll want to track what we do so we can report back to our users
    var setLayerLabelCount = 0;
    var affectedCompList = [];
    // for each item selected in the project panel...
    for (var selectedItemsIndex = 0; selectedItemsIndex < selectedItems.length; selectedItemsIndex++) {
    currentItem = selectedItems[selectedItemsIndex];
    // we'll step through every comp in the project...
    for (var projectItemIndex = 1; projectItemIndex <= app.project.numItems; projectItemIndex++) {
    if (app.project.item(projectItemIndex) instanceof CompItem) {
    var currentComp = app.project.item(projectItemIndex);
    // and look at every layer to see if they match our selected source layer
    for (var compLayerIndex = 1; compLayerIndex <= currentComp.numLayers; compLayerIndex++) {
    var currentLayer = currentComp.layer(compLayerIndex);
    // and for any layers that do match but have a different label color, change their label
    // also increment the guide layer count, and push the comp onto the list of affected comps
    if ( (currentLayer.source == currentItem) && (currentLayer.label != currentItem.label) ) {
    currentLayer.label = currentItem.label;
    setLayerLabelCount++;
    affectedCompList.push(currentComp);
    }
    }
    }
    }
    }
    // remove duplicate comps from our list of affected comps
    for (var compListIndex = affectedCompList.length; compListIndex > 0; compListIndex--) {
    if (affectedCompList[compListIndex] == affectedCompList[compListIndex-1]) {
    affectedCompList.splice(compListIndex, 1);
    }
    }
    // summarize the changes in the Info panel
    writeLn("Changed " + setLayerLabelCount + " label layer color" + (setLayerLabelCount == 1 ? "" : "s") + " in " + affectedCompList.length + " comp" + (affectedCompList.length == 1 ? "" : "s") + ".");
    // that's all, folks. wrap up the undo
    app.endUndoGroup();
    } else {
    alert("No items selected. This script search each comp in the project for layers from the first selected project item and matches their layer label colors to the item label colors.");
    }
  • Walter Soyka

    January 3, 2023 at 9:31 pm in reply to: Guide Layer from project panel?

    I wrote a quick little script to set every layer instance of the selected project items as guide layers. Save this as a JSX file, install in your scripts folder, and off you go.

    Please note, this will NOT work exactly as you want (although your idea would make a great feature request). It will only affect layers that already exist in the project; new layers made from the project item will NOT automatically be guide layers; you’ll have to run the script again. But at least you can rest assured that if you run this before you render, your guides will be set as such.

    // keen-GuideItems.jsx
    // this script takes the the project selection, searches each comp for layers sourced from those item(s), and sets them as guide layers (if needed).
    var selectedItems = app.project.selection.length > 0 ? app.project.selection : null;
    if (selectedItems != null) {
    // we always set an undo to be nice to our users
    app.beginUndoGroup("Guide item");
    // we'll want to track what we do so we can report back to our users
    var setGuideLayerCount = 0;
    var affectedCompList = [];
    // for each item selected in the project panel...
    for (var selectedItemsIndex = 0; selectedItemsIndex < selectedItems.length; selectedItemsIndex++) {
    currentItem = selectedItems[selectedItemsIndex];
    // we'll step through every comp in the project...
    for (var projectItemIndex = 1; projectItemIndex <= app.project.numItems; projectItemIndex++) {
    if (app.project.item(projectItemIndex) instanceof CompItem) {
    var currentComp = app.project.item(projectItemIndex);
    // and look at every layer to see if they match our selected source layer
    for (var compLayerIndex = 1; compLayerIndex <= currentComp.numLayers; compLayerIndex++) {
    var currentLayer = currentComp.layer(compLayerIndex);
    // and for any layers that do match and are not already guide layers, set them as guide layers
    // increment the guide layer count, and push the comp onto the list of affected comps
    if ( (currentLayer.source == currentItem) && (currentLayer.guideLayer == false) ) {
    currentComp.layer(compLayerIndex).guideLayer = true;
    setGuideLayerCount++;
    affectedCompList.push(currentComp);
    }
    }
    }
    }
    }
    // remove duplicate comps from our list of affected comps
    for (var compListIndex = affectedCompList.length; compListIndex > 0; compListIndex--) {
    if (affectedCompList[compListIndex] == affectedCompList[compListIndex-1]) {
    affectedCompList.splice(compListIndex, 1);
    }
    }
    // summarize the changes in the Info panel
    writeLn("Set " + setGuideLayerCount + " guide layer" + (setGuideLayerCount == 1 ? "" : "s") + " in " + affectedCompList.length + " comp" + (affectedCompList.length == 1 ? "" : "s") + ".");
    // that's all, folks. wrap up the undo
    app.endUndoGroup();
    } else {
    alert("No items selected. This script search each comp in the project for layers from the first selected project item and set them as guide layers.");
    }
  • Walter Soyka

    December 19, 2022 at 6:57 pm in reply to: AE Colour picker – strange colours

    The color picker can work with HSB or RGB color models. These are three-dimensional models, so they’re a little tricky to represent in 2D. The bar in the color picker follows your color model / channel selection, and the rectangle shows possible values given the selection represented by the bar.

    When you select BLUE (as in your picture), the bar shows the possible range of blues, and the rectangular area plots red against green for that specific blue value.

    When you select HUE, the bar shows the range of possible hues, and the rectangular area plots saturation against brightness for that specific hue value (which is perhaps what you are expecting?).

  • Walter Soyka

    December 7, 2022 at 8:26 pm in reply to: Convert an turbulent displace to keyframes

    Add a “Wiggle Paths” modifier to your shape layer instead of using Turbulent Displace.

    https://helpx.adobe.com/after-effects/how-to/wiggle-paths-animation-effects.html

  • Walter Soyka

    December 7, 2022 at 8:19 pm in reply to: Failed Render

    Another good tip if you’re crashing during render: instead of rendering to a movie, render to an image sequence. You can always pick up the render exactly where you left off without worrying about a corrupt movie file, and you can re-encode the image sequence to a movie file very quickly afterwards.

  • Walter Soyka

    December 7, 2022 at 8:17 pm in reply to: AE and Pre-comp workflow thoughts.

    There’s a new-ish feature in After Effects that has completely changed how I precomp: ESSENTIAL GRAPHICS (formerly called Master Properties).

    This workflow lets you build a precomp and publish parameters within it that you can change downstream when it’s contained inside another comp. That means you can organized layers in a precomp, but handle the animation within the containing comp (on multiple, independent layers if you want!) This is a huge gamechanger, but it seems a lot of people aren’t aware how amazingly powerful and flexible this system is.

    See these pages for more:

    https://helpx.adobe.com/after-effects/using/creating-motion-graphics-templates.html

    https://www.schoolofmotion.com/blog/master-properties-after-effects

  • Walter Soyka

    December 1, 2022 at 5:42 pm in reply to: Extend length of comp to match the longest layer

    I’m way late to the party, but this would make a useful script. Save this code as a .jsx file, and it will step through all selected comps, extending their duration to the latest out point of its layers.

    var projectSelection = app.project.selection;
    if (projectSelection.length == 0) {
    alert("Select one or more comps in the project panel.");
    } else {
    app.beginUndoGroup("Extend selected comps to longest layer");
    writeLn("Extending selected comps to longest layer...");
    var processedCompsCount = 0;
    var modifiedCompsCount = 0;
    for (var i = 0; i < projectSelection.length; i++) {
    if (projectSelection[i] instanceof CompItem) {
    var modifiedComp = false;
    var currentComp = projectSelection[i];
    for (var j = 1; j <= currentComp.numLayers; j++) {
    if (currentComp.layer(j).outPoint > currentComp.duration) {
    currentComp.duration = currentComp.layer(j).outPoint;
    modifiedComp = true;
    }
    }
    processedCompsCount++;
    if (modifiedComp) { modifiedCompsCount++; }
    }
    }
    writeLn("Processed " + processedCompsCount + " comp" + (processedCompsCount == 1 ? "" : "s") + " and modified " + modifiedCompsCount + ".");
    app.endUndoGroup();
    }
  • Walter Soyka

    November 29, 2022 at 6:19 pm in reply to: Help – Exponential Grid

    Yes, Math.pow() is the best way to solve this problem!

    There are three reasons why your for loop wasn’t working:

    1. The loop will execute 12 times, not 13, because you’re testing if i is less than x. For it to execute the last time, you want to test if i is less than or equal to x (written “i <= x”).

    2. The double-equal sign in the body of the loop tests equality, it does not assign a value. R will never change. Use a single equal sign here instead.

    3. The algorithm has a bug; you’re not multiplying it by itself x times, you’re squaring it X times. You need a separate variable to track the original value as well as the accumulating value.

    Again, Math.pow() is the right way to solve it, but here’s the for() loop solution:

    R = thisComp.layer("settings").effect("R")("Slider");

    var x = 13;

    var accumulatingValue = 1;

    for (i=1; i <= x; i++) {

    accumulatingValue = accumulatingValue * R; // this can also be written like this: "accumulatingValue *= R;"

    };

    [value[0], value[1] * accumulatingValue];

  • Walter Soyka

    November 29, 2022 at 2:55 pm in reply to: Lagging even with just simple text?

    Ae doesn’t run much in real-time, but a couple of 2D text layers is normally doable!

    That said, there are number of features that can sneakily crank up your render times. Are you using the Classic 3D renderer, or the CINEMA 4D renderer? Are they 2D or 3D? Are you using motion blur or depth of field at all?

    You can use the Composition Profiler to see what’s dragging your render times down. Click the snail icon in the lower left corner of the timeline panel. This will reveal a column in the timeline that shows you the impact that each layer, feature, and effect has on render time:

    https://helpx.adobe.com/after-effects/using/composition-profiler.html

Page 13 of 1278

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