My current workflow for a project I am working on uses empties in the 3D-View to more easily control properties of strips in the VSE via drivers. However sometimes it gets a little confusing which empties control which strips and I sometimes manipulate the wrong empty.

Is there a way using Python to automatically select the proper empty when I select a strip in the VSE? For instance when I select the strip in channel 4 of the VSE I would like it to select empty Fader_4.

I tried a little bit myself but I'm not too swift with Blender Python and I couldn't figure out how to tell when a strip is selected in the VSE.


1 Answer 1


A strip (sequence) is selected in the VSE when its select property is True. The selected strips are available via the context.selected_sequences list, and the active strip is context.scene.sequence_editor.active_strip

Test code using modal timer operator. Prepended a toggle button to turn autoselect on / off, to the Sequence Editor header.

enter image description here

import bpy
from bpy.props import BoolProperty
from bl_ui.space_sequencer import act_strip

class SeqModalTimerOperator(bpy.types.Operator):
    """Operator which runs its self from a timer"""
    bl_idname = "wm.modal_timer_operator"
    bl_label = "Modal Timer Operator"

    _timer = None

    def modal(self, context, event):
        scene = context.scene
        active_strip = act_strip(context)

        if event.type in {'ESC'} or not scene.auto_select:
            return {'CANCELLED'}

        if event.type == 'TIMER' and active_strip:

            # deselect everything
            for o in scene.objects:
                o.select = False
            # select empties, make active active.
            for s in context.selected_sequences:                
                empty = scene.objects.get("Fader_%d" % s.channel)
                if empty:
                    empty.select = True
                    if s == active_strip:
                        scene.objects.active = empty

        return {'PASS_THROUGH'}

    def execute(self, context):
        wm = context.window_manager
        self._timer = wm.event_timer_add(0.1, context.window)
        return {'RUNNING_MODAL'}

    def cancel(self, context):
        wm = context.window_manager

def toggle_auto_select(self, context):
    scene = context.scene
    layout = self.layout
    #layout.label("Auto Select")
    layout.prop(scene, "auto_select", toggle=True)

def auto_select(self, context):
    if self.auto_select:

def register():
    bpy.types.Scene.auto_select = BoolProperty(
                               name="Auto Select",
                               description="Turn on to Auto select Empties",

def unregister():

if __name__ == "__main__":

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .