Custom KBar Icons for After Effects (pt. 2)

UPDATE: I wrote a newer article on School of Motion about this topic.


If you haven't read the original post you can find it here. You can download all the icons and project file here.

 I chose to use colors based on Google's Material Design.

I chose to use colors based on Google's Material Design.

I have added some more functions to my KBar and, of course, had to make some more icons.

Below, I'll go through the new icons and give some description on how each button works.

Parametric converter

This is another script from Kyle Martinez. It's called Parametric Converter. This allows you to convert a square shape path into a parametric rectangle, or a circular bezier path into a parametric circle, thus giving you more options than you normally have with a regular bezier path (ie; size). IMPORTANT: To use these with KBar you should use his standalone scripts found on his website.

PC Circle.png

Time reverse keyframes

This is simple. It just makes this function possible in a single click instead of using the 'right click' drop down menu. Just set the button to invoke menu item "3693".

Reverse Keyframes.png

Time Expression

This is just to apply the time expression to any layer attribute (ie; time*5)

Time.png

Stereo Fade

I've created an animation preset for quickly creating a fade on an audio track. It applies "stereo mixer" to a layer and then sets keyframes on both R and L channels to go from 100 to 0. The reason I use Stereo Mixer is because it gives a much better fade than if you keyframe Audio Levels. But it's a little tedious because you have to keyframe both chanels, so I made a preset. Here is the icon to go along with it.


Remove expressions (Updated April 25 2018)

Thanks to John Colombo I've finally got a great scriptlet for quickly removing all expressions from layers. It can be tedious to option click every single property, and I wish I could just do it in one click. This script will do that. It removes them from all selected layers and if you have none selected then it removes all of them within the comp. Super slick!

 (function removeExpressions(){

    var comp = getActiveComp();

    

    if (comp) {

        

    app.beginUndoGroup("Remove All Expressions");

    

    forAllSelectedLayersElseAll(comp, function (layer){

        removeAllExpressions(layer);

    });

    

    app.endUndoGroup();

    

    } else {

        alert("Please select a composition.");

    }

      

    function removeAllExpressions(propParent)

    {

      if (propParent)

      {

         var prop;

         for (var i=1; i<=propParent.numProperties; i++)

         {

            prop = propParent.property(i);

            switch (prop.propertyType)

            {

               case PropertyType.PROPERTY:

                  // do action

                   if (prop.canSetExpression && prop.expression) prop.expression = "";

                  break;

               case PropertyType.INDEXED_GROUP:

                  removeAllExpressions(prop);

                  break;

               case PropertyType.NAMED_GROUP:

                  removeAllExpressions(prop);

                  break;

               default:

                  break;

            }

         }

      }

    }

    

    function isComp (item) {

        return item instanceof CompItem;

    }

    

    function getActiveComp () {

        var thisComp = app.project.activeItem;

        if (thisComp === null || !(isComp(thisComp))){

            alert("Please select a composition!");

            return null;

        }

        return thisComp;

    }

    

    function forAllSelectedLayersElseAll (thisComp, doSomething) {

        if (thisComp.selectedLayers.length === 0)

            if (confirm ("You are about to remove all expressions in the active composition.\nAre you sure you want to continue?", false, "Expression Annihilation Imminent!")) {

                forAllLayersOfComp(thisComp, doSomething);

            } else {

                return;

            }

            

        else

            forAllItemsInArray(thisComp.selectedLayers, doSomething);

    }

    function forAllItemsInArray (itemArray, doSomething) {

        for (var i = 0, il = itemArray.length; i < il; i++){

            var thisItem = itemArray[i];

            doSomething(thisItem);

        }

    }

    

    function forAllLayersOfComp (thisComp, doSomething) {

        for (var i = 1, il = thisComp.layers.length; i <= il; i++){

            var thisLayer = thisComp.layers[i];

            doSomething(thisLayer);

        }

    }

})();


Center Composition

This is another one from Kyle Martinez. I don't use it terribly often, honestly, but I'm sure many people do. I have a habit of moving my comp around with spacebar (as I do is just about every other Adobe program). But sometimes it's nice to just click a button and have it snap to the center of the comp window. OCD with your workspace? This one's for you.