Blender 5.0 compat + STB XML import + sequence/stamps improvements

- Fix Blender 5.0 API: active_sequence_strip → active_strip, bracket
  property access on AddonPreferences, _RestrictContext during register()
- Fix new_effect() frame_end → length for Blender 5.0
- Fix OTIO adapter kwargs (rate/ignore_timecode_mismatch only for cmx_3600)
- Fix OTIO global_start_time RationalTime → int conversion
- Add Import STB XML operator with movie strip import and XML patching
  for Storyboard Pro transitions missing <alignment>
- Add Create Sequence Strip operator (select shots → create sequence)
- Improve Set Stamps: channel at top, no conflict with existing strips,
  use raw strip names in templates
- TVSHOW episode fixes: sequence loading, episode creation
- Kitsu: new_asset, new_episode, admin_connect fix, gazu version pin
- Fix escape warnings in file_utils regex patterns
- Guard handler registration against duplicates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 16:09:03 +01:00
co-authored by Claude Opus 4.6
parent c46d78f2ae
commit d2d64dc8a8
14 changed files with 548 additions and 122 deletions
+11 -7
View File
@@ -139,7 +139,7 @@ class VSETB_PT_strip(Panel):
@classmethod
def poll(cls, context):
strip = context.active_sequence_strip
strip = context.active_strip
return strip and get_channel_name(strip) == 'Shots'
def draw(self, context):
@@ -174,7 +174,7 @@ class VSETB_PT_sequencer(VSETB_main, Panel):
settings = get_scene_settings()
project = settings.active_project
strip = context.active_sequence_strip
strip = context.active_strip
channel = get_channel_name(strip)
col = layout.column()
@@ -224,6 +224,7 @@ class VSETB_PT_imports(VSETB_main, Panel):
#col.operator('vse_toolbox.import_files', text='Import', icon='IMPORT')
col.operator('vse_toolbox.import_spreadsheet', text='Import Spreadsheet', icon='SPREADSHEET')
col.operator("vse_toolbox.import_shots", text='Import Shots', icon="FILE_MOVIE")
col.operator("vse_toolbox.import_stb_xml", text='Import STB XML', icon="FILE_TEXT")
class VSETB_PT_presets(PresetPanel, Panel):
@@ -264,10 +265,10 @@ class VSETB_PT_tracker(VSETB_main, Panel):
@classmethod
def poll(cls, context):
return context.active_sequence_strip
return context.active_strip
def draw_header_preset(self, context):
active_strip = context.active_sequence_strip
active_strip = context.active_strip
self.layout.label(text=active_strip.name)
def draw(self, context):
@@ -280,7 +281,7 @@ class VSETB_PT_casting(VSETB_main, Panel):
@classmethod
def poll(cls, context):
strip = context.active_sequence_strip
strip = context.active_strip
return strip and get_channel_name(strip) == 'Shots'
def draw(self, context):
@@ -315,6 +316,8 @@ class VSETB_PT_casting(VSETB_main, Panel):
col_tool.separator()
col_tool.operator('vse_toolbox.casting_replace', icon='ZOOM_ALL', text="")
col_tool.separator()
col_tool.operator('vse_toolbox.casting_create_asset', icon='PLUS', text="")
if strip_settings.casting:
casting_item = strip_settings.casting[strip_settings.casting_index]
@@ -336,7 +339,7 @@ class VSETB_PT_metadata(VSETB_main, Panel):
@classmethod
def poll(cls, context):
return context.active_sequence_strip and get_scene_settings().active_project
return context.active_strip and get_scene_settings().active_project
def draw(self, context):
@@ -383,7 +386,7 @@ class VSETB_PT_comments(VSETB_main, Panel):
@classmethod
def poll(cls, context):
return context.active_sequence_strip and get_scene_settings().active_project
return context.active_strip and get_scene_settings().active_project
def draw(self, context):
layout = self.layout
@@ -455,6 +458,7 @@ class VSETB_MT_main_menu(Menu):
layout.operator('vse_toolbox.remove_channel', text='Remove Channel', icon='TRIA_DOWN_BAR')
layout.separator()
layout.operator('vse_toolbox.merge_shot_strips', text='Merge Shots')
layout.operator('vse_toolbox.create_sequence_strip', text='Create Sequence')
layout.operator('vse_toolbox.scene_cut_detection', text='Scene Cut Detection', icon='SCULPTMODE_HLT')
def draw_vse_toolbox_menu(self, context):