Animation Frame Sequences

I acknowledge this as a sort of addendum to Repeatable animation frames, and a potential way that an artist could repeat frames, reduce workload, possibly lessen resource issues related to animation, and overall increase productivity.

Imagine this animation, please excuse its rudimentary nature, however it exists to express concern over a flaw or flaws in the current animation system as it exists presently.

If I wanted to loop this 23 frame animation, for say, to sync to section of a song, I would have to copy and paste the frames over and over, vastly reducing performance, increasing instability, and just turning a manageable workflow into something that really isn’t.

An example of the animation of mine that was crippled by this flaw can be viewed in the spoiled link below (image limitations force me, and I don’t want to self-promote in something like this)

The issue arrives from when you have multiple frames you want to copy, in this animation every beat is 12 frames at 28fps, the clip ending at 383 for a perfect loop. A lot of the animation is a loop of the first 23 seconds, with additional frames like an Erase layer to remove the mouth to be replaced with more defined lip-syncing.

The idea I have in my head would be the capability to group Animation Frames together in a “Sequence” for the purpose of having it repeat or link to a prior (or future) frame. Therefore, any edit made to a Frame in a Sequence would then be attributed to the same frame in a different Sequence.

Say, I find an error in Frame 15, which gets repeated every 24 frames. Using the current system I would have to meticulously copy-paste the fixed frame on every 15th frame of the 24 frame sequence.
Under this supposed system, all I would have to do is fixed the error once and it would immediately carry over to every copy of that Sequence.

I don’t know the technical specifics as to how this system could be achieved, or if this would require a new Docker to be added, but if it was to necessitate a new docker in order to prevent visual clutter, I think employing a visual system akin to video editors would best fit the usecase and utilities of this system.

(imagine win10hi.gif is some sort of sequence of animation, and if we’re taking design ideas from Kdenlive, then we could also likely move the Import/Remove Audio to the Sequences tab?)

I believe, if designed properly, it could also reduce memory usage and performance, because instead of having 383 frames of copy-pasted and (at least to the system) unique frames, it could simply be a looping 23 frame sequence copy-pasted over and over again, giving Krita the valuable memory management knowledge necessary to know that the assets already exists and is likely cached somewhere in memory.

Rendering animations could be made rather complicated by this addition, and I apologize if I don’t know the extent of how much of an overhaul this change would possibly necessitate, but it could also make the render times of simpler longer looping animations (like ones typically done in sync with music) much faster if there was some way to only really having to worry about the diffs between the frames, in this example only really needing 23 frames + smaller scale frames for the diff, likely the ones similar to an optimized gif (difference).

Unoptimized Frame 11

Optimized "Frame 11", prioritizing the difference compared to the lower layer.

Left is an unoptimized frame & gif, Right is an optimized frame & gif

Unoptimized "win10hi.gif"
Optimized "win10hi.gif"

Not saying we need to use gifs, however I think we can look towards how some gifs handle difference and optimizations and see how we could use this in the Animation Rendering Process alongside the inclusion of Sequences could vastly improve the animation experience and possibly render times of certain projects.

I do hope this, or an inspired feature can be added to Krita’s system of Animation, likely being able to fix a lot of issues that exist with its current system. I appreciate the consideration and I appreciate everybody who took the time to read this request.

2 Likes

You can clone a range of frames (right-click → Clone Keyframes) and the paste them on the timeline (right-click → Paste Keyframes).
That does not consume any extra RAM, apart from a tiny amount for the reference pointer data.

If you then make a change to the original source frame, all cloned frames will be changed.
Also, if you make a change to a clone frame, all clones will be changed as well as the original source frame, so it’s a bi/multi-directional relationship.
If you Remove either a source keyframe or a clone keyframe, no other frames are affected.
If you select any keyframe so it is highlighted, it and all it’s associated frames (source or other clones) are also highlighted.

Honestly I feel like this could be remedied by allowing file layers be animated. Then you could animate your loop in one krita file, save it, then import it as a file layer in your larger krita composition. This was very useful when we would do work in Flash back in the days, they’d be called symbols.

I don’t necessarily believe that the connection between the two frames is apparent from a glance, and once again it can easily turn into an unmanageable mess once again if you want to say, adjust the timings of the whole animation.
Of course I think the Clone Keyframes system is good, it could still exist with improvements when it comes to large scale changes of a large piece of work.
“Sequences” could also be a good resource management tool, being able to cut-up harder animation work into far easier to consume chunks.

this just feels clunky, I’m sorry but having different files linked to one project doesn’t really fit my workflow.

You can provide an example, maybe for those animation softwares did have this Animation frame sequences features, and see the difference between them by screenshots from your own experience.

I think, OP had macromedia/adobe flash or nowadays referred to as adobe animate’s usage of symbols in mind. In flash/animate, you can do a movie clip (or graphic symbol) and drag it into another flash document creating reusable elements.