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.

Custom KBar icons for After Effects (pt. 1)

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


This post is geared towards After Effects users. If you are familiar with scripts and expressions, then read on. If not, you might want to check out SOM's Expressions 101 and I'm sure there are great sources out there to learn about scripts as well.

I recently picked up the KBar script for After Effects (technically it's an extension). I really like it! It's a lot like ft_toolbar, but I hadn't gotten around to purchasing toolbar yet, so I was interested in either one. I decided to go with the newer of the two and purchased KBar while it was still on sale. KBar has the option to use your own PNG or SVG files for the buttons, so I got excited and a bit carried away and designed some icons for myself.

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

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

I have a couple functions that I love to use with KBar, so I wanted to share the icons I designed for them. You can obviously get away with not using icons, but I'm a visual person and I like designing things. You can download the icons here if you are interested.

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

Explode Shape Layers

This requires the script ESL to work, but basically, I just have it run that .jsx file when I click it. It's the same as using the normal ESL UI, but this way I can have a button for it and can clear up a bit of space on my screen.


Separate Dimensions

I'm separating x & y for position constantly. It's nice to have a quick button for it. A good thing to note is that if you "alt click" it will relink the dimensions. The script itself is from Kyle Martinez. He also has more awesome tools here.

try {
app.beginUndoGroup("Separate Dimensions");
var altKey = ScriptUI.environment.keyboardState.altKey;
var toggle = (altKey === true) ? false : true;
var comp = app.project.activeItem;
var layers = comp.selectedLayers;
if (layers.length > 0) {
for (var i = 0; i < layers.length; i++) {
layers[i].transform.position.dimensionsSeparated = toggle;
layers[i].selected = false;
}
}
} catch(err) {
alert(err);
} finally {
app.endUndoGroup();
}
Separate XY.png

Loop Out

LoopOut is a very common expression and I use it pretty often. Instead of having to type it out or copy/paste it, I decided to make some buttons for it.

 loopOut("continue")

loopOut("continue")

 loopOut("cycle")

loopOut("cycle")

 loopOut("pingpong")

loopOut("pingpong")


Wiggle

Wiggle is another common expression. I typically just have a default of "wiggle(10,5)" but you can make it anything. I don't know if the design works well or not, but I loved the idea of using a car dealership guy for it. Those things are hilarious.

Wiggle.png

Maintain Scale

This is a technique I got from J.R. Canest and it's not as frequently used, but it's awesome. If you have a bunch of objects parented to the same null you can add the maintain scale expression to the scale of each of the child layers and they will expand outward without growing in size. Magic!

s = [];
ps = parent.transform.scale.value;
for (i = 0; i < ps.length; i++){
s[i] = value[i]*100/ps[i];
}
s

Squash & stretch

This is a technique I got from Joey Korenman at School of Motion. (I can't remember where I saw the tutorial, but if I find a link I'll add it in.) Basically what you can do is add a slider control to a layer (ie, a circle) and then you apply this expression to the scale property of the layer.

ssAmt=(effect("SS Value")("Slider")+100)/100;

if (ssAmt==0) {

[transform.scale[0],transform.scale[1]];

} else {

xs=transform.scale[0]*ssAmt;

ys=transform.scale[1]/ssAmt;

[xs,ys];

}

Make sure the name of the slider control matches what is in the expression (in this case it's "SS Value"). Now you can animate a nice squash and stretch with a single slider.

Daughter in Mograph

I recently listened to this podcast interviewing a motion designer named Caitlin Cadieux. Some of the conversation was about, ironically, the name of the podcast. It's called Brograph. The founders of the website simply chose the name because they thought it was funny and that it fit. They were 2 friends talking about mograph stuff. So, Brograph... Apparently, unbeknownst to them, "brographer" is a term that's sometimes used to describe when someone is being sexist. It could be harassment, or just being treated unfairly. The poor guys who started this Brograph venture now have a bit of a PR situation. They seem to be handling it with stride, and are, for now, keeping the name.

This isn't going to be a long essay about gender equality or anything, but I do want to touch on this topic of women in the workforce. For me, it's important, because I have a responsibility to my daughter. In the interview, Caitlin comes across confident and humble. She attributes her confidence to her mother, a hard working and very determined person. This confidence has probably helped her to be successful in a male-dominated industry. Not because she can be more aggressive than the next guy or gal, but because she knows her talents and passions, and she pursues them.

I don't make the argument that we need more women in mograph for the sake of statistics. Should there be 50% men and 50% women in this industry? I honestly don't know if that matters. To me, what matters, is this confidence. I want my daughter to have confidence in herself. Not an arrogant confidence, but rather a confidence in knowing who she is and what she is capable of. She doesn't have to become a motion designer, but if she wants to I want to help her get there.

 I was doing some style exploration. Then my 2yo daughter looked at it and said "dinosaur, dinosaur!" So I had to add dinosaurs and animate them.

I was doing some style exploration. Then my 2yo daughter looked at it and said "dinosaur, dinosaur!" So I had to add dinosaurs and animate them.

Freelancer?

"Freelance" has been my go-to term in describing my recent career path, but I have always felt a little confused by it. When I hear about freelancers in my creative field (motion design/animation), most of the time they talk about day rates or hourly rates and working on site at various studios and agencies. In a sense, they are always looking for jobs, not clients. I've been calling myself a freelancer, but this is not what I'm doing. So what is it that I do? How do I define it? Is it even freelance?

 Here. Have a free Lancer GIF.

Here. Have a free Lancer GIF.

I recently watched this video on Chris Do's channel, The Futur, and it has provided me some clarity. I recommend it to anyone who works with freelancers or who considers themselves a freelancer. It's a long conversation and it covers quite a lot of ground, so I want to try and focus on what stuck out to me.

The argument Chris Do makes is that many people call themselves freelancers when in fact they are business owners. It's a big mind shift, and it's very important, in his opinion, to look at it the correct way. He starts out, as any good debater or philosopher would, by defining terms. He cites Merriam-Webster's definition of  'freelancer' as "a person who pursues a profession without a long-term commitment to any one employer." He goes on to unpack that a bit, starting with the term "employer". This means it's an employer/employee relationship. So freelancers are always looking to get booked. They are paid hourly/daily. They report to a manager or supervisor of some kind and are generally working on site. This can be great, but it's not what a lot of people are actually doing. It's not what I'm doing. So what am I doing?

Apparently I'm doing business. I'm a business owner. So how do we define a business? What does a business do? A business does marketing and sales. A business negotiates, signs and writes contracts. Bid's proposals, SOW's. A business would work offsite (on their own site, or in my case my home studio). Work is project based. A business can be one or many employees. The business is self-directed and has autonomy. So in short, a business is looking for clients. This sounds much more familiar to me. This sounds like what I do.

When I first watched this conversation it helped me tremendously to further focus and clarify the way I define and operate my business. One of the main points he stresses is that we can't have an "employee" mentality as freelancers (unless, of course, we are doing freelance work in the way it's defined by Webster). Because we are not employees, we are businesses. We are business owners. Or to borrow from the lyrics of Jay Z. "I'm not a businessman I'm a business, man." So there you go, I'm a business. This is extremely liberating and very important if you want to be successful as a sole proprietor/lone ranger/mercenary or whatever you want to call it. I am a business, so I need to act like one.

This has real implications. Businesses have expenses, like overhead, taxes, hardware and software. We have operating expenses and we have costs that go into the goods and services we sell. We have all of this stuff that we didn't have as employees. It can be scary, but I think it's exciting. So why do so many of us undersell ourselves? Why are we not advancing and expanding ourselves professionally and financially? I think one big problem is this employee mentality. If we made $30/hr as an employee then we need to charge way more than that when we have more expenses.

This is great. I'm a business owner. I'm a fan of that. But I've decided, for myself, to take it one tiny step further. I think it helps to refer to myself as self-employed. When I hear "freelancer" I might picture a guy coming in and working on site at a studio. We've already covered this, but that's what I'm doing. When I hear "business owner" I picture a guy in an apron crossing his arms and smiling at the entrance to his French bistro. That's not me either. So, for now, I'm going to use self-employed. I'm open to better suggestions, but right now I'm self-employed.

Stickfigure Skateboarding

I would like to begin this first post with a story.

It's Friday. The year is 1999. I'm sitting at my desk and my mind is wandering. Thinking about kickflips and backside 180's, I decide to draw a stick figure of a skateboarder in my notebook. I create a flip book of a guy 360 flipping a 9 stair. I clench the pages tight and with my other hand, I flip through them. He lands it perfectly and rides away clean. Suddenly, a sheet of paper lands on top of him. It's last week's quiz. "C -" it says at the top in bright red ink. Bummer.

 Didn't see the pebble.

Didn't see the pebble.

I recently thought back to those times in school and I had an epiphany. I was doing animation in 7th grade, and it only took me 15 years to realize it and to discover that passion. Recently I decided to try my hand at frame by frame animation and recreate one of these types of animations. I stayed up way too late, but it was a joy to make.

My career has been great. I've loved doing video, photography, logo design, and more. It was incredible to go through the journey with the team at Yellow Line. Today I'm very happy to be doing what I'm doing. Motion design and animation are so fun for me. I'm working from my home. I get to see my wife Hannah, and daughter Rosalie, all the time. Rose turned 2 on March 23rd and we are expecting our son in June. My self-employment is a huge blessing for my family but it also comes with exciting new challenges. For example, I have to do my own marketing! Which brings me to this website.

IMG_0318.png

I'm hoping that my frequent presence on here will help my friends and family keep up to date on my life and my work. Maybe my mom will start to understand what on earth it is I do for a living (love you mom!).

Cheers.