← All ideas
  • Published 29 Mar 2025

Splitting strips without selecting the strip

There is no current way to split strips without selecting the strip you want to split. This is very confusing coming from any NLEs. Ideally it should also split all other strips along the current frame unless its locked.

100%

Development Status: Open

Upvote 1 Downvote 0
mjerswinmc
29 Mar 2025

4 Comments

mjerswinmc Author

Update: I have found a hacky way to do it with ChatGPT.

import bpy

class VSESmartSplit(bpy.types.Operator):
    """Smart Split: Selects All, Splits, and Restores Selection"""
    bl_idname = "sequencer.smart_split"
    bl_label = "Smart Split"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        scene = contextimport bpy

class VSESmartSplit(bpy.types.Operator):
    """Smart Split: Selects All, Splits, and Restores Selection"""
    bl_idname = "sequencer.smart_split"
    bl_label = "Smart Split"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        scene = context.scene
        vse = scene.sequence_editor

        if not vse:
            self.report({'WARNING'}, "No sequence editor found")
            return {'CANCELLED'}

        frame = scene.frame_current
        strips = vse.sequences_all

        # Store original selection state
        originally_selected = {strip: strip.select for strip in strips}

        # Select all strips
        for strip in strips:
            strip.select = True

        # Perform the split
        bpy.ops.sequencer.split(frame=frame, type='SOFT', side='BOTH')

        # Restore original selection
        for strip, was_selected in originally_selected.items():
            strip.select = was_selected

        return {'FINISHED'}

def register():
    bpy.utils.register_class(VSESmartSplit)

def unregister():
    bpy.utils.unregister_class(VSESmartSplit)

if __name__ == "__main__":
    register().scene
        vse = scene.sequence_editor

        if not vse:
            self.report({'WARNING'}, "No sequence editor found")
            return {'CANCELLED'}

        frame = scene.frame_current
        strips = vse.sequences_all

        # Store original selection state
        originally_selected = {strip.name: strip.select for strip in strips}

        # Select all strips
        for strip in strips:
            strip.select = True

        # Perform the split
        bpy.ops.sequencer.split(frame=frame, type='SOFT', side='BOTH')

        # Restore previous selection state
        for strip in vse.sequences_all:  # Fetch new strips (including split parts)
            strip.select = originally_selected.get(strip.name, False)

        return {'FINISHED'}

def register():
    bpy.utils.register_class(VSESmartSplit)

def unregister():
    bpy.utils.unregister_class(VSESmartSplit)

if __name__ == "__main__":
    register()

Then go to your preferences and add a shortcut with the identifier "sequencer.smart_split " and then Save Preferences.

This is the expected behavior I want but without doing all this setup.

Lauloque

There is no current way to split strips without selecting the strip you want to split.

Select the Blade tool in the toolbar:

demo pic

Then click anywhere on any strip:

demo gif

mjerswinmc Author

This workflow completely different from what I am proposing. All NLEs have allowed you to split all strips on the current frame without selecting every strip.

Lauloque

Then maybe you should rephrase your feature proposal. Because the tool I showed corresponds 100% to your proposal title and, even in the body text: only the last sentence reveals a nuance, but still phrased as an ideal instead of a hard requirement ;)

The best way to maximize your chances of seeing your proposal into development is to make it as clear and comprehensive as possible, so that any dev passing by can see and understand what it's all about and assess its feasibility with no need for extra back and forth.
If the first reaction of a reader is "we already have all the parts that matters" when it's not your intention, the proposal is missing its point.