October 22, 2018

AE Script: Easy Set Matte Setup


So this little tweet about my go-to method for highlighting text got some attention:


It might not come as a surprise that I also have a script to make this even easier.

Download MatteLock.jsx

Save this to your scripts folder, or into a KBar button. Then follow these steps:

  1. Select the layer to apply the matte to
  2. Select the layer to use as the source of the matte.
    Optional: Hold ALT/Option to invert the matte.
    Optional: Hold Shift to apply inverted matte to both layers using eachother as the source.
  3. Run script

Note that by default, the script will simply apply the Set Matte effect on the first layer. Holding Shift and running the script is what creates the magic this post is all about.

And, if you like this you might like some of the other After Effects tools I've created.

May 30, 2018

FX Console + KBar

FX Console is one of those now indispensable enhancements for After Effects. In addition to easily searching for effects and presets to apply, it also serves as a gallery for taking, comparing, and exporting screen shots of your comps. KBar is another great extension to create custom toolbars and buttons to launch scripts, apply expressions and more. What if these two could work together? FX Console comes with a script panel to launch the snapshot features (screenshot, gallery, export) and preferences. With a little hacking around (and the blessing of Andrew Kramer) I was able to create a single script to put those features right into KBar buttons!

How to use it…

Open up KBar settings and create a new script button. Browse to the fxConsoleKBar.jsx script.

The default function will take a screenshot. But you can also supply the following arguments in the button setup to change the function (no quotes):

nothing : Default, takes screenshot
screenshot : Takes screenshot
gallery : Opens gallery
export : Export current frame
preferences : Opens preferences

You can make several buttons all pointing to the same script file with different arguments. Or you can setup keyboard modifiers if you just want a single button to do many things (thanks Tomas Šinkūnas). Take the following example:

alt: gallery, shift: export, cmd: preferences

With this setup, a normal button press will take a screenshot, alt press will open the gallery, shift press will bring up export options, and cmd (ctrl for windows) will open up preferences.

alt (uses option key on macOS)
cmd (uses the control key on Windows)


So here you go. Download the script and hook up FX Console to KBar!

Download fxConsoleKBar.jsx

More Tools

I have several other After Effects tools available, including a bundle of presets and a better way to copy/paste/reverse keyframes.

February 23, 2018

AE Effects List

Over at the Motion Design Slack the other day, we were lamenting not having a good list of which AE effects are 32-bit or GPU accelerated. So I compiled one. This is current through AE v15.0.1. All those red boxes? 8-bit only effects… 🙁

October 18, 2017

Curvy Connector AE Preset

The latest version of After Effects was released today (v15.0), and with it a slew of new features. One of those features allowed me to make the Curvy Connector preset!

Easily connect two layers in an After Effects comp with a controllable “S” curve. How controllable? Take a look at the controller view to the right.

The Curvy Connector preset is part of my new preset pack: Conigs Mixtape. The pack currently contains 10 presets and is available for $10. Math wizards might notice that’s only $1 per preset. And once you buy the pack, you’ll get updates and additions for free. But for each new preset added to the pack in the future, the new purchase price will go up by $1. So grab it now!

But because the AE community is awesome, I’m giving the initial version of Curvy Connector away for free (updates will live in Conigs Mixtape).

Download Curvy Connector (v15.0) -or- See more info on Conigs Mixtape

July 20, 2017

AE Preset – Measurements

There's been many times where I needed a matching rectangle behind a text layer, or even just need to know a shape layer's size and center. I got tired of remember the exact usage of the sourceRectAtTime() expression, especially getting the time right. So I made this preset.

Apply conigs_Measurements.ffx to a text or shape layer, and it will give you the Size (width, height), Center (x, y), Top-Left, and Bottom-Right coordinates, with the option for padding. It can get the measurements at the current time, or sample from a set time (maybe for an animated text layer where you want the box to stay static). It also has switches to take into account the scaling of the layer and to give you coordinates in composition space instead of relative to the layer.

