The Shifts tool regularly or quasi-regularly shifts the value of the properties it is applied to.

Space-filling curve,
David Hilbert, 1891
Public domain.

  1. Select the properties
  2. Click the Shifts button


When you’ve applied the Shifts on some properties and then want to use the same Shifts on other properties, you can just copy and paste the expression in the new properties.

The Shifts tool is able to generate a path which regularly gets back to its original value, thus it can be used in a loop.


The Shifts can be adjusted in the effects of the first selected layer.

Each shift offsets the value by a random amount between the minimum and maximum distance. If both are the same, each shift will be exactly the same.
The duration is of each shift is set with the same principle, between a minimum and maximum duration given in seconds. The same is true for the duration of the pauses between the shifts.

For multi-dimensional properties (position, scale, colors…) you can tweak how each axis is offset during each shift:

You can also adjust the interpolation* of each shift:

With the Smooth, Natural, Slow down and Speed up interpolations, you can use the Rate value to adjust the easing (acceleration and deceleration rate) of the motion.

If the Loop is enabled, all properties regularly get back to their initial value, according to the loop duration; but each new loop is different than the others! The path taken when shifting the values is randomly chosen and there’s no actual cycle.

The random seed is used to generate the pseudo-randomness of the distances and durations.
By default, all properties using the same Shifts effect and on the same layer are synchronized and use the same random seed, but properties on different layers aren’t. If you’d like the seed to be the same for all layers, uncheck the One seed per layer option.
If you’d like all the properties to not be synchronized, create multiple Shifts effects instead of a single one for all properties.
To change the randomness, you can change this seed value.


The default loop duration is set to the composition duration.


If you need an actual cycle, where the path is always the same, you could generate a single precomposed cycle, and use time remapping1 to loop this precomposition.

  1. There is a tool to activate time remapping and loop in a single click in Duik. cf. Automation / Tools / Time remap