GSoC 2024: Sprucing up the Video Sequencer (Weekly Reports)

Hello! My name is John Swenson, and over the summer I’ll be working on various improvements to the video sequencer, including linked strips, preview snapping, and more.

I’ve already implemented a couple changes for VSE, including a patch for snapping to markers and a bugfix for scene strip wireframe display.

You can check out a first draft of the features at my original proposal.

I will also update the proposal going forward based on the community’s thoughts/concerns at this dedicated feedback thread.

I look forward to improving the VSE experience this summer!

15 Likes

May 27 - 31

This week I started on the patch for snapping in the preview, since Aras and I agreed that it’s the least ambiguous feature with respect to UI issues and so would be good to tackle first (still need to figure out a clear design for active channels, which can come later). So far I have UI done, and I’m currently drafting changes to the internals in as simple a manner as possible.

Also submitted a fix for preview overlay polling, which makes it more obvious that preview overlays are disabled for different display types and reorganizes the overlay menu a bit (building on Pablo’s changes)

6 Likes

June 3 - June 7

I’ve been continuing work on snapping for the VSE Preview, and made quite a bit of progress.
In the meantime, I’ve been finding and fixing a few bugs related to snapping:

I plan to land VSE preview snapping next week so that it can be tested before moving on to linked strips (which should be easier to implement)

6 Likes

June 10 - June 14

I have finished writing the code for preview snapping and submitted the patch for review: #122759 - Add snapping in VSE Preview - blender - Blender Projects
preview-snapping-ezgif.com-cut

Once a build is made, please give it a try and let me know what you think in the feedback thread.

18 Likes

June 17 - June 21

This week was mostly code review and changes to the preview snapping patch based on feedback.

I also started planning out a design for linked strips, and will likely have more updates on this in the coming weeks.

4 Likes

June 24 - 28

This week, while continuing linked strips progress, I found and fixed a number of bugs, improving retiming keys:

These fixes are all based on 4.2 and so should be included with the LTS version.

Linked strips functionality is nearly done and I expect to land it by next week.

6 Likes

July 1-5

A rough draft of linked strips is up! https://projects.blender.org/blender/blender/pulls/124333

linked-strips-f

The code is not yet ready for review, since there’s still some bugs with icon drawing (unrelated to the PR) that will have to be fixed. Versioning will also need to be updated and I’ll merge main into the branch once everything is tidied up.

Additionally, there are already a couple operators in VSE that use the term “linked” – bpy.ops.sequencer.select_linked() and bpy.ops.sequencer.select_linked_pick().

I’d like further feedback from people on this point-- could we rename the front-facing names for these operators something like “Select Adjacent” and “Select Adjacent Pick”? As I mention in my feedback thread, the ‘select linked’ operators for VSE don’t operate on any kind of linked data, and only select strips that are directly bordering one another on the same channel, so it’s a bit of a misnomer in this case, IMO.

But please give me your thoughts:

10 Likes

July 8 - 12

This week I couldn’t do nearly as much as I wanted to since I was traveling for most of the week. However, I still managed to get some bugs squashed:

Here’s a comparison for the handle selection of adjacent strips now, taken from second PR (in both gifs I am clicking rapidly while moving my mouse cursor across. I have “Tweak Handles” turned off in settings to better demonstrate the bug):

Before After

Also, the consensus is that options to “Link” and “Unlink” strips would clash with the preexisting “link” concept in Blender, so I will be using the terms “Connect” and “Disconnect” strips going forward for that deliverable. GSoC 2024: Sprucing up the Video Sequencer (Feedback) - #44 by fsiddi

10 Likes

July 15 - 19

I’ve submitted a fix for the “strip linked time” option for the sequencer tweak tool. This one’s been broken for a couple years, but it’s enabled in the default keymaps as a ctrl select.

That means that you can now once again use the control key to

  • Select all strips that have the same start and end point
  • Select all handles at the same time

like so:
linked-time

This is a little like “connected strips” behavior, but is a keymap-configurable option rather than a strip state. Connected strips won’t require a modifier key, will have an icon, and will support selecting offset strips together (e.g. audio slightly delayed or leading)

Connected Strips Update

Connected strips functionality is proving to be more involved than I expected it to be, since selection is quite complex and I want to make sure that the option works in all possible edge cases.
However, I continue to make steady progress towards completion. Will keep you all updated going forward.

16 Likes

July 22 - July 26

This week I got some more bugs fixed with substantial cleanup to retiming selection: #125468 - VSE: Cleanup retiming selection code - blender - Blender Projects

This means that retiming selection is properly hidden in all cases now.
Before:


After:

It also means that trying to toggle retiming keys with the tweak tool is fixed now.

Since I intend to build the connected strips PR off of this one, I’ll have to wait for this to land before I can publish connected strips for review. Still WIP at this point:

For now, I’d like some further input on connected strips:

  1. Now that the naming is different, what should the icon be (instead of a link)? (Maybe a question for UI people)
  2. Should menu operators also respect connected strips, e.g. select inverse, select linked, select side/side of frame? Or just tweak/box select tools?

Feel free to chime in at the dedicated feedback thread.

4 Likes

July 29 - August 2

Hello again everyone, sorry for the delay – I was unexpectedly left without internet connection for the past 4 days while traveling.

On the bright side:

Connected Strips Are Here

I’ve finished up connected strips functionality, and the patch is ready for review. Check it out: https://projects.blender.org/blender/blender/pulls/124333

Here’s a couple gifs demonstrating the functionality:
CON_import-cut-n-drag
Imported strips are connected by default (either via drag+drop or the Add menu). There is an option in the Add menu to turn off connections for newly imported strips.

CON_new_connect
Strips are disconnected from any existing connections before connecting to new ones.

CON_preview_select
Connected strips are selected together in the preview just like in the timeline.

Although I was fairly busy with travel for the past month, I’m now in a position to settle down and work longer hours, so hopefully “active channel” functionality will be out by the end of the month.

Thanks everyone for your patience.

14 Likes

August 5 - August 9

This week I responded to feedback for connected strips, fixing bugs and adding functionality: https://projects.blender.org/blender/blender/pulls/124333

  • Added keymap item: Ctrl+Alt+C by default to toggle connecting/disconnecting all selected strips
  • Added ability to toggle into individual strips by double-clicking, since shift toggle can be unintuitive if you’ve already got a selection
  • Added ability to modify individual strips within a chain without propagating the selection if you’re explicitly toggling them on (see explanation below)

single-selection-mode

Note the changed behavior: if you toggle individual strips, the “selection propagation” of connected strips will temporarily disable itself so that you can make whatever adjustments you like.

Then selecting any other strip in the chain re-enables selection propagation. This makes it easier to apply fine-grained control without having to constantly toggle connected strips on/off, and should provide more predictable results.

  • Moved option to connect strips by default to user preferences, since having it in the Add menu would also change drag+drop behavior, which was unintuitive
  • Ensure that strips always have bidirectional connections, and if this is not possible, sever them (e.g. when cutting, duplicating):

cut-one-way-links

  • Ensure connected strips are always added to metastrips together
  • Ensure fake keys are only generated for connected strips if their timeline frames are aligned
  • Add support for RCS keymap

Next week I hope to get started on some initial improvements for strip copy/pasting and adding – the start of “active channel” functionality.

10 Likes

Aug 12 - Aug 16

This week I made some more changes to connected strips based on feedback:

  • Removed double-click in favor of alt (option)+click to operate on individual strips.
    • This means that now you can tweak individual handles with just one click, instead of two clicks as before (double-click in, then move around). This keybind is also closer to industry standard, so it should be more intuitive for people who are used to other programs’ shortcuts.

Here’s a gif courtesy of Pablo showing how quick J and L cuts can be made with the new behavior:
pablo_demo
taken from here: https://projects.blender.org/blender/blender/pulls/124333#issuecomment-1273329

  • With alt+click, now toggle (shift) can be used to toggle on/off entire connected strip groups instead of individual strips.
    • This allows you to quickly extend your selection without having to select every individual connected strip.

Also:

12 Likes

Aug 19 - 23

This week I worked on creating a final write-up for the work I’ve done this summer. I figured it’d be a good opportunity for me to finally figure out how to create a blog/website to host the result so I spent most of the week getting acquainted with Go and Hugo.

The final report : My Summer With the Blender Video Sequencer | Akashic Highway

Future Plans

Although I fixed way more bugs than I set out to at the start of the summer, I still haven’t tackled the “active channel” functionality that I outlined in my original proposal.

But the end of GSoC 2024 doesn’t mark the end of my contributions and I still intend to continue working on VSE for the foreseeable future. Going forward, I’ll probably post updates on my new site (custom domain pending) or in this thread. Hopefully Blender VSE can be adopted by a much wider audience – that’s my goal.

Thank you to Aras for the incredible work you’ve done for VSE over the summer that’s inspired me to give my 100% and thank you to Ton and Francesco and Sergey and Richard and Pablo and Sebastian and all the rest for maintaining such a forward-thinking, incredible piece of software.

preview-snapping

CON_import-cut-n-drag

24 Likes