Please note this requires AE 13.2 (CC2014) or later as the sourceRectAtTime() expression was first introduced in that version.

What you do with these numbers is up to you, but hopefully this will make it a little easier to rig up elements to another layer's size.

Measurements is part of the Conigs Mixtape preset pack.

Download Conigs Mixtape today!

September 28, 2016

AE Script – Move Selected Layer Group

Sometimes you want to select a group of layers in After Effects, and just move them all to the current time indicator and keep their relative timing. So you think ”I’ll just hit [ and move them all!” Only then you’re immediately hitting undo as you notice all the layers in-points moved to the CTI, erasing your carefully crafted timing. I got tired of that a long time ago and wrote a little script for my ft-toolbar setup. The topic recently came up on Twitter so I thought I’d share it.

Download below and set to an ft-toolbar button, or set a keyboard shortcut on macOS. Open up System Preferences: Keyboard: Shortcuts. Then click on App Shortcuts and add After Effects. Then you can type in ‘MoveSelectedLayerGroup.jsx’ and assign a shortcut.


May 13, 2016

Expression: oscillate()

Update: Oscillate is now a preset and part of Conigs Mixtape! Download it today!

There’s many occasions I just need a certain parameter in After Effects to go between two values. There’s several ways to do this (including keyframing), but one of the go-to methods is using the Math.sin() expression to get a nice sine wave. But for whatever reason, I always end up reminding myself the correct way to write out Math.sin( Math.PI * 2 * time * frequency ) * amplitude in my expression. I also wanted a bit more options. Sure cosine is easy (Math.cos()) but what about a triangle wave? Or Sawtooth?

So I wrote up a function to paste into an expression to give me many options. The image above shows some example usage, but here's the complete rundown…

oscillate("wave-type", frequency, amplitude, time)


A string or integer defining the type of wave to produce. Why the option to use numbers? Maybe you want to use some other code to determine the type of wave. Using a number just makes that easier. In general use, the strings are just easier to remember.

  • "sin" or "sine" or 1 (default)
  • "cos" or "cosine" or 2
  • "square" or 3
  • "saw" or "sawtooth" or 4
  • "tri" or "triangle" or 5


Number of full waves per second. Defaults to 1.


The height of the wave above or below 0. Defaults to 1.


The value to drive the wave. Defaults to time, but it could also use any other variable. Consider using the layer’s x position to drive the function on its y position.


All the parameters are optional in the function. Using just oscillate() will give you a sine wave with a frequency and amplitude of 1 over time. Or fill in all the parameters to get exactly what you want. However, the parameters must be given in order. So if you just want to change the amplitude, you'll need to include the wave-type and frequency before it.

The Code

And finally, here’s the code. Paste this into your expression (usually at the end), and you can call oscillate() to get a nice oscillation.

oscillate(wave-type, frequency, amplitude, time)

Returns value along time axis of different wave types or false if error.
All arguments are optional. Function defaults to Sine wave over time with frequency and amplitude of 1.
function oscillate(w,f,a,t) {
    if(!arguments[0]) w="sin";
    if(!arguments[1]) f=1;
    if(!arguments[2]) a=1;
    if(!arguments[3]) t=time;

    try {

            case "1": case "sin": case "sine":
                return Math.sin(2*Math.PI*x)*a;
            case "2": case "cos": case "cosine":
                return Math.cos(2*Math.PI*x)*a;
            case "3": case "square":
                return Math.floor(Math.sin(2*Math.PI*x))*a*2+a;
            case "4": case "saw": case "sawtooth":
                return ((x%f)/f)*a*2+adj;
            case "5": case "tri": case "triangle":
                return (Math.abs(((x%f)/f)*a*2+adj)-a/2)*2;
                return false;
    } catch(e) {return false}

March 6, 2016

AE Preset – Turbulent Wipe

Update: Turbulent Wipe is now a Fractal Wipe and part of Conigs Mixtape complete with a custom controller! Download it today!

Last week I posted on Twitter about an effects stack for a less boring linear wipe. Enough people asked for a preset, so you'll find the base preset at the bottom of the post. But first, let's go through this stack. Keep in mind this is intended to be applied to a solid and used as a matte.

Linear Wipe

01-WipeThis is the basic Linear Wipe effect we know and either love or hate. The only main difference here is adding the feather (which can be adjusted to suit your needs).

Shift Channels

02-ShiftChannelsThe Shift Channels effect is used to move the alpha channel to the luminance by applying it to the red, green, and blue channels. This is needed to get our fractal noise onto the transition since it works in RGB, and not the alpha channel.


03-InvertThe Invert effect is just here to make our wipe work in the correct direction for a reveal.

Turbulent Displace

04-TurbulentDisplaceThe Turbulent Displace effect is what gives us a nice, irregular, crawling edge on our wipe. The complexity is increased to 2.0 to give some more smaller details on the edge. Feel free to play with this, or animate Evolution to get an even more animated wipe.

Turbulent Noise

05-TurbulentNoiseLastly we have Turbulent Noise. This is what applies the noise on the edge of our wipe. You can play with different fractal and noise types, but you might need to roll Contrast back down to 100 to see the noises correctly.

Evolution is controlled by an expression which increases from to 360° as the Transition Completion on the Linear Wipe effect goes from 0% to 100%. This is very subtle, but it allows the noise to change as the wipe completes.

The last thing to note on this effect is setting Blending Mode to Overlay. This just places the noise on the gradient, and not on the black and white portions of the matte.

What’s Not In the Preset

There were a few extra effects in the Twitter post not included in the preset. This is because the further refine the look of the wipe, but aren't necessary to the basic setup. These are CC Vector Blur (added a more wispy noise), Noise HLS (remove some smoothness from the previous effect), and Curves (crank up contrast a bit more).

Download Preset

Okay, with all that said, here is the preset. Like I said earlier, it's intended to be applied to a solid and used as a luma matte. Have fun!

This preset will be maintained for those who need it, but an updated version is in the Conigs Mixtape preset pack. Download it today!


February 10, 2016

After Effects: A Better Bounce

A lot of bounce expressions rely on either setting parameters like frequency and decay, leading to guess work for when bounces will end or how long they'll last. Or the expression will settle the bounce on the last keyframe, giving you no real idea how fast the object will move before the bounce. This always bothered me.

Then this week on the Motion Design Slack group, someone was asking about getting bounce expressions to behave more intuitively. So I rolled up my sleeve and got to modifying an existing expression for inertial bounce (actually elastic). Here's the resulting code:

bounces    = 4;     //total number of bounces
duration   = .25;   //duration of each bounce in seconds
amp        = .05;   //multiplier for incoming velocity used in bounce
decay      = 3;     //exponential decay of bounce height

mult = (bounces-Math.floor(t*freq))/bounces;
if (n>0 && mult>0) {
    v=velocityAtTime(key(n).time-0.001)*amp; //velocity to use
    b=Math.abs(Math.sin(freq*t*Math.PI))*Math.pow(mult,decay); //bounce calculation
} else {value;}

Now this won't be physically accurate. Each resulting bounce would really be shorter in time as well. If that's what you're looking for, Dan Eberts has a physically accurate expression. And there's many other bounce tools like After Ease, Ease and Wizz, and Duik. However, this will give you a specific number of bounces, a set time for each bounce, and take incoming speed from keyframes for the object. This works great as an ft-toolbar button or a Text Expander snippet.

November 16, 2015

New Site Up and Running

It’s been a long time since I’ve added much to the site, much less refreshed the site. But it’s officially done! I’ve got some new work on the site, but by far the biggest edition is the new motion design reel. I was fortunate enough to get permission from Tiny Deaths to use their track “Ocean” for the music. (I highly recommend the rest of their songs as well.)

I have plans to keep the site better updated and to get back to writing on the blog. So be sure to come back and check for new updates regularly!

♥︎ Built with love from Minneapolis. Projects are copyright of their respective clients. All others ©2004-2023 Paul Conigliaro.