## How to make a more flexible wiggle in After Effects

Written on 30 June 2016, 01:58am under Quick Tips

The typical wiggle expression in After Effects is this:

``````wiggle(frequency, amplitude)
``````

So if you would like your position to move on a scale of 20 pixels every half second you would use this expression on the position property:

``````wiggle(.5, 20)
``````

## How to wiggle x, y and z separately

The wiggle function returns an array or numbers. If you are applying it on a 3D layer, it returns an array of three numbers (`[x, y, z]`) and if you are applying it on a 2D layer it returns an array of two numbers (`[x, y]`). If you want to just wiggle one of the axis of a 2D layer you can simply do this:

``````var wiggle = wiggle(.5, 20);

[wiggle, value];
``````

Here, only our value `x` will have the wiggle. The only difference with a 3D layer is that it would need a third value.

If you would like instead to have `x` wiggled normally, but `y` and `z` to have a bigger wiggle you could do:

``````var low_wiggle = wiggle(.5, 20);
var high_wiggle = wiggle(.5, 50);

[low_wiggle, high_wiggle, high_wiggle];

``````

## How to keyframe the wiggle values

You often might want to keyframe a wiggled value. This can easily be resolved by creating a null layer, typically named `Controller`, to which you would apply two Slider Control effects. One named`Frequency`the other one `Amplitude`. You can name them however you like, but I think these names are the most obvious. Next, on your layer’s position property, you would add this expression:

``````wiggle(thisComp.layer("Controller").effect("Frequency")("Slider"), thisComp.layer("Controller").effect("Amplitude")("Slider"));
``````

This way, you would be able to keyframe one or both of those sliders in order to increase or decrease the wiggle effect.

## How to sync multiple wiggles

You can sync multiple wiggles by using the `seedRandom()` function. By default After Effects attributes a different seed value to each wiggle. The `seedRandom()` function forces the wiggle (or any other function using random numbers) to use the seed your are providing.

``````seedRandom(1, true);

wiggle(thisComp.layer("Controller").effect("Frequency")("Slider"), thisComp.layer("Controller").effect("Amplitude")("Slider"));
``````

The first parameter (`1`) is the seed number that will be used to generate the random number. It can be whatever you like. The second parameter is the `timeless` parameter. If you don’t set it to `true` the random number will change on every frame and this will probably result in things you do not want. If you use the expression above on many layers, all of their wiggles will be coordinated.

## How to wiggle the wiggle

The good thing about using a controller, is you can apply a wiggle to the amplitude too. To do this, you will need to add another slider to your controller. Name it maybe `Wiggle value` and set its base amount to the the number you want to start from, say `50` for example, and then apply the same kind of expression:

``````wiggle(effect("Frequency")("Slider"), effect("Amplitude")("Slider"))
``````

Now, you can apply to your layer’s position this expression:

``````value + thisComp.layer("Controller").effect("Wiggle value")("Slider")
``````

Since `value` represents what your property already holds as its base value. It will be supplemented with `Wiggle value`.

Now, since `Wiggle value` is a `Slider Control`, it only has one dimension. If you use it with a property that has 2 dimension, say scale for example, both first and second values will be the same. If you want them to be different, instead of using a `Slider Control` for your `Wiggle value` use a `Point Control` for 2 dimensions, and `3D Point Control` for 3 dimensions such as position for 3D layers.