Looping an animation without keyframes and timeloop

Hi it’s me again. I hope you all are doing well! This time I have a question about looping the majority of an animation without using keyframes or a timeloop layer and hoping there is a way without needing to duplicate a group’s waypoints over and over.

The best way I think I can make my issue clear is by giving an example:

Suppose I’m animating at 12 frames a second and my animation is 240 frames (20 seconds) long. I have created a 12 frame (1 second) animation that I want to loop over and over to the end EXCEPT I want the flexibility of making minor tweaks to each loop. Every frame is essentially a keyframe requiring waypoint on every single frame.

I don’t want to use timeloop because it seems that that is fairly rigid as far as trying to modify the subsequent loops. In my short experience with it it tends to override whatever change in animation you’ve made along the way. So it seems good for looping an animation verbatim? But not so great at doing a sort of copy/paste do most of the leg work for me kinda thing. Unless I’m using it wrong?? If so I’m all ears.

I also don’t want to use keyframes because while those might be easier to click on keyframes have a tendency to create waypoints for every layer and for my example above while every frame is for all intents and purposes a keyframe not every layer has a waypoint nor needs a waypoint on every frame. Duplicating keyframes is also just BARELY less tedious than duplicating waypoints anyway.

Please let me know if anything I said is confusing. I can make an example animation upon request.


Let’s see if this technique is valid for you:

  1. put all the layer of the animation you want to loop into a group
  2. duplicate that group as many times as you need
  3. the group layer has a parameter called ´Time offset´, use it in negative value in order to delay.

You will need to manually set that delay for each group but then you will be able to tweak each group (or loop) at your will.

The only disadvantage is that they are not “connected”, I mean, if you do a change in the first one, that change is not replicated or cloned to the others…


Here you have a proof of concept: loop_v01.sifz (1,3 KB)


I did a little experimenting and built on what you showed me to actually loop animations that are occupying the same space too. Thank you for your help!

Here’s a concept of what I did:
Flexible Looping Example 2.sifz (53.3 KB)

I just realized after posting that that I did that in a needlessly complicated way by using alpha over layers when one can just use opacity. If anyone comes along here in the future do it this way:
Flexible Looping Example 3.sifz (47.0 KB)

I have just looked to your project and there is something that looks not fine to me (or maybe I got it wrong and it was intended…). You have animated the “Time offset” parameter with clamped waypoints. This kind of waypoint makes your animation behave like the following (just looking at a group layer):


A better approach would be the one I showed to you, just change the “Time offset” value without animating it.

BTW, if you animate the value you get a new way of looping an animation! Use constant waypoints better and you’ll get something like the following:



Hey thanks again for all the help! As I was trying to loop it it didn’t even occur to me that I didn’t need to actually animate the time offset. Not animating it is much more efficient ha ha. I’d imagine it’s also less resource intensive too. Also yes constant waypoints are better, which brings me to another topic which probably deserves it’s own thread, but here goes.

I guess I didn’t really understand the difference between different kinds of waypoints. And the waypoint wiki page (Waypoint - Synfig Animation Studio) has some information on it that is VERY out of date, such as the example animation. I made my own example animation to teach myself what the difference really is between waypoints:
New Waypoint Example 2.sifz (21.8 KB)

Constant, Ease in/out, and Linear all seem very intuitive to me. However TCB seems rather odd. I assume it was made with either some mathematical graphing or puppet rigging purpose in mind? Clamped is also odd to me. It seems to be a default TCB without variables. So I guess my question about that is what exactly is the purpose of both, but clamped in particular? Does it deal with arcs and subsequent waypoints better? and why is it the default waypoint (unless you can change default waypoints if so let me know)? I’d think Linear would be the most basic and versatile waypoint for what people typically expect their animation to do.

^^^ These last two paragraphs are directed at anyone not just Pablogil.

Edit: Came across this video: Synfig Tutorial: Interpolation - YouTube
This explains all the waypoint stuff nicely. Probably should be added to the wiki if possible.

I would suggest you to watch the following 2 videos which, IMHO, explain not only the concept of waypoint but keyframe as well. After watching them both you will definitely know how to use them:

  1. Synfig studio tutorial Understanding way points - YouTube

  2. Synfig for beginners: 45 - Keyframes and waypoints explained - YouTube


Another little question on this topic.

So the time offset looping is working well for me all things considered, but the issue I’m having at this point is the strain it seems to put on the performance of the software and I was wondering if there was an efficient workaround internally to Synfig.

For example say I have a one second loop and the scene I’m looping has 200 layers. If the animation is 20 seconds long and there’s a loop every second I need 20 groups of 200 layers meaning in reality the file has 4000 layers. That’s not the exact numbers of what I’ve got going on, but I will say I’ve gotten to a 3mb sifz file rather quickly, which seems rather large as far as sifz files go. I suppose rendering each and every layer throughout the animation isn’t very efficient, which I guess is happening regardless due to merely turning opacity on and off for each looping group. Even though I can’t see them I assume the software still has to dedicate resources to checking each and every layer to say “yup don’t make this visible” multiply that to 3800 layers you aren’t using over hundreds of frames and its no wonder.

While I was typing this I tried clicking on groups and using “disable layer rendering”. Unfortunately I didn’t notice any improvement in performance. It italicizes the master group folder, but none of that group folder’s child layers. Is that working correctly? Am I using that wrong? I’d expect all the child layers to be italicized.

If push comes to shove I don’t see any reason why someone couldn’t split up the animation into multiple separate files, render the one second loops individually, and then smash them together in a third party video editor as they see fit. I was just hoping someone knew of yet another workaround within Synfig. It would be nice to have everything in one place.

What exactly do you want to loop and what do you want to change each cycle?

Depending on what you want, you can:

  1. loop only the parameters you need and animate the others how you want
  2. make use of Switch converter (and parameter linking) to choose when a parameter is looped or not
  3. make the general/base loop animation, bake the animation, (maybe cleanup a bit) and then animate the changes.

There may be other ways of course, but that’s what I see for now.