Moving Keyframes

Hi, I have a hypothetical question. If i was working with a complex animation and wanted to increase the length of one action by 2 or 3 frames is their a way I can make it so that all the keyframes ahead of the movement gain 2-3 frames simultaneously rather than having to do them all individually?

Yes there is.
Keyframes has two values in its panel. Time (T) and Length (L).
The first value defines the position of the keyframe and the second the distance from the keyframe to the next keyframe. If there is not next keyframe the length is always zero.
Say you have 5 keyframes:

A: T=20f L=2f
B: T=22f L=2f
C: T=24f L=2f
D: T=26f L=4f
E: T=30f L=0f

If you want to increase the duration of the transition from pose B to pose C in say 3 frames then you have to modify the B’s length from 2f to 5f.

A: T=20f L=2f
B: T=22f L=5f
C: T=27f L=2f
D: T=29f L=4f
E: T=33f L=0f

Then you notice that the Time values of the keyframes C, D and E has changed. It is due that the position of a keyframe depends on the duration of the previous keyframe.

On the other hand if you modify the time of a keyframe using the keyframe’s panel the effect is different. You increase the length of the previous keyframe and decrease the keyframe’s length the difference of the old and new times. In the example the B’s time is modified

A: T=20f L=2f
B: T=22f L=2f
C: T=24f L=2f
D: T=26f L=4f
E: T=30f L=0f
A: T=20f L=3f
B: T=23f L=1f
C: T=24f L=2f
D: T=26f L=4f
E: T=30f L=0f

All this has some limitations:
Keyframe’s length cannot be 0f (except the last one)
Two keyframe’s can’t have same time (which is equivalent to the previous premise)

The modifications of the Time and the Length of keyframes can be done with the mouse over the keyframe widget (horizontal bar over the Time rule)
Simple click and drag modifies the keyframe’s time.
ALT-click and drag modifies the previous keyframe’s length. So you cannot ALT-drag the first keyframe.
In case you need to shift all the keyframes’s time you should add another keyframe before the first one and increase its length.

I hope it helped.

Finally if you want to contribute to the Synfig Project, please incorporate this question and answer to the wiki’s FAQs or the keyframe’s wiki page.


Thank you very much that’s awesome. What’s also awesome is that i just realized Synfig can do symbol swapping through the paste canvas layer which blew my brains out of my skull and I’m trying to wrap by busted head around it so what I want to know is could i place all of my “symbols” in a canvas than import them into another canvas basically a bunch of exported canvases in an exported canvas connected to the root file, and also if the above is possible which canvas should i animate them in the exported or the root I’m still fuzzy on the hierarchy.

I’m fuzzed too :mrgreen:

Let me clarify a little bit about exported canvases:
A Paste Canvas layer holds a canvas parameter that is effectively a canvas instance. But it is special. It inherits many aspects from the parent canvas it belongs to (root or not). For example the frame rate as well as the dimensions are taken from the parent canvas.
When you export the canvas parameter you really create a new canvas inside the parent canvas. It has all the same features than a normal canvas and many of its features must be changed inside its own scope (that is, you need to open the exported canvas in its own window and there, you have access to the canvas parameters using the same paths that you use for the root canvas - via the Edit->Properties).
When the file is saved, the exported canvas is fully saved under its exported name.

Once exported, a canvas can be displayed inside its own document (the sifz document where it was created) or by other file.
To display an exported canvas in its own file you just need to create an empty Paste Canvas layer and click to edit the canvas parameter. It should show you the exported canvas name in a drop down list. Select it and that’s all.
To display an exported canvas in another document you have to explicitly tell the full path to the canvas. The syntax for the canvases is explained here.

Said that, you can animate your “symbols” the way you want. For example you can create a document called Richy-mouths.sifz where you store many exported versions of mouths of Richy. Then later, in another file you just need to create a Paste Canvas layer and modify its parameter to point to the correct exported canvas from Richy-mouths.sifz.
Also you have to remember that you can animate the canvas parameter of the Paste Canvas layer like any other parameter.

There is only one limitation. You cannot modify the exported canvas’s layers unless you have the exported canvas or the file that holds it opened. Synfig Studio must be able to save to file the changes you do and so you need to open it.

From that, the possibilities are infinite.

I hope it helped.

That’s awesome, so, if i follow you correctly, when i export a canvas I’m essentially moving the layers enclosed into the canvas to another file and the paste canvas is simply showing them like if i used a blank canvas. Does this mean that i could actually switch out one exported canvas with another and am not limited to just what i exported? Also just to be sure i understood correctly I can actually use canvases that I haven’t even imported as long as i know the file path, and if that is correct is there any advantage to actually importing at all or is that just to make it easier for noobs such as myself?
The only flaw in synfigs design I can see here would be in that with all those canvases it could be difficult or tedious to see how they all connect to the main root file when working on the others. Is there a way we can see an onion skin of the root file while working on one of the exported canvases separate panels. or if not can we expect something like that in a future implantation. Still that’s amazing it never even occurred to me syn fig was capable of symbol swapping till recently.

The paste canvas parameter can point to a exported canvas (in the current document or from other document/file) or to the root canvas of an external file.
Import an external file using File->Import is exactly the same than create a new Paste Canvas and modify the canvas parameter to point to the external file.

The canvas browsing for external files must be improved a lot and so, when the user calls the “Import” command from menu, it should offer the file to import as well as any possible inner exported canvas in that file. That would make things easier for user experience. Unfortunately it is not yet coded.

Thank You, this will be of great help. Good luck with future updates, you guys are awesome.