- 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>
73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
bl_info = {
|
|
"name": "VSE ToolBox",
|
|
"description": "In-House Video editing Tools",
|
|
"author": "Samuel Bernou, Clement Ducarteron, Christophe Seux",
|
|
"version": (0, 1, 0),
|
|
"blender": (4, 0, 2),
|
|
"location": "Sequencer",
|
|
"warning": "",
|
|
"category": "Sequencer",
|
|
}
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
#sys.modules['vse_toolbox'] = sys.modules.pop(Path(__file__).parent.name)
|
|
|
|
from vse_toolbox import ui
|
|
from vse_toolbox import operators
|
|
from vse_toolbox.constants import ASSET_PREVIEWS
|
|
from vse_toolbox.sequencer_utils import set_active_strip, update_text_strips
|
|
from vse_toolbox.bl_utils import get_addon_prefs
|
|
|
|
|
|
modules = (
|
|
operators,
|
|
ui,
|
|
)
|
|
|
|
if 'bpy' in locals():
|
|
import importlib
|
|
for mod in modules:
|
|
importlib.reload(mod)
|
|
|
|
import bpy
|
|
|
|
|
|
def register():
|
|
if update_text_strips not in bpy.app.handlers.frame_change_post:
|
|
bpy.app.handlers.frame_change_post.append(update_text_strips)
|
|
if update_text_strips not in bpy.app.handlers.render_pre:
|
|
bpy.app.handlers.render_pre.append(update_text_strips)
|
|
|
|
for module in modules:
|
|
module.register()
|
|
|
|
if set_active_strip not in bpy.app.handlers.frame_change_post:
|
|
bpy.app.handlers.frame_change_post.append(set_active_strip)
|
|
|
|
prefs = get_addon_prefs()
|
|
#print('\n\n-------------------', prefs.config_path)
|
|
|
|
|
|
def unregister():
|
|
if update_text_strips in bpy.app.handlers.frame_change_post:
|
|
bpy.app.handlers.frame_change_post.remove(update_text_strips)
|
|
if update_text_strips in bpy.app.handlers.render_pre:
|
|
bpy.app.handlers.render_pre.remove(update_text_strips)
|
|
|
|
try:
|
|
bpy.utils.previews.remove(ASSET_PREVIEWS)
|
|
except Exception as e:
|
|
pass
|
|
|
|
if set_active_strip in bpy.app.handlers.frame_change_post:
|
|
bpy.app.handlers.frame_change_post.remove(set_active_strip)
|
|
for module in reversed(modules):
|
|
module.unregister()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
register()
|