GSoC 2024 Draft: Sequencer Improvements (SBDaule)

Title: Sequencer Improvements

Author: Shubham Balasaheb Daule (aka SBDaule)

Synopsis

This project focuses on enhancing Blender’s Sequencer. The goal is to improve
workflow efficiency and user experience through practical enhancements. I plan
to implement “Strip Linking” capabilities, adding snapping to the preview region
of the sequencer, and making channel positioning of strip when adding and
pasting more intuitive and predictable for the user.

Benefits

The project will benefit users who use Blender for video editing. This will
improve the experience by addressing major pain points i.e. having to manually
select both the audio and video strips separately and having to manually enter
position when working with multiple video streams in same frame.

Deliverables

  • Introduce the ability to link strips in the sequencer to a parent strip.
  • Snapping in preview region of the sequencer.

Project Details

Strip Linking

  • Introduce the ability to link strips in the sequencer to a parent strip.
  • Designate one strip as the parent, with other strips as children.
  • Child strip positioning determined by offsets from the parent strip, both in
    channel and time.
  • Importing video will automatically link all the imported strips, with the
    first video stream often serving as the parent.
  • Visual indication: When one linked strip is selected, the others can be
    highlighted in a distinct color (e.g., blue).
  • User can select multiple strips and then link them together from right click
    context menu. The one select last will act as parent.
  • User can select already linked strips and select to unlink current strip or
    unlink all linked strips from right click context menu.

Tool behaviour:

  • I have two alternatives for the tool behaviour, further discussion is needed
    to finalize the behaviour:
  1. Tools will behave same irrespective of weather parent or child is selected.
    1. Cutting a strip affects all linked strips, maintaining consistent
      parent-child relationships on both sides of the cut.
    2. Retiming and transformations information among linked strips will be
      shared. When linking strips, we can discard information from strips other
      than the parent strip and warn user about possibly destructive action, or
      prompt users to select which strip’s information to persist.
  2. Tools will behave differently depending on weather parent or child is
    selected.
    1. Cut Tool:

      • Parent Strip: When applying a cut to the parent strip, all
        child strips are also cut at the same timestamp.
      • Child Strip Behaviour: Applying “Cut” on child strip will only cut
        that child strip. Both resulting parts from the cut remain linked to
        the original parent strip, with adjusted offsets.
    2. Transformations:

      • Parent Strip: Applying transformations to the parent strip
        propagates to its child strips.
      • Child Strip: Applying transformations solely to a child
        strip affects only that strip, with adjustments being additive
        to those of the parent.
      • Note: When the strips are unlinked, then the visual appearance of
        the child strip will change. We can add option like “Copy transforms
        and unlink” that will make new transformations by applying
        transformations of child on top of the parent transformations and use
        these new transformations for the child after unlinking, although it
        might be very complex to implement (particularly when the properties are
        keyframed.) Or alternatively, we can add transform effect strip for
        this. Further discussion on this is needed.

Snapping support for preview region of the Sequencer.

  • Currently when moving things in preview region, there is no support for
    snapping.

202.02.01.Snapping

Proposed snap options

  • The following options can be added to the snap options, the options will be
    presented in box similar to one shown in (Figure 1).

  • Snap:

    • [ ] Frame Edges
    • [ ] Frame Center
  • Snap to:

    • [ ] Frame edges
    • [ ] Frame Center
    • [ ] Viewport edges
    • [ ] Viewport Center
  • Include frames:

    • [ ] Include frames not currently in view

Channel of newly added strips

  • The current method of channel selection might not be very intuitive for some
    users. So the goal is to find and implement a method that most of the user
    will find predictable.

Project Schedule

  • 02/04 to 21/04: Fixing any issue in blender and submitting a patch.
  • 01/05 to 26/05: Community Bonding Period
    • Discussing and finalizing the UI related details and rough idea of
      implementation.
    • Understanding the existing blender code.
  • First 3 Weeks: Completing basic strip linking with support for basic
    features like moving strips together
  • 3 Weeks: Implementing special behaviour of the tools for the linked
    strips.
  • 4 Weeks: Implementing snapping in the preview region of sequencer.
  • 1 Weeks: Making the selection of channel when adding new strip clear and
    predictable
  • 1 Weeks:
    • Buffer time.
    • Bug fixing
    • Code cleanup

Bio

I am Shubham Daule (SBDaule), a third year undergraduate student pursuing my
Batchelor of Technology in Computer Science and Engineering from IIT Bhilai,
India. I have been passionate about FOSS ever since I found about it. I
participated in GSoC 2023 and implemented “Auto-growing Layers” in GNU’s Image
Manipulation Program (aka GIMP) and have been part of GIMP community
since.

4 Likes