Konstantin's weekly report #24

Hello, everyone! My weekly report is delayed, but here. :slight_smile:

Last week Ivan have started doing a real code for Frame-By-Frame animation feature (a priority of this month).
Our short plan is:

  • Allow user to paint on imported bitmap images right inside of Synfig. We also want to have a possibility to choose brushes and pressure-sensitivity - the same way, like you do in MyPaint. In fact I would like to have Mypaint brushes in Synfig. :slight_smile: So, it’s not a surprise, we decided to use MyPaint’s brushlib as the brush engine.
  • The imported image layers will become a grouped automatically when you import them. Most probably we will introduce a special group type, which will have its content limited to Image Layers only. This group will play a role of Bitmap Canvas, which you can paint on. It will automaticaly modify the Image Layer inside - for example, if you will get out of bounds it should extend the image and correct the Image Layer dimensions automatically. That way you could have infinite canvas feel.
  • Next, we need to allow this special group layer to store multiple images, which will represent a bitmap keyframes (please don’t confuse with “keyframes” of Synfig). The group will display only one image at time, and we need to add functionality to switch displayed image. Most probably the Z-range switch won’t fit here, because reordering the image layers will mess up the animation sequence (alternatively, we can forbid image reordering inside of such group).
  • Finally, introduce an UI to easily add new image layers to the group at specific moments of time. Some Flash-like keybindings (like F6) would be nice.

This is just a rough roadmap and it is might be a subject to change. At the moment Ivan is busy on integrating brushlib into Synfig. As usual, it’s hard to show something impressive at the early stages of implementation, so please be patient. :slight_smile:

Other news of the week:

Other non-code news:

That’s all. Till the next week.


Is it really necessary to have a “special group type”?

Why not have a normal layer with a the list parameter? lets call it “Frame-by-frame Layer”.

Each entry on the list could have a time value and the path to the image. Using that info the layer could show the right image at the right time, no need to have individual Image Layers for individual frames.

And this is why I feel uneasy about this “special group layer”. It has too many special cases and conditions. It’s almost not a group layer at all.

If using the transformation widget is desired then the transformation parameter (and thus the handle) can be added to the “Frame-by-frame Layer”. If per-frame transformation is needed then a transform parameter can be added to the individual entries on the list of frames.

I don’t see the need to have individual frames as Image Layers inside a special group layer. I mean, none of the things that one can normally do with other layers would apply to that group layer. It would conflict with the user’s expectation of what can be done with layers.

Inserting new entries into the the list parameter would allow this. Just need to find the point on the list to do the insertion (by comparing the time value of each entry with the time value of the new entry).

Sorry if I sound a bit rude, it’s just that introducing new special cases should be avoided when possible. Because before you know it we end up having 5 different types of group layers, each with their own set of special rules. :unamused:

Hi, Yoyobuae!
I have read carefully your concerns. Still, my practical intuition tells me that keframes of frame-by-frame animation should be represented as individual layers. That will make them much easier to manage and much more flexible. For example, it will be easy to copy a frame from one frame-by-frame sequence to another.

How about using waypoints.

One frame = one waypoint

Then the timetrack panel can be used to easily visualize all the frames and their respective positions in time. The “Frame-by-frame” layer would have a parameter “Image Sequence” which will contain all of the frames as waypoints.

Waypoints can be dragged, duplicated, etc. They are still missing copy/paste functionality, but it should be possible to implement it.

Interpolation probably doesn’t make sense for images so constant waypoint behavior could be used.

EDIT: Another idea. The Graph panel (or a new panel type) could show the image sequence in “comic strip” style (like TV Paint Animation, at the bottom of UI) when the image sequence parameter is selected.

This is exactly how it’s planned to be implemented. Switch group have parameter that indicates which child layer is displayed. Changes of this parameter represented on the timeline by waypoints. Child layers are images (theoretically I suppose there could be ANY type of layer, which opens the possibility to use same approach for vector frame-by-frame animation).

It will then also be a more direct way than z-range visibility to do switch layer animation in cut-out. I like this approach.

Then some sort of synchronization will be needed between the waypoints on the Switch Group and the layers it contains:

  • If I copy&paste or duplicate some layers inside the Switch Group, which waypoints will correspond with these new layers?
  • If I duplicate a waypoint (or duplicate a keyframe), which layer will correspond to the new waypoint?
  • If I reorder a waypoint, will corresponding layers be reordered as well?
  • If I reorder layers, will corresponding waypoints be reordered as well?

It’s probably doable, it just will require some care to make sure waypoints and child layers stay on sync.