Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[enhancement] copy multiple frames at a time #575

Closed
sshipway opened this issue Nov 19, 2016 · 18 comments
Closed

[enhancement] copy multiple frames at a time #575

sshipway opened this issue Nov 19, 2016 · 18 comments

Comments

@sshipway
Copy link

Currently, it seems only possible to duplicate a single frame in a layer. When you have a sequence that you want to repeat, it is annoying to have to copy each one in turn. It would be much easier to be able to highlight a range, and then duplicate them all in one go.

I'm not exactly sure how this would work in the UI -- maybe a 4th button 'duplicate multiple' ? Maybe have the 'duplicate' button advance you to the frame after the copied frame, rather than move you to the newly created duplicate (so that the button can be clicked multiple times to copy a sequence)?

@Jose-Moreno
Copy link
Member

@sshipway Hi! I totally agree with you. We surely need a way to copy / paste and duplicate multiple frames at any given time. I think we could use the same "duplicate frame" button react different when you have more than one frame selected.

The thing is that right now it seems when you use the duplicate button you will duplicate the current frame (the one the playback head is over) and the duplicate will populate in the next empty frame space.

However It would be better to implement a different system for duplicating frames. I'm a fan of how TVPaint and Flash did it, which is "instancing" the keyframe itself to allow for exposure (cloned frames) to be increased or decreased. Also copy / pasting a range of frames effortlessly with CTRL + C / CTRL + V or ALT + Dragging the selection which allows for precision when placing the frames on the timeline.

@Kaikogf
Copy link

Kaikogf commented Aug 26, 2017

@candyface
It seems the same topic as #2 (?)
If so you may close the other 👍

Thank you

@Jose-Moreno Jose-Moreno added the Hacktoberfest In support of Digital Ocean's yearly open source event running from Oct 1st - Oct 31st. label Sep 30, 2018
@davidlamhauge
Copy link
Contributor

I would like to work on this issue. Please.

@Jose-Moreno Jose-Moreno added this to the hacktoberfest milestone Sep 30, 2018
@chchwy
Copy link
Member

chchwy commented Sep 30, 2018

@davidlamhauge please go ahead.

@Jose-Moreno
Copy link
Member

Note: I'd like to ask that the copy / paste implementation allows the copied keyframes to be pasted to other layers different from the active layer, but of similar type e.g bitmap to bitmap, vector to vector, sound to sound, etc) And if possible the interface would allow us to select the layer similarly to the movie export dialog where you can select different camera layers if there's more than one.

@davidlamhauge
Copy link
Contributor

I'll see what I can do, Jose

@davidlamhauge
Copy link
Contributor

I intend to make a dialog where you can 1) Copy, 2) Move or 3) Delete a range of frames.
If the range-box is selected in the timeline, then this range will be suggested in the editable spinBox'es. If not it will be frame 1 and 2, and then you must define the range yourself.
What do you think? Is this ok with you?

@Jose-Moreno
Copy link
Member

@davidlamhauge It think it sounds excellent 🙂 thank you for considering my inquiry on your implementation and for sharing your possible solutions!

@sshipway
Copy link
Author

sshipway commented Oct 1, 2018

If I may make a suggestion (and make your job harder), how about also allowing the selected frames to be pasted in reverse order? This would allow you to easily paste a reverse sequence. I'm not sure how you'd manage this - if you would paste (a-gap-b-c) as (c-b-gap-a) or as (c-b-a-gap) - but probably the latter in order to make reversing a sequence display as expected.

@davidlamhauge
Copy link
Contributor

I can't see the use of such a feature, unless you animate a pendulum, but I would paste it like ordered. That is the content of last frame (if any) first. Then second last, third last and so on.
Is there another way to understand "reverse order"?

@sshipway
Copy link
Author

sshipway commented Oct 1, 2018

@davidlamhauge - I'm thinking about animations where you have something moving back and forth in one layer - eg, mouth opening, hand waving, door open/close, etc. I wouldn't say this was an essential feature, but might be useful to some users if not too onerous to add.
When reversing, the question is how to handle gaps in a string of frames (i.e. where a single frame is displayed for an extended time, as pencil allows this). Would you preserve the gaps (treating them as frames), or treat the gap as an extension of the frame that precedes it in the original sequence?

@davidlamhauge
Copy link
Contributor

davidlamhauge commented Oct 2, 2018

@sshipway - Since I have no way to know what your intentions are with your animation, I can only interpret 'reverse' as 'reverse'.
So - if you have a 20 frames range that you want to reverse, and frames are like this (with 'b' as 'blank'):
1-b-b-b-b-b-b-b-9-b-11-b-b-b-b-b-17-b-19-b
Then I would reverse it like this:
b-19-b-17-b-b-b-b-b-11-b-9-b-b-b-b-b-b-b-1
To me, this is reversing a range.
In the dialog there are going to be several boxes where you define the range, and can chose where to put the first frame when you copy, move or reverse a range of frames. Maybe you can get your intended timing there. If you want your timing to be: ...17-b-19-b-17-b-b-b-b-b-11-..., you could define the range as 1-17, and have it pasted from frame 21. That would give the wanted timing. but I can't have any idea of what you want, so I will reverse if you want a reverse.

@Jose-Moreno
Copy link
Member

@sshipway @davidlamhauge Actually I just filed in an issue specifically for having a reverse keyframe operator #1081

It is as you have described it David, reversing /mirroring the drawings or as you put it, reversing the range, will help create a backward flow of the motion.

For illustration purposes here's a very quick video on what such feature does in After Effects https://www.youtube.com/watch?v=j6xKMkKcJlU

@davidlamhauge
Copy link
Contributor

@Jose-Moreno and others: Are there any objections, if I integrate the 'reverse'-feature in the dialog as well?

@MrStevns
Copy link
Member

MrStevns commented Oct 3, 2018

I'd say it comes down to how "complex" the dialog has become at that point. If the feature has no relation to copying frames, it should be it's own dialog but I'd like to see what the dialog would look like first. The more we cramp into that dialog, the better we'll have to explain each feature in the UI.

@Jose-Moreno
Copy link
Member

Jose-Moreno commented Oct 3, 2018

@davidlamhauge I'm not opposed to it and as a user I wouldn't have an issue with it as long as it works, but I agree with @candyface that we should review if the functionality itself is consistent and clear for the end user while being part of the multi-frame copy dialog.

If you already have the reverse order functionality implemented we have to consider that either you are copying the frames and pasting them in reverse order, or you are "ordering" the frames that are already positioned on the timeline.

If it's the former approach, then it would certainly be different from the Idea proposal I linked, and would probably be OK to come as part of this multi-frame copy dialog. The other proposal can be edited as a UX enhancement instead or something.

Otherwise since "reversing frames" is a very specific behavior that allows you to re-order the selected keyframes, this doesn't necessarily mean it has to occur during copying+pasting operations or subject to the range, so a more direct approach would be to use the selected keyframes identifiers to physically exchange their absolute frame position. Since it's a very straightforward operation meant to speed up workflow it could be kept as a separate command to remove the need to use a dialog; a shortcut and a menu entry would do just fine. Also if you separate it there would be the benefit of having a third pull request count for Hacktoberfest 😉

Edit: To me the choice is up to you, but it would be great If we could have a nightly build to test all of these features before doing a merge to master.

@davidlamhauge
Copy link
Contributor

I have designed the dialog to be easy to understand and use, but it's not for me to decide if I succeeded in this task.
Let's see. It will be ready within the next days.

@davidlamhauge davidlamhauge self-assigned this Sep 29, 2019
@Jose-Moreno Jose-Moreno removed the Hacktoberfest In support of Digital Ocean's yearly open source event running from Oct 1st - Oct 31st. label Sep 29, 2019
@J5lx
Copy link
Member

J5lx commented Sep 24, 2021

Resolved via #1343

@J5lx J5lx closed this as completed Sep 24, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants