[WIP] VSE Quick functions - Snaps, Fades, Zoom, Parenting, Titling, Play speed

This is amazing work. Thank you Snu

Wow amazing! I was just looking for a way to ripple edit, and this is brilliant! I might have missed it in all the comments, but is there a way to make an imported image, that isn’t the exact same aspect ratio fill the screen, either outside or inside, but keeping the aspect ratio?

  • The first image below is what it looks like, it’s streched horizontally almost 50%.
  • The second one could be one option, where it fills the width, but I lose some of the image above/below.
  • The third one contains the entire image, with black bars on the sides

I’d like this for my story board images, that are random sizes, but I’d like them as big as possible, but not stretched as they are now. Sorry if this is totally outside the scope of this awesome script, but just wanted to ask… :slight_smile:

Blenders VSE will always stretch to fit (vertical and horizontal. If you turn on crop then you’ll loose parts of the image that exceed the project dimensions. To use a strip you’ll need a transform effect that repairs the ratio difference between source dimensions and project dimensions. Sadly theres no auto function, just a little math. Look at your strip properties for original dimensions.

Version 0.92 is now available.
Added a new panels: QuickCuts and QuickTags.
Also, QuickList is a lot nicer looking now, and more useful I think.

QuickCuts provides a simple interface with some cutting operations like trimming left/right, ripple cut/delete, and even uncut to undo a cut. It also has some buttons for automatically setting up the timeline. See the wiki documentation for more details on each function.

QuickTags implements metatags for sequences, you can add text snippets to sequences, and select strips by tags. Tags can also be shown in the QuickList panel. I dont use this much, so if any of you find this useful, please give me some feedback on it!

A full list of changes:
Added QuickTags for adding metadata text tags to strips
Reworked QuickList interface
Added reverse sorting in QuickList
Added ability to switch strip with previous/next in QuickList
Revamped QuickMarkers UI, also adding a marker over a current marker will now rename the current marker
Added QuickCuts, a panel and menu for specialized cutting operations and easy timeline adjustments
More code cleanup and documentation of functions and classes
Reworked frame skipping, can now play in reverse when active, and should work better with slow playback

Great work here! Have you considered suggesting your VSE functions for Blender 2.79? https://blenderartists.org/forum/showthread.php?416155-Best-Addons-ever-that-should-be-in-2-79/page3

Sorry about the lack of updates for so long, I have been very busy with work for the past year, working on a huge movie project, but its now winding down and I have some time to work on other things, so…

New version, huge update! Probably the biggest update since the first release.
Many new additions such as a three point editing workflow, right click context menus, cursor following, new ripple editing features, and graphic overlays to convey more information (see parenting and fade in/out now in the timeline!).

The way the script works has been changed quite a bit, it now ‘wraps’ many of blender’s functionality, which is much more reliable than the old way it worked (monitor everything for changes and hope to be able to figure out what just happened).

I think with these improvements, it may finally be ready to be submitted to the blender addon repository.

Just a warning tho, with such a huge update and so many things changed, there may be bugs!

The script and documentation are now on GitHub too, keep up on the latest changes if you like.

Full changelog for 0.93:

  • Added seconds offset and seconds position display to edit panel
  • Added ‘compact’ edit strip panel, displays more information in a smaller space than the original
  • Added categories to panels
  • Implemented new function wrappers, many features should now be more reliable, and new small features are added
    • New ‘Grab’ operator - parenting and ripple features are reliable now, press ‘Alt’ to toggle ripple mode
    • New ‘Select’ operator - can now right-click-drag multiple files
    • New ‘Cut’ operator - parenting and ripple is now properly handled
    • New ‘Delete’ operator - can ripple delete, and can remove children, New ripple delete shortcut - Alt-Delete and Alt-X
    • New ‘Meta Make’ operator - automatically adds child strips to new metastrip
    • New strip importer operator - has some new features and will auto-parent and auto-generate proxies
  • Replaced the sequencer Strip and Add menus so they can use the custom operators, also new option to simplify strip menu by removing some items
  • New ripple cut shortcuts - Alt-K will ripple trim the strip based on which side the mouse is on
  • Minimized continuous function handler, only needs to detect new strips and renames now
  • Implemented graphic display of fades and parent/child relationships of the active strip
  • Cursor following is back, works properly at all zoom levels now!
  • Implemented Quick3Point - a basic 3point editing workflow, import from the file browser to the clip editor, then to the sequencer.
  • Auto-Set Timeline Operator - move strips up to frame 1, set timeline start to frame 1, set timeline end to last frame of last strip
  • The new cut operator now fixes effect sequence chains - it will duplicate single input effects (such as speed control) to the newly cut sequence, and it will fix crossfades that should be applied to the right cut sequence. See https://developer.blender.org/T50877 for more info on the bug.
  • Now can save and recall zoom levels in the vse. No way to do vertical (channel) zooms yet tho…
  • Right-click context menu option added, hold right click to activate it. Options will differ depending on what is clicked on - cursor, sequence, sequence handles, markers, empty area

Thank you for this comprehensive VSE add-on!

With all the “real-time” strip manipulation like parent/child, have you considered a preview feedback mode where you ex. can see the current last/first frame when ex. trimming or sliding a strip? Something like this?
(The play-head is automatically placed on the current trim frame.)

nice feature idea! it would be easy to implement, but right now a bug in blender would cause some issues when the user cancels the grab:

that bug is fixed in blender 2.8 tho, so ill add this feature as an option when i update my script for 2.8.

Thank you! (Maybe you recognize the script in my video - it’s your script - I just added one line for testing the feature).

Mentioning 2.8 I feel that playback fps is much lover of video files compared to 2.79, do you get the same low fps?

Ive not tried 2.8 much: i loaded it up, discovered that none of my scripts worked, looked into updating them, was told ‘dont worry about it until it is in beta’, so im waiting on that…

i wouldnt worry too much about poor performance yet tho, it might just be due to unoptomized builds, or optimizations that are not implemented yet, or it could just be the version of ffmpeg they included.

1 Like

Been testing your script a bit, and I must say it is very impressive the amount of advanced function you have managed to squeeze in there. I really like the context sensitive pop up menus when right click and hold.

I noticed in your notes that you wanted to add export for Reaper. I don’t have Reaper and never used it, but apparently, the only kind of EDL Reaper supports is Sony Vegas EDL, which isn’t supported anywhere else. However, when I was working with cmx 3600 edl files I came across a Reaper friendly EDL sample here: https://forum.videohelp.com/threads/321056-EDL-File-Format
Direct file link: https://forum.videohelp.com/attachments/1899-1274261281/Vegas%20EDL%20Samples.zip

I’ve already coded a Blender cmx 3600 EDL exporter here: https://github.com/tin2tin/ExportEDL

Feel free to use it as a stepping stone for coding a Blender to Reaper exporter.

[Alternatively I just noticed that pyaaf is now beeing rewritten to pure python, and may be directly integrated with Blender so a Blender to AAF(which I believe Reaper supports & all other professional tools): https://github.com/markreidvfx/pyaaf2 ]

Unfortunately, it seems reaper doesnt support AAF and probably wont, the developers cite complexity of the format and possible licensing issues as the reason for not supporting it.
There is the possibility of converting the exported AAF to something else, but im not sure if that is accurate or not.

I thought about adding a function to your script, but it seems the edl format reaper uses is less limited than the one you are exporting to (no limit of number of tracks, video files can be in any track) so it might actually be a lot easier to implement (wouldn’t need the interface, could just use the export menu).

AAF is the standard file format for getting files from Avid to Pro Tools. Too bad with AAF and Reaper. Same situation with Ardour-devs and AAF, however there is a Blender to Ardour export script: http://blendervelvets.org/en/blue-velvet/

Yes, the cmx 3600 EDL format is very limited, especially combined with the audio import limitations of Resolve. If one at some point should write a proper Blender to Resolve script fcpxml would be a better format.

Just tested out the QuickThreePoint, and I like it. Just need a few more enhancements.

  • Would be good if I can type in/specify the in/out frame values as well, since I tend to edit long clips (like 1 hr clips), and so dragging the in/out points won’t be so accurate.
  • Would be good if shortcut keys can be implemented for in/out points. Like I for In point and O for Out point.
  • Would be good if I can drag the playhead in the clip editor while setting In/Out. That way, I will then be able to use shortcut keys I and O to set the In/Out points respectively as well.
  • Would be good if QuickThreePoint can be implemented for audio files as well (but I guess it’ll be difficult since audio files cannot be opened in clip editor).

Otherwise, it’s looking good so far. Keep up the good work!

David Mcsween told me about the ghost button - also called the frame overlay function: https://docs.blender.org/manual/en/dev/editors/vse/preview/introduction.html

It allows one sequencer preview to be a one place in the timeline and another sequencer preview to be at an offset frame. This way it would be possible to view the last frame of the first clip to the left and the first frame of the second clip to the right when trimming.

And in theory it should be possible:

I wanted to try it out, the same way I did above with the instant preview when trimming, but I realized that the “continuous” functions in VSE Quick Functions have either been moved or removed? What has happened to those functions(running in modal mode)? Do you think this theory will work or not?

An interesting idea, and it would be possible to implement this by adding to the VSEQFGrabAdd operator. There are a couple problems with it tho:

  1. the vse layout cannot be assumed to have multiple previews open, and without that the function wouldn’t work…
  2. If the vse layout were to be auto-reconfigured to display this, there are some limitations to what is possible in python. For instance, I have not figured out how to view or set the zoom position in the preview areas.
  3. when would this feature be activated? when two edges are selected and no other sequences are between them? what if they arent on the same channel? it is difficult to detect, but not impossible.

in truth, 1 and 2 could be ignored i suppose - the script would only activate if two previews were open, then it would essentially just be a advanced hidden feature. Still tho, coding the algorithm to detect the selected edges wont be easy.

As for the removal of the continuous function - the old function was essentially keeping track of all sequences in the vse, checking for differences constantly, and doing things if something changed. This was pretty resource-hungry, and it would slow down the vse even if the user was doing nothing at all. Also, it had to guess on some stuff that was ambiguous…

I have now implemented most of the features as operator ‘wrappers’ that replace a built-in function (such as the ‘grab’), do what is needed, then call the original function. This is a lot more efficient, and 100% reliable.
The one downside: some stuff cant be detected this way (such as renaming of a sequence).

In truth tho, the continuous function is still there, tho now it just checks for renames and new sequences. And even this might go away in 2.8… they are planning on removing the handler that continuous depends on, and there is no reliable replacement… see: https://developer.blender.org/T47811

This would completely break parenting on a rename, prevent quickproxy from working a lot of the time, prevent autoparenting for drag-n-drop files, and prevent the snap to end of new sequences option.

Uh, I hope they will find a way to replace it with more specific handlers, so it will be less resource hungry to detect UI changes. Somewhere I read that one of the major problems with having the modal detection running was that it made Blender unable to do temp backups. Maybe that could be solved another way than completely removing it? But that said, I feel your pain. I see your remark about the issue(and other peoples), and no reply…

Anyway, the biggest problem with previewing trimming is properly the slow preview update speed.

Maybe it could be set-up as a trimming mode, activated by hitting a key or button.
Which will make the playhead jump to the nearest cut. If it is the beginning of a cut, then check if there are any non-audio strips on the previous frame, and if it is the last frame of a strip, then do the opposite. If there are any visual-strip on the offset-frame then split the preview area(just need one) in two vertically(bpy.ops.screen. area_split ( direction=‘VERTICAL’ , factor=0.5 , mouse_x=-100 , mouse_y=-100 )) and set-up the overlay frame mode(one player: reference and the other: current and -1 frame offset) in the preview areas.

Then using the mouse or your new excellent nudging/playback controls the user will find the precise frame to trim i/o. Then like “grab” - left mouse/Esc: cancel - right mouse/Enter: accept changes - the trim mode will be closed and the preview area will merge back into one in its original size.

On the centering, I don’t know if this script might have some useful elements, it is for converting the 3d view into a camera, which is centered and scaled - like new video preview if that was what you meant? https://gist.github.com/tin2tin/b95fa8686db3a03565f9064b692c71d5

But as I wrote, in the beginning, the Blender video previewing code may not be fast enough for this operation anyway, so most of all I’m just curious about how it would work, though I’m a bit skeptic, about it actually would be useable(fast enough).

Wow! This add on is just unbelievable!
Is compatibility with Blender 2.80 in the plans?

I’ve been working on a 2.8 port, you can get the 2.8 branch on github at

No guarantee it will work with each version tho, the 2.8 betas have broken it several times since I’ve been working on it.

1 Like

Super glad you are still working on this…
Thanks man.