AnimStack’s rotate tag can be used to create a full rotation animation very quickly. In this example, each frame turns by 15 degrees, so a complete 360-degree loop needs 24 frames in total (15*24=360). Here is the finished result:

AnimStack tutorial


Start by generating 24 layers with [*24], then create the text layers with changing angles using [fg] [-rotate:15]:

AnimStack tutorial

If you use [fg] [-rotate:-15], the rotation will go clockwise. Run the script and the GIF is generated. At that point, you can preview it through Filters - Animation - Playback.

AnimStack tutorial

The animation works, but the image quality is poor and noticeably blurry:

AnimStack tutorial

The reason is that this rotation method is cumulative. The frame at 30 degrees is not created from the original artwork—it is created by rotating the 15-degree frame by another 15 degrees. Every new rotation loses a little precision, so by the end the image becomes badly degraded. The difference between rotating once and rotating 23 times is easy to see:

AnimStack tutorial AnimStack tutorial

To avoid that quality loss, switch to the plugin’s non-cumulative mode.

Change the tags to:

[angle=inc:-15] [.fg] [-rotate:angle]

This defines an angle variable, increases it by 15 degrees each time through inc, and uses angle as the value for rotate. The key detail is the . before fg, which enables non-cumulative mode.

After running the plugin again, the result is already better than before:

AnimStack tutorial

There is still another issue to fix. Set the background to transparent by right-clicking the background layer, choosing Alpha to Selection, and then pressing the DEL key.

Run the plugin once more and export the GIF:

AnimStack tutorial

That looks wrong.

By default, frame disposal uses combine mode. The other option is replace mode.

The version used here is AnimStack 0.6. In version 0.3, a tag was added that lets you choose between combine and replace. That option did not exist in version 0.2, where timing worked more like the old delay setting.

AnimStack tutorial

With that tag, replace can be added to the layers in bulk:

AnimStack tutorial

Export the GIF again and the result is much more usable:

AnimStack tutorial

Both GIFs above actually use transparent backgrounds. That may not be obvious when viewed in a web page, but if you download and open them locally, the transparency appears as expected:

AnimStack tutorial

If you look closely, the text becomes much rougher after removing the white background and switching to transparency.

That limitation comes from the GIF format itself. GIF does not support partial transparency, so each pixel in a layer is either transparent or opaque.

There is still one more improvement available. Since GIFs are often shown on white web backgrounds anyway, keeping white as the background and using the matte tag can make the edges look cleaner.

Based on the previous setup, use Image - flatten layer groups to merge the layer groups. Then create a new layer at the bottom, fill it with white, and add the [matte] tag. The matte tag does have a few parameters, but the default setting is usually the best choice.

AnimStack tutorial

Run the plugin:

AnimStack tutorial

What matte does at the start is wrap the text in a white edge. In GIMP’s preview, that white edge can still look jagged, but on a web page it blends into the page background if the background is also white, making the jaggedness much less noticeable. That is exactly what the matte step is for.

Export the GIF and compare the results. On the left is the version improved with non-cumulative mode; on the right is the version improved further with the matte tag:

AnimStack tutorial AnimStack tutorial


That covers rotation.