Orders of operation in the "Speed" and "Time Offset" parameters

Hey it’s me again.

This is a problem that may just as well fall under the “Animation related help” or “Feature discussions” subforums, but I’ve decided to post it here.

I’m basically trying to do a little lip-syncing, so I want to delay an animation until I need it and match its speed to how long I speak for. I’ve quickly figured out that I want to do this with the “Speed” and “Time Offset” parameters. No problems so far.

My first animation is supposed to take place at frame 12 and last for 14 frames. The constituent animation is 120 frames long, so I’ve set “Speed” to 8.6 (120/14 = 8.6). The problem comes when I change the “Time Offset” parameter to what I think it should be: -12f. I want the animation to play 12 frames later than it starts within the group layer, so logically, I want to set it to -12, right?

Nope. Synfig’s Time Offset parameter is affected first by the Speed parameter. To get the result I’m looking for, I need to set it to -102.9f (12*120/14 = 102.9).

We can look at this mathematically. My intuition says that the new frames (t) in terms of the old frames (u), the Speed (S), and the Time Offset (O) should be:

t = u/S - O

Instead, it’s:

t = (u - O)/S

Now, with Synfig being so far in development, I imagine it’s too late to change this convention and upset the animations of all users who have implemented both Speed and Time Offset, but perhaps one solution would be to introduce a Boolean parameter corresponding to which operation takes precedence. Until that time (or if no one wishes to implement that option), is there a workaround for this minor problem? I’ve converted Time Offset to a scaled parameter and exported Speed and then connected it to the scalar, but that seems inelegant-- I’d rather just use my calculator.

Have you tried to set the speed in a Group and the time offset in other group that encapsulates the previous?
Possibly this way you separate both effects.

Ah, that’s a great idea! I’ll consider using it in the long term, although my project is a little group-heavy and I might find the creation of yet more groups a bit difficult to navigate. Still, I think that’s going to be the way to go. Thanks!

You can make use of the Sets to efficiently select inner group of layers.