1
$\begingroup$

The script below is meant to add an effect like "Cross" to the active strip in the VSE..However,after adding 2 colorstrips ,selecting them (alternatively and both together)and on running the script,it gives the following error -

RuntimeError: Operator bpy.ops.sequencer.effect_strip_add.poll() failed, context is incorrectError: 

On using the Bruteforce method here,to override the context the terminal throws new error's. TypeError: bpy_struct: item.attr = val: enum "TIMELINE" not found in (, 'VIEW_3D', 'IMAGE_EDITOR', 'NODE_EDITOR', 'SEQUENCE_EDITOR', 'CLIP_EDITOR', 'DOPESHEET_EDITOR', 'GRAPH_EDITOR', 'NLA_EDITOR', 'TEXT_EDITOR', 'CONSOLE', 'INFO', 'OUTLINER', 'PROPERTIES', 'FILE_BROWSER', 'PREFERENCES')

However ,on running the following command ,the 'TIMELINE' window opens ,as expected -

bpy.context.area.ui_type ="TIMELINE"

Please let me know, how to overide this Poll error .

import bpy

#check poll data
#all the area types except 'EMPTY' from blender.org/api/blender_python_api_current/bpy.types.Area.html#bpy.types.Area.type
types = {'VIEW_3D', 'TIMELINE', 'GRAPH_EDITOR', 'DOPESHEET_EDITOR', 'NLA_EDITOR', 'IMAGE_EDITOR', 'SEQUENCE_EDITOR', 'CLIP_EDITOR', 'TEXT_EDITOR', 'NODE_EDITOR', 'LOGIC_EDITOR', 'PROPERTIES', 'OUTLINER', 'USER_PREFERENCES', 'INFO', 'FILE_BROWSER', 'CONSOLE'}
#save the current area
area = bpy.context.area.type

#try each type
for type in types:
    #set the context
    bpy.context.area.type = type

    #print out context where operator works (change the ops below to check a different operator)
    if bpy.ops.sequencer.duplicate.poll():
        print(type)

#leave the context where it was
bpy.context.area.type = area


#Script to apply a Cross effect at the end of the selected strip
activeStrip = bpy.context.scene.sequence_editor.active_strip

aEnd =  activeStrip.frame_final_end

bpy.ops.sequencer.effect_strip_add(frame_start= aEnd, frame_end=aEnd +10, channel=1, replace_sel=True, overlap=False, type='CROSS', color=(0.0, 0.0, 0.0))
$\endgroup$
0
$\begingroup$

Slightly simplified your code with returning to TEXT_EDITOR area type:

import bpy

bpy.context.area.type = 'SEQUENCE_EDITOR'

#Script to apply a Cross effect at the end of the selected strip
activeStrip = bpy.context.scene.sequence_editor.active_strip

aEnd =  activeStrip.frame_final_end

bpy.ops.sequencer.effect_strip_add(frame_start= aEnd, frame_end=aEnd +10, channel=1,     replace_sel=True, overlap=False, type='CROSS', color=(0.0, 0.0, 0.0))

bpy.context.area.type = 'TEXT_EDITOR'

Works on 2.80.

It's worth adding an active strip check.

$\endgroup$
0
$\begingroup$

Use API Methods

enter image description here

Similarly to https://blender.stackexchange.com/a/101129/15543 ditch the operator completely here and use API methods. Sequences.new_effect()

import bpy

context = bpy.context
scene = context.scene
sed = scene.sequence_editor
sequences = sed.sequences
active_strip = sed.active_strip
if active_strip:

    color_strip = sequences.new_effect("Color", 'COLOR', 
           active_strip.channel - 1,
           frame_start=active_strip.frame_start, 
           frame_end=active_strip.frame_final_end)

    color_strip.color = (1, 0, 0)

    cross_strip = sequences.new_effect("Cross", 'CROSS', 
           active_strip.channel + 1,
           frame_start=active_strip.frame_start, 
           frame_end=active_strip.frame_final_end, 
           seq1=active_strip,
           seq2=color_strip)
    cross_strip.blend_type = 'CROSS'
    cross_strip.blend_alpha = 0.5
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.