From 2960bab63d5f15077f73c3be16bf6bb6a467a1b1 Mon Sep 17 00:00:00 2001 From: ChristopheSeux Date: Wed, 10 Apr 2024 16:15:57 +0200 Subject: [PATCH] rewrite import_shots and cleanup --- __init__.py | 11 +- constants.py | 3 + file_utils.py | 46 ++- operators/addon.py | 25 +- operators/exports.py | 2 +- operators/imports.py | 394 +++++++++++++++++-- operators/sequencer.py | 224 +++++++++-- operators/tracker.py | 180 +++++---- resources/app_templates/Review/__init__.py | 45 +++ resources/app_templates/Review/startup.blend | Bin 0 -> 458836 bytes resources/trackers/kitsu.py | 95 ++++- sequencer_utils.py | 96 +++-- ui/panels.py | 106 ++--- ui/preferences.py | 5 +- ui/properties.py | 105 ++++- 15 files changed, 1068 insertions(+), 269 deletions(-) create mode 100644 resources/app_templates/Review/__init__.py create mode 100644 resources/app_templates/Review/startup.blend diff --git a/__init__.py b/__init__.py index cb01c6d..5c2173b 100644 --- a/__init__.py +++ b/__init__.py @@ -5,13 +5,11 @@ bl_info = { "description": "In-House Video editing Tools", "author": "Samuel Bernou, Clement Ducarteron, Christophe Seux", "version": (0, 1, 0), - "blender": (3, 4, 1), + "blender": (4, 0, 2), "location": "Sequencer", "warning": "", "category": "Sequencer", } - # "doc_url": "https://github.com/Pullusb/REPONAME", - # "tracker_url": "https://github.com/Pullusb/REPONAME/issues", import sys from pathlib import Path @@ -21,6 +19,7 @@ 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 = ( @@ -35,6 +34,7 @@ if 'bpy' in locals(): import bpy + def register(): bpy.app.handlers.frame_change_post.append(update_text_strips) bpy.app.handlers.render_pre.append(update_text_strips) @@ -44,6 +44,8 @@ def register(): bpy.app.handlers.frame_change_post.append(set_active_strip) + prefs = get_addon_prefs() + #print('\n\n-------------------', prefs.config_path) def unregister(): @@ -54,12 +56,11 @@ def unregister(): bpy.utils.previews.remove(ASSET_PREVIEWS) except Exception as e: pass - # print(f"!-- {e} --!") - # print(f"No preview collection found. {ASSET_PREVIEWS} can't be remove.") bpy.app.handlers.frame_change_post.remove(set_active_strip) for module in reversed(modules): module.unregister() + if __name__ == "__main__": register() diff --git a/constants.py b/constants.py index f2c2d7c..fb7d94e 100644 --- a/constants.py +++ b/constants.py @@ -25,6 +25,9 @@ PROJECT_ITEMS = [] EPISODE_ITEMS = [] CONFIG_DIR = Path(appdirs.user_config_dir(__package__.split('.')[0])) +APP_TEMPLATES_DIR = Path(MODULE_DIR, 'resources', 'app_templates') +REVIEW_TEMPLATE_BLEND = Path(APP_TEMPLATES_DIR, 'Review', 'startup.blend') + PREVIEWS_DIR = CONFIG_DIR / 'thumbnails' TASK_ITEMS = [] diff --git a/file_utils.py b/file_utils.py index b45e8b8..dea5fa3 100644 --- a/file_utils.py +++ b/file_utils.py @@ -5,6 +5,9 @@ import platform import sys import unicodedata from pathlib import Path +from os.path import expandvars +import json +import glob def install_module(module_name, package_name=None): @@ -109,13 +112,15 @@ def read_file(path): yaml = install_module('yaml') try: data = yaml.safe_load(txt) - except Exception: + except Exception as e: + print(e) print(f'Could not load yaml file {path}') return elif path.suffix.lower() == '.json': try: data = json.loads(txt) - except Exception: + except Exception as e: + print(e) print(f'Could not load json file {path}') return else: @@ -142,11 +147,36 @@ def open_file(filepath, env=None, select=False): subprocess.Popen(cmd, env=env) -def parse(string, template): - template = re.sub(r'{index:(.+?)}', r'(?P.+)', template) - reg = re.sub(r'{(.+?)}', r'(?P<_\1>.+)', template) +# def parse(string, template): +# template = re.sub(r'{index:(.+?)}', r'(?P.+)', template) +# reg = re.sub(r'{(.+?)}', r'(?P<_\1>.+)', template) - values = list(re.search(reg, string).groups()) - keys = re.findall(r'{(.+?)}', template) + ['index'] +# values = list(re.search(reg, string).groups()) +# keys = re.findall(r'{(.+?)}', template) + ['index'] - return dict(zip(keys, values)) +# return dict(zip(keys, values)) + +def parse(template, string): + reg = re.sub(r'{[^}]*}|\.', lambda m: m.group() if m.group().startswith('{') else r'\.', template) + reg = re.sub(r'{(.+?)}', r'(?P<\1>.*)', reg) + + #print(string, template, reg) + if result := re.match(reg, string): + return result.groupdict() + +def find_last(template, **kargs): + #print(find_last, template, kargs) + pattern = Path(template).as_posix() + pattern = expandvars(pattern) + + for key, value in kargs.items(): + pattern = re.sub(r'\{%s\}'%key, value, pattern) + + pattern = re.sub(r'{\w+:(\d{2})d}', lambda x : '?' * int(x.groups()[0]), pattern) + pattern = re.sub(r'{.*?}', '*', pattern) + + print(pattern) + + filepaths = glob.glob(pattern) + if filepaths: + return Path(max(filepaths)) \ No newline at end of file diff --git a/operators/addon.py b/operators/addon.py index 1965b51..38a91e8 100644 --- a/operators/addon.py +++ b/operators/addon.py @@ -40,15 +40,26 @@ class VSETB_OT_load_settings(Operator): def execute(self, context): prefs = get_addon_prefs() settings = get_scene_settings() - project = settings.active_project if not prefs.config_path: - return {'FINISHED'} + return {'CANCELLED'} addon_config = read_file(os.path.expandvars(prefs.config_path)) + if not addon_config: + return {'CANCELLED'} + addon_config['trackers'] = addon_config.get('trackers') - trackers = addon_config.pop('trackers') + trackers_config = addon_config.pop('trackers') + for tracker_config in trackers_config: + tracker_name = norm_str(tracker_config.pop('name')) + + if not hasattr(prefs.trackers, tracker_name): + continue + + tracker = getattr(prefs.trackers, tracker_name) + for k, v in tracker_config.items(): + setattr(tracker, k, v) addon_config['spreadsheet_export'] = addon_config.get('spreadsheet_export', {}) spreadsheet_export_config = addon_config.pop('spreadsheet_export') @@ -57,10 +68,15 @@ class VSETB_OT_load_settings(Operator): spreadsheet_import_config = addon_config.pop('spreadsheet_import') project_name = addon_config.get('project_name') - if project_name: + if project_name not in settings.projects: + project = settings.projects.add() + project.name = project_name settings.project_name = project_name + #if project_name and project_name in settings.projects: + # settings.project_name = project_name # Project Properties + project = settings.active_project for k, v in addon_config.items(): try: setattr(project, k, v) @@ -132,6 +148,7 @@ class VSETB_OT_load_settings(Operator): except Exception: print(f'Could not set option {k} with value {v} to spreadsheet') + self.report({"INFO"}, 'Settings loaded with sucess') return {'FINISHED'} diff --git a/operators/exports.py b/operators/exports.py index 5cc0f4b..f308ed4 100644 --- a/operators/exports.py +++ b/operators/exports.py @@ -134,7 +134,7 @@ class VSETB_OT_render(Operator): if project.render_sequence: print('Render Sequences...') for strip in get_strips(channel='Sequences', selected_only=project.render_selected_only): - print(strip.name) + #print(strip.name) strip_settings = strip.vsetb_strip_settings strip_data = {**format_data, **strip_settings.format_data} diff --git a/operators/imports.py b/operators/imports.py index 73a4c28..8a75078 100644 --- a/operators/imports.py +++ b/operators/imports.py @@ -1,5 +1,9 @@ from pathlib import Path +from os.path import expandvars +import re +import glob +from tempfile import gettempdir import bpy from bpy.types import Operator, UIList @@ -9,11 +13,11 @@ from vse_toolbox.constants import (EDITS, EDIT_SUFFIXES, MOVIES, MOVIE_SUFFIXES, SOUNDS, SOUND_SUFFIXES) from vse_toolbox.sequencer_utils import (clean_sequencer, import_edit, import_movie, - import_sound, get_strips, get_channel_index) + import_sound, get_strips, get_channel_index, get_empty_channel, scale_clip_to_fit) -from vse_toolbox.bl_utils import get_scene_settings -from vse_toolbox.file_utils import install_module - +from vse_toolbox.bl_utils import (get_scene_settings, get_addon_prefs, get_scene_settings) +from vse_toolbox.file_utils import install_module, parse, find_last +#from vse_toolbox.template import Template class VSETB_OT_auto_select_files(Operator): bl_idname = "vse_toolbox.auto_select_files" @@ -194,15 +198,26 @@ class VSETB_UL_import_task(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + layout.separator(factor=0.5) layout.prop(item, 'import_enabled', text='') layout.label(text=item.name) -class VSETB_OT_import_shots(Operator): - bl_idname = "vse_toolbox.import_shots" - bl_label = "Import Shots" - bl_description = "Import Shots for disk or tracker" + +def get_task_items(self, context): + settings = get_scene_settings() + project = settings.active_project + + return [(t, t, '') for t in project.task_types.keys()] +class VSETB_OT_select_task(Operator): + bl_idname = "vse_toolbox.select_task" + bl_label = "Select Task" + bl_description = "Select Task" bl_options = {"REGISTER", "UNDO"} + bl_property = "task" + + task: EnumProperty(name="My Search", items=get_task_items) + @classmethod def poll(cls, context): return True @@ -212,76 +227,369 @@ class VSETB_OT_import_shots(Operator): settings = get_scene_settings() project = settings.active_project - from gadget import Project + project.task_types[self.task].import_enabled = True - p = Project.from_env() - p.shots.fetch() + return {'FINISHED'} + + def invoke(self, context, event): + context.window_manager.invoke_search_popup(self) + return {"FINISHED"} + + +class VSETB_OT_unselect_task(Operator): + bl_idname = "vse_toolbox.unselect_task" + bl_label = "Unselect Task" + bl_description = "Unselect Task" + bl_options = {"REGISTER", "UNDO"} + + task : StringProperty() + + def execute(self, context): + scn = context.scene + settings = get_scene_settings() + project = settings.active_project + + project.task_types[self.task].import_enabled = False + + return {'FINISHED'} + + +def get_sequence_items(self, context): + settings = get_scene_settings() + project = settings.active_project + + return [(t, t, '') for t in project.sequences.keys()] +class VSETB_OT_select_sequence(Operator): + bl_idname = "vse_toolbox.select_sequence" + bl_label = "Select Sequence" + bl_description = "Select Sequence" + bl_options = {"REGISTER", "UNDO"} + + bl_property = "sequence" + + sequence: EnumProperty(name="My Search", items=get_sequence_items) + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + scn = context.scene + settings = get_scene_settings() + project = settings.active_project + + project.sequences[self.sequence].import_enabled = True + + return {'FINISHED'} + + def invoke(self, context, event): + context.window_manager.invoke_search_popup(self) + return {"FINISHED"} + + +class VSETB_OT_unselect_sequence(Operator): + bl_idname = "vse_toolbox.unselect_sequence" + bl_label = "Unselect sequence" + bl_description = "Unselect sequence" + bl_options = {"REGISTER", "UNDO"} + + sequence : StringProperty() + + def execute(self, context): + scn = context.scene + settings = get_scene_settings() + project = settings.active_project + + project.sequences[self.sequence].import_enabled = False + + return {'FINISHED'} + +class VSETB_OT_import_shots(Operator): + bl_idname = "vse_toolbox.import_shots" + bl_label = "Import Shots" + bl_description = "Import Shots for disk or tracker" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + return get_scene_settings().active_project + + def set_sequencer_channels(self, task_types): + scn = bpy.context.scene + channels = ['Shots', 'Sequences', 'Stamps'] + #channel_index = len(task_types * 3) + len(channels) + 1 + + channel_index = 1 + + for task_type in task_types: + audio_channel = scn.sequence_editor.channels[channel_index] + audio_channel.name = f'{task_type} Audio' + audio_channel.mute = (task_type != task_types[-1]) + + video_channel = scn.sequence_editor.channels[channel_index+1] + video_channel.name = f'{task_type} Video' - tasks = [t for t in project.task_types if t.import_enabled] - for i, task_type in enumerate(tasks): - channel_index = 9 + i + channel_index += 3 - scn.sequence_editor.channels[channel_index].name = task_type.name + for channel in channels: + scn.sequence_editor.channels[channel_index].name = channel + + channel_index += 1 - # Create Channels: - scn.sequence_editor.channels[9] + def get_preview_dir(self): + preview_dir = Path(bpy.app.tempdir, 'previews') + if bpy.data.filepath: + preview_dir = Path(bpy.data.filepath).parent / 'previews' + return preview_dir - for strip in get_strips('Shots'): - for i, task_type in enumerate(tasks): - shot = p.shots[strip.name] - versions = shot.tasks[task_type.name].outputs[0].versions.fetch() + def download_preview(self, task_type, shot): + prefs = get_addon_prefs() + tracker = prefs.tracker - if versions: - print(versions[-1]) - - imported_strip = import_movie(versions[-1].path) - imported_strip.frame_start = strip.frame_start + task = tracker.get_task(task_type.id or task_type.name, entity=shot) + last_comment = tracker.get_last_comment_with_preview(task) + if not last_comment: + return - if imported_strip.frame_final_duration != strip.frame_final_duration: - print(f'strip {strip.name} has different duration') - imported_strip.color_tag = 'COLOR_03' + shot_name = shot['name'] + sequence_name = f"{shot['sequence_name']}_" + if shot_name.startswith(sequence_name): + shot_name = shot_name.replace(sequence_name, '', 1) + + preview_dir = self.get_preview_dir() + + filepath = Path(preview_dir, f'{sequence_name}{shot_name}_{task_type.name}') + filepath.parent.mkdir(parents=True, exist_ok=True) + + last_preview = last_comment['previews'][0] + tracker.download_preview_file(last_preview, str(filepath)) + + return filepath + + def conform_render(self, clip): + scn = bpy.context.scene + scn.render.resolution_x = clip.elements[0].orig_width + scn.render.resolution_y = clip.elements[0].orig_height + scn.render.fps = int(clip.elements[0].orig_fps) + + scn.view_settings.view_transform = 'Standard' + + def find_shot_preview(self, sequence, shot_name, task_type): + settings = get_scene_settings() + project = settings.active_project + import_shots = project.import_shots + + pattern = Path( + import_shots.shot_folder_template, + import_shots.import_video_template) + + # Normalize name in snake_case for now + sequence = sequence.name.lower().replace(' ', '_') + shot = parse(project.shot_template, shot_name)['shot'] + task = task_type.name.lower().replace(' ', '_') + + return find_last(pattern, sequence=sequence, shot=shot, task=task) + + def execute(self, context): + scn = context.scene + settings = get_scene_settings() + project = settings.active_project + import_shots = project.import_shots + + prefs = get_addon_prefs() + tracker = prefs.tracker + tracker.admin_connect() + + task_types = [t for t in project.task_types if t.import_enabled] + sequences = [s for s in project.sequences if s.import_enabled] + + conformed = False + + self.set_sequencer_channels([t.name for t in task_types]) + frame_index = 1 + for sequence in sequences: + shots_data = tracker.get_shots(sequence=sequence.id) + sequence_start = frame_index + for shot_data in shots_data: + frames = int(shot_data['nb_frames']) + + strip = scn.sequence_editor.sequences.new_effect( + name=shot_data['name'], + type='COLOR', + channel=get_channel_index('Shots'), + frame_start=frame_index, + frame_end=frame_index + frames + ) + strip.blend_alpha = 0 + strip.color = (0.5, 0.5, 0.5) + + for task_type in task_types: + if import_shots.import_source == 'DISK': + preview = self.find_shot_preview(sequence, shot_data['name'], task_type) + #print(videos) + #return {"FINISHED"} - imported_strip.frame_final_end = strip.frame_final_end + else: + preview = self.download_preview(task_type, shot_data) - imported_strip.channel = get_channel_index(task_type.name) - print(get_channel_index(task_type.name), imported_strip.channel) - else: - print(f'No movie for {strip.name} of task {task_type.name}') + if not preview: + print(f'No preview found for shot {shot_data["name"]}') + continue + + print(f'Loading Preview from {preview}') + + # Load Video + channel_index = get_channel_index(f'{task_type.name} Video') + video_clip = import_movie(preview) + video_clip.frame_start = frame_index + video_clip.channel = channel_index - # for task_type in tasks: - # for strip in get_strips(task_type.name): - # strip.channel = get_channel_index(task_type.name) + if not conformed: + self.conform_render(video_clip) + conformed = True + scale_clip_to_fit(video_clip) + + # Load Audio + channel_index = get_channel_index(f'{task_type.name} Audio') + audio_clip = import_sound(preview, frame_start=frame_index, + frame_end=video_clip.frame_final_end) + audio_clip.channel = channel_index + + frame_index += frames + + strip = scn.sequence_editor.sequences.new_effect( + name=sequence.name, + type='COLOR', + channel=get_channel_index('Sequences'), + frame_start=sequence_start, + frame_end=frame_index + ) + strip.blend_alpha = 0 + strip.color = (0.25, 0.25, 0.25) + + scn.frame_start = 1 + scn.frame_end = frame_index -1 return {'FINISHED'} def draw(self, context): settings = get_scene_settings() project = settings.active_project + import_shots = project.import_shots layout = self.layout + col = layout.column(align=False) col.use_property_split = True col.use_property_decorate = False row = col.row(align=True) - row.prop(project, "import_source", text='Source', expand=True) + row.prop(import_shots, "import_source", text='Videos Source', expand=True) + + if import_shots.import_source == 'DISK': + #col.prop(import_shots, "sequence_dir_template", text='Sequence Dir') + col.prop(import_shots, "shot_folder_template", text='Shot Folder') + col.prop(import_shots, "import_video_template", text='Video') + col.separator() + else: + col.prop(import_shots, "previews_folder", text='Previews Folder') + col.separator() + #if bpy.data.filepath: + #col.label(text=f' {self.get_preview_dir()}') + #else: + # col.label(icon="ERROR", text="Save your Blender to keep the previews") row = col.row(align=True) - row.prop(project, 'import_task', text='Import Tasks') + row.prop(import_shots, 'import_task', text='Import Tasks') + row.operator("vse_toolbox.select_task", text='', icon='ADD') - if project.import_task == 'SELECTED': - col.use_property_split = False - col.template_list("VSETB_UL_import_task", "import_task", project, "task_types", project, "task_type_index", rows=8) + tasks = [t for t in project.task_types if t.import_enabled] + + if import_shots.import_task == "FROM_LIST": + if tasks: + split = col.split(factor=0.4) + split.row() + box = split.box() + box_col = box.column(align=True) + + for task_type in tasks: + row = box_col.row(align=True) + sub = row.row(align=True) + sub.enabled = False + sub.alignment = 'LEFT' + sub.scale_x = 0.15 + sub.prop(task_type, 'color', text='') + + op = row.operator("vse_toolbox.unselect_task", text=task_type.name) + op.task = task_type.name + + row.separator(factor=0.5) + op = row.operator("vse_toolbox.unselect_task", text='', icon='REMOVE', emboss=False) + op.task = task_type.name + else: + split = col.split(factor=0.4) + split.row() + row = split.row() + row.label(icon="ERROR") + row.label(text='Add at least one task') + + # Choose Sequences + row = col.row(align=True) + row.prop(import_shots, 'import_sequence', text='Import Sequences') + row.operator("vse_toolbox.select_sequence", text='', icon='ADD') + + sequences = [s for s in project.sequences if s.import_enabled] + if import_shots.import_sequence == "FROM_LIST": + if sequences: + split = col.split(factor=0.4) + split.row() + box = split.box() + box_col = box.column(align=True) + + for sequence in sequences: + row = box_col.row(align=True) + op = row.operator("vse_toolbox.unselect_sequence", text=sequence.name) + op.sequence = sequence.name + + row.separator(factor=0.5) + op = row.operator("vse_toolbox.unselect_sequence", text='', icon='REMOVE', emboss=False) + op.sequence = sequence.name + else: + split = col.split(factor=0.4) + split.row() + row = split.row() + row.label(icon="ERROR") + row.label(text='Add at least one Sequence') def invoke(self, context, event): scn = context.scene settings = get_scene_settings() project = settings.active_project + + tmp_dir = Path(gettempdir(), 'reviews') + + if bpy.data.filepath and Path(project.import_shots.previews_folder) == tmp_dir: + tmp_dir = '//sources' + + if not bpy.data.filepath and project.import_shots.previews_folder == '//sources': + project.import_shots.previews_folder = str(tmp_dir) + + # if not bpy.data.filepath: + # self.report({"ERROR"}, "Save your Blender file first") + # return {"CANCELLED"} - return context.window_manager.invoke_props_dialog(self) + return context.window_manager.invoke_props_dialog(self, width=400) + + def check(self, context): + return True + classes = ( + VSETB_OT_select_sequence, + VSETB_OT_unselect_sequence, + VSETB_OT_unselect_task, + VSETB_OT_select_task, VSETB_UL_import_task, VSETB_OT_auto_select_files, VSETB_OT_import_files, diff --git a/operators/sequencer.py b/operators/sequencer.py index 6af9e97..1e04b5c 100644 --- a/operators/sequencer.py +++ b/operators/sequencer.py @@ -1,4 +1,5 @@ -from os.path import expandvars +from os.path import expandvars, abspath +from pathlib import Path import bpy from bpy.types import Operator from bpy.props import (BoolProperty, StringProperty) @@ -7,6 +8,8 @@ from vse_toolbox.sequencer_utils import (get_strips, rename_strips, set_channels get_channel_index, new_text_strip, get_strip_at, get_channel_name) from vse_toolbox.bl_utils import get_scene_settings, get_strip_settings +from vse_toolbox.constants import REVIEW_TEMPLATE_BLEND +from shutil import copy2 class VSETB_OT_rename(Operator): @@ -17,8 +20,7 @@ class VSETB_OT_rename(Operator): #template : StringProperty(name="Strip Name", default="") #increment : IntProperty(name="Increment", default=0) - channel_name : StringProperty(name="Channel Name", default="") - selected_only : BoolProperty(name="Selected Only", default=False) + selected_only : BoolProperty(name="Selected Only", default=True) #start_number : IntProperty(name="Start Number", default=0, min=0) #by_sequence : BoolProperty( # name="Reset By Sequence", @@ -29,7 +31,8 @@ class VSETB_OT_rename(Operator): @classmethod def poll(cls, context): settings = get_scene_settings() - return settings.active_project + strip = context.active_sequence_strip + return settings.active_project and get_channel_name(strip) in ('Shots', 'Sequences') def invoke(self, context, event): scn = context.scene @@ -43,39 +46,62 @@ class VSETB_OT_rename(Operator): settings = get_scene_settings() project = settings.active_project + episode = project.episode_name + sequence = str(project.sequence_start_number).zfill(project.sequence_padding) + shot = str(project.shot_start_number).zfill(project.shot_padding) + + strip = context.active_sequence_strip + channel_name = get_channel_name(strip) + col = layout.column() col.use_property_split = True col.use_property_decorate = False - if self.channel_name == 'Shots': + if channel_name == 'Shots': col.prop(project, 'shot_template', text='Shot Name') col.prop(project, 'shot_start_number', text='Start Number') col.prop(project, 'shot_increment', text='Increment') + col.prop(project, 'shot_padding', text='Padding') col.prop(project, 'reset_by_sequence') - elif self.channel_name == 'Sequences': + + + elif channel_name == 'Sequences': col.prop(project, 'sequence_template' ,text='Sequence Name') col.prop(project, 'sequence_start_number', text='Start Number') col.prop(project, 'sequence_increment', text='Increment') + col.prop(project, 'sequence_padding', text='Padding') col.prop(self, 'selected_only') + + if channel_name == 'Shots': + label = project.shot_template.format(episode=episode, sequence=sequence, shot=shot) + elif channel_name == 'Sequences': + label = project.sequence_template.format(episode=episode, sequence=sequence) + + col.label(text=f'Renaming {label}') def execute(self, context): scn = context.scene settings = get_scene_settings() project = settings.active_project - strips = get_strips(channel=self.channel_name, selected_only=self.selected_only) - if self.channel_name == 'Shots': + strip = context.active_sequence_strip + channel_name = get_channel_name(strip) + + strips = get_strips(channel=channel_name, selected_only=self.selected_only) + if channel_name == 'Shots': rename_strips(strips, template=project.shot_template, increment=project.shot_increment, start_number=project.shot_start_number, - by_sequence=project.reset_by_sequence + by_sequence=project.reset_by_sequence, + padding=project.shot_padding ) - if self.channel_name == 'Sequences': + if channel_name == 'Sequences': rename_strips(strips, template=project.sequence_template, - increment=project.sequence_increment, start_number=project.sequence_start_number + increment=project.sequence_increment, start_number=project.sequence_start_number, + padding=project.sequence_padding ) return {"FINISHED"} @@ -180,10 +206,10 @@ class VSETB_OT_set_stamps(Operator): font_size=font_size, y=margin, box_margin=box_margin, select=True, box_color=(0, 0, 0, 0.5)) # Project Name - project_text = '{project_name}' + project_text = '{project}' if project.type == 'TVSHOW': - project_text = '{project_name} / {episode_name}' - project_strip_stamp = new_text_strip('project_name_stamp', channel=1, **stamp_params, + project_text = '{project} / ep{episode}' + project_strip_stamp = new_text_strip('project_stamp', channel=1, **stamp_params, text=project_text, x=0.01, align_x='LEFT', align_y='BOTTOM') project_strip_stamp.crop.max_x = crop_x * 2 @@ -191,16 +217,16 @@ class VSETB_OT_set_stamps(Operator): # Shot Name - shot_strip_stamp = new_text_strip('shot_name_stamp', channel=2, **stamp_params, - text='{sequence_name} / {shot_name}', align_y='BOTTOM') + shot_strip_stamp = new_text_strip('shot_stamp', channel=2, **stamp_params, + text='sq{sequence} / sh{shot}', align_y='BOTTOM') shot_strip_stamp.crop.min_x = crop_x shot_strip_stamp.crop.max_x = crop_x shot_strip_stamp.crop.max_y = crop_max_y - # Frame Range - frame_strip_stamp = new_text_strip('frame_range_stamp', channel=3, **stamp_params, - text='{shot_frame} / {shot_duration}', x=0.99, align_x='RIGHT', align_y='BOTTOM') + # Frame + frame_strip_stamp = new_text_strip('frame_stamp', channel=3, **stamp_params, + text='{shot_frame} / {shot_duration} {timecode}', x=0.99, align_x='RIGHT', align_y='BOTTOM') frame_strip_stamp.crop.min_x = crop_x *2 frame_strip_stamp.crop.max_y = crop_max_y @@ -269,10 +295,11 @@ class VSETB_OT_next_shot(Operator): return {"FINISHED"} -class VSETB_OT_open_shot_dir(Operator): - bl_idname = "vse_toolbox.open_shot_dir" - bl_label = "Open Shot Dir" - bl_description = "Open Shot Dir" + +class VSETB_OT_open_shot_folder(Operator): + bl_idname = "vse_toolbox.open_shot_folder" + bl_label = "Open Shot Folder" + bl_description = "Open Shot Folder" bl_options = {"REGISTER", "UNDO"} @classmethod @@ -289,13 +316,154 @@ class VSETB_OT_open_shot_dir(Operator): format_data = {**settings.format_data, **project.format_data, **strip_settings.format_data} - shot_dir_template = expandvars(project.shot_dir_template) - shot_dir_path = shot_dir_template.format(**format_data) - bpy.ops.wm.path_open(filepath=shot_dir_path) + shot_folder_template = expandvars(project.import_shots.shot_folder_template) + shot_folder_path = shot_folder_template.format(**format_data) + bpy.ops.wm.path_open(filepath=shot_folder_path) return {"FINISHED"} +class VSETB_OT_collect_files(Operator): + bl_idname = "vse_toolbox.collect_files" + bl_label = "Collect Files" + bl_description = "Collect Files" + bl_options = {"REGISTER", "UNDO"} + + collect_folder: StringProperty( + name="Collect Folder", default="//sources", subtype='DIR_PATH') + + @classmethod + def poll(cls, context): + if bpy.data.is_saved: + return True + + cls.poll_message_set('Save the blend to collect files') + + def execute(self, context): + strip = context.active_sequence_strip + settings = get_scene_settings() + project = settings.active_project + + + strips = [s for s in context.scene.sequence_editor.sequences_all if s.type in ('MOVIE', 'SOUND')] + context.window_manager.progress_begin(0, len(strips)) + + for i, strip in enumerate(strips): + context.window_manager.progress_update(i) + + if strip.type == 'MOVIE': + src_path = strip.filepath + elif strip.type == 'SOUND': + src_path = strip.sound.filepath + + src_path = Path(abspath(bpy.path.abspath(src_path))) + dst_path = Path(bpy.path.abspath(self.collect_folder), src_path.name) + + if src_path == dst_path: + continue + + dst_path.parent.mkdir(exist_ok=True, parents=True) + + print(f'Copy file from {src_path} to {dst_path}') + copy2(str(src_path), str(dst_path)) + + rel_path = bpy.path.relpath(str(dst_path)) + if len(Path(rel_path).as_posix()) < len(dst_path.as_posix()): + dst_path = rel_path + + if strip.type == 'MOVIE': + strip.filepath = str(dst_path) + elif strip.type == 'SOUND': + strip.sound.filepath = str(dst_path) + + context.window_manager.progress_end() + + return {"FINISHED"} + + def invoke(self, context, event): + scn = context.scene + settings = get_scene_settings() + + return context.window_manager.invoke_props_dialog(self) + + +class WM_OT_split_view(Operator): + """Toggle Split sequencer view""" + + bl_idname = "wm.split_view" + bl_label = "Split View" + + def get_preview_areas(self, context): + return [ + x for x in context.screen.areas + if x.type == "SEQUENCE_EDITOR" and x.spaces[0].view_type == "PREVIEW" + ] + + def invoke(self, context, event): + preview_areas = self.get_preview_areas(context) + + if not preview_areas: + return {"CANCELLED"} + + scn = context.scene + video_channels = [i for i, c in enumerate(scn.sequence_editor.channels) if 'Video' in c.name] + + if len(video_channels) == 2 and len(preview_areas) == 1: + # Split area + with bpy.context.temp_override(area=preview_areas[0]): + bpy.ops.screen.area_split(direction="VERTICAL") + + # Disable toolbar on right panel + # Update areas + preview_areas = self.get_preview_areas(context) + + preview_areas[-1].spaces[0].display_channel = video_channels[-1] + preview_areas[0].spaces[0].display_channel = video_channels[-2] + + preview_areas[0].spaces[0].show_gizmo_navigate = False + preview_areas[-1].spaces[0].show_gizmo_navigate = False + # Hide toolbar + #preview_areas[0].spaces[0].show_region_toolbar = False + + else: + # Give the remaining area to have the left area's channel displayed + + # Show toolbar of remaning area + #preview_areas[0].spaces[0].show_region_toolbar = True + + # Join areas + # Simulates the mouse position as being between the two areas horizontally + # and a bit above the bottom corner vertically + cursor_x = int(preview_areas[0].x - (preview_areas[0].x - preview_areas[1].width) / 2) + cursor_y = preview_areas[0].y + 10 + + bpy.ops.screen.area_join(cursor=(cursor_x, cursor_y)) + + preview_areas = self.get_preview_areas(context) + + preview_areas[0].spaces[0].display_channel = 0 + + # Force UI update, due to Blender bug, delete when fixed -> https://developer.blender.org/T65529 + bpy.ops.screen.area_swap(cursor=(preview_areas[0].x, preview_areas[0].y)) + bpy.ops.screen.area_swap(cursor=(preview_areas[0].x, preview_areas[0].y)) + + return {"FINISHED"} + +''' +class VSETB_OT_set_review_workspace(Operator): + """Set Review Workspace""" + + bl_idname = "vse_toolbox.set_workspace" + bl_label = "Set Review Workspace" + + + def execute(self, context): + bpy.ops.workspace.append_activate(idname='Review', filepath=str(REVIEW_TEMPLATE_BLEND)) + + return {"FINISHED"} + ''' + + addon_keymaps = [] def register_keymaps(): addon = bpy.context.window_manager.keyconfigs.addon @@ -331,7 +499,9 @@ classes = ( VSETB_OT_show_waveform, VSETB_OT_previous_shot, VSETB_OT_next_shot, - VSETB_OT_open_shot_dir + VSETB_OT_open_shot_folder, + VSETB_OT_collect_files, + WM_OT_split_view ) def register(): diff --git a/operators/tracker.py b/operators/tracker.py index 9c38818..4b75465 100644 --- a/operators/tracker.py +++ b/operators/tracker.py @@ -3,6 +3,8 @@ import os from os.path import expandvars from pathlib import Path from pprint import pprint +import webbrowser +from functools import partial import bpy from bpy.types import (Operator, ) @@ -59,7 +61,7 @@ class VSETB_OT_load_assets(Operator): prefs = get_addon_prefs() tracker = prefs.tracker - tracker.connect() + tracker.admin_connect() project = settings.active_project project.assets.clear() @@ -125,7 +127,7 @@ class VSETB_OT_load_projects(Operator): tracker = prefs.tracker prev_project_name = settings.project_name - tracker.connect() + tracker.admin_connect() project_datas = tracker.get_projects() for project_data in sorted(project_datas, key=lambda x: x['name']): @@ -137,7 +139,6 @@ class VSETB_OT_load_projects(Operator): project.name = project_data['name'] project.id = project_data['id'] - if project.type == 'TVSHOW': episode_datas = tracker.get_episodes(project_data) for episode_data in episode_datas: @@ -154,6 +155,17 @@ class VSETB_OT_load_projects(Operator): for ep in reversed(project.episodes): if ep.name not in ep_names: project.episodes.remove(list(project.episodes).index(ep)) + else: + # Add sequences + sequences_data = tracker.get_sequences(project_data) + for sequence_data in sequences_data: + sequence = project.sequences.get(sequence_data['name']) + + if not sequence: + sequence = project.sequences.add() + + sequence.name = sequence_data['name'] + sequence.id = sequence_data['id'] project.metadata_types.clear() for metadata_data in tracker.get_metadata_types(project_data): @@ -183,6 +195,7 @@ class VSETB_OT_load_projects(Operator): for task_type_data in tracker.get_shot_task_types(project_data): task_type = project.task_types.add() task_type.name = task_type_data['name'] + task_type.id = task_type_data['id'] task_type.color = self.hex_to_rgb(task_type_data['color'])[:3] project.set_shot_tasks() @@ -200,11 +213,11 @@ class VSETB_OT_load_projects(Operator): if project.name not in project_names: settings.projects.remove(list(settings.projects).index(project)) - # Restore previous project - settings.project_name = prev_project_name - bpy.ops.vse_toolbox.load_settings() + if prev_project_name != '/' and prev_project_name in settings.projects: + settings.project_name = prev_project_name + #if settings.active_project: # settings.active_project.set_strip_metadata() @@ -216,7 +229,7 @@ class VSETB_OT_load_projects(Operator): class VSETB_OT_new_episode(Operator): bl_idname = "vse_toolbox.new_episode" - bl_label = "New Epispde" + bl_label = "New Episode" bl_description = "Add new Episode to Project" bl_options = {"REGISTER", "UNDO"} @@ -254,42 +267,12 @@ class VSETB_OT_new_episode(Operator): return {'FINISHED'} -def get_task_status_items(self, context): - settings = get_scene_settings() - project = settings.active_project - - status_items = [('CURRENT', 'Current', '')] - - if project: - status_items += [(t.name, t.name, '') for t in project.task_statuses] - return status_items - -def get_task_type_items(self, context): - settings = get_scene_settings() - project = settings.active_project - - if not project: - return [('NONE', 'None', '')] - - return [(t.name, t.name, '') for t in project.task_types] - class VSETB_OT_upload_to_tracker(Operator): bl_idname = "vse_toolbox.upload_to_tracker" bl_label = "Upload to tracker" bl_description = "Upload selected strip to tracker" bl_options = {"REGISTER", "UNDO"} - task : EnumProperty(items=get_task_type_items) - status : EnumProperty(items=get_task_status_items) - comment : StringProperty() - add_preview : BoolProperty(default=True) - preview_mode : EnumProperty(items=[(m, m.title().replace('_', ' '), '') - for m in ('ONLY_NEW', 'REPLACE', 'ADD')]) - set_main_preview : BoolProperty(default=True) - casting : BoolProperty(default=True) - custom_data : BoolProperty(default=True) - tasks_comment: BoolProperty(default=True) - @classmethod def poll(cls, context): return True @@ -297,49 +280,66 @@ class VSETB_OT_upload_to_tracker(Operator): def invoke(self, context, event): prefs = get_addon_prefs() settings = get_scene_settings() - project = settings.active_project + self.project = settings.active_project tracker = prefs.tracker tracker.connect() #self.bl_label = f"Upload to {settings.tracker_name.title()}" - return context.window_manager.invoke_props_dialog(self) + return context.window_manager.invoke_props_dialog(self, width=350) def draw(self, context): scn = context.scene - settings = get_scene_settings() + upload_to_tracker = self.project.upload_to_tracker layout = self.layout col = layout.column() col.use_property_split = True - col.prop(self, 'task', text='Task') - col.prop(self, 'status', text='Status') - col.prop(self, 'comment', text='Comment') - row = col.row(heading='Add Preview') - row.prop(self, 'add_preview', text='') - row.prop(self, 'preview_mode', text='') + col.use_property_decorate = False + col.prop(upload_to_tracker, 'render_strips', text='Render Strips') + if upload_to_tracker.render_strips: + col.use_property_split = False + col.prop(upload_to_tracker, 'render_strip_template', text='') + col.use_property_split = True + #else: + # col.label(text=f'Source: {self.project.render_video_strip_template}') + col.separator() - col.prop(self, 'casting', text='Casting') - col.prop(self, 'custom_data', text='Custom Data') - col.prop(self, 'tasks_comment', text='Tasks Comment') - col.prop(self, 'set_main_preview', text='Set Main Preview') + + col.prop(upload_to_tracker, 'task', text='Task') + col.prop(upload_to_tracker, 'status', text='Status') + col.prop(upload_to_tracker, 'comment', text='Comment') + row = col.row(heading='Add Preview') + row.prop(upload_to_tracker, 'add_preview', text='') + row.prop(upload_to_tracker, 'preview_mode', text='') + if upload_to_tracker.add_preview and not upload_to_tracker.render_strips: + col.use_property_split = False + col.prop(self.project, 'render_video_strip_template', text='') + col.use_property_split = True + + col.separator() + col.prop(upload_to_tracker, 'custom_data', text='Custom Data') + col.prop(upload_to_tracker, 'update_frames', text='Update frames') + col.prop(upload_to_tracker, 'casting', text='Casting') + col.prop(upload_to_tracker, 'tasks_comment', text='Tasks Comment') + col.prop(upload_to_tracker, 'set_main_preview', text='Set Main Preview') def execute(self, context): #self.report({'ERROR'}, f'Export not implemented yet.') prefs = get_addon_prefs() settings = get_scene_settings() - project = settings.active_project + upload_to_tracker = self.project.upload_to_tracker + episode = None if settings.active_episode: episode = settings.active_episode.id - format_data = {**settings.format_data, **project.format_data} - + format_data = {**settings.format_data, **self.project.format_data} tracker = prefs.tracker - status = self.status + status = upload_to_tracker.status if status == 'CURRENT': status = None @@ -360,15 +360,19 @@ class VSETB_OT_upload_to_tracker(Operator): self.report({"INFO"}, f'Create shot {shot_name} in Kitsu') shot = tracker.new_shot(shot_name, sequence=sequence) - task = tracker.get_task(self.task, entity=shot) + task = tracker.get_task(upload_to_tracker.task, entity=shot) if not task: - task = tracker.new_task(shot, task_type=self.task) + task = tracker.new_task(shot, task_type=upload_to_tracker.task) preview = None - if self.add_preview: + if upload_to_tracker.add_preview: strip_data = {**format_data, **strip_settings.format_data} - preview_template = expandvars(project.render_video_strip_template) + if upload_to_tracker.render_strips: + preview_template = expandvars(upload_to_tracker.render_strip_template) + else: + preview_template = expandvars(self.project.render_video_strip_template) + preview = preview_template.format(**strip_data) preview = Path(os.path.abspath(bpy.path.abspath(preview))) #print(preview) @@ -377,24 +381,41 @@ class VSETB_OT_upload_to_tracker(Operator): preview = None elif task.get('last_comment') and task['last_comment']['previews']: - if self.preview_mode == 'REPLACE': + if upload_to_tracker.preview_mode == 'REPLACE': tracker.remove_comment(task['last_comment']) - elif self.preview_mode == 'ONLY_NEW': + elif upload_to_tracker.preview_mode == 'ONLY_NEW': preview = None - if status or preview: - tracker.new_comment(task, comment=self.comment, status=status, preview=preview, set_main_preview=self.set_main_preview) + comment_data = None + if status or comment or preview: + comment_data = tracker.new_comment(task, comment=upload_to_tracker.comment, status=status) + if preview: + print('Upload preview from', preview) + preview_data = tracker.new_preview( + task=task, + comment=comment_data, + preview=preview) - if self.custom_data: - description = strip_settings.description - tracker.update_data(shot, metadata, frames=strip.frame_final_duration, description=description) + if upload_to_tracker.set_main_preview: + bpy.app.timers.register(partial(tracker.set_main_preview, preview_data), first_interval=10) + + params = {} + if upload_to_tracker.custom_data: + params['custom_data'] = metadata + params['description'] = strip_settings.description - if self.casting: + if upload_to_tracker.update_frames: + params['frames'] = strip.frame_final_duration + + if params: + tracker.update_data(shot, **params) + + if upload_to_tracker.casting: casting = [{'asset_id': a.id, 'nb_occurences': a.instance} for a in strip_settings.casting] tracker.update_casting(shot, casting) - if self.tasks_comment: - for task_type in project.task_types: + if upload_to_tracker.tasks_comment: + for task_type in self.project.task_types: task = getattr(strip_settings.tasks, norm_name(task_type.name)) tracker_task = tracker.get_task(task_type.name, entity=shot) @@ -405,6 +426,28 @@ class VSETB_OT_upload_to_tracker(Operator): return {"FINISHED"} +class VSETB_OT_open_shot_on_tracker(Operator): + bl_idname = "vse_toolbox.open_shot_on_tracker" + bl_label = "Open Shot on Tracker" + bl_description = "Open Shot on Tracker" + + @classmethod + def poll(cls, context): + prefs = get_addon_prefs() + if prefs.tracker: + return True + + def execute(self, context): + prefs = get_addon_prefs() + tracker = prefs.tracker + + strips = get_strips(channel='Shots', selected_only=True) + url = tracker.get_shots_search_url([s.name for s in strips]) + + webbrowser.open_new_tab(url) + + return {"FINISHED"} + @persistent def set_asset_items(scene=None): ASSET_ITEMS.clear() @@ -420,6 +463,7 @@ classes = ( VSETB_OT_new_episode, VSETB_OT_tracker_connect, VSETB_OT_upload_to_tracker, + VSETB_OT_open_shot_on_tracker ) def register(): diff --git a/resources/app_templates/Review/__init__.py b/resources/app_templates/Review/__init__.py new file mode 100644 index 0000000..22015a2 --- /dev/null +++ b/resources/app_templates/Review/__init__.py @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +import bpy +from bpy.app.handlers import persistent + + +def update_factory_startup_screens(): + screen = bpy.data.screens["Review"] + + +def update_factory_startup_ffmpeg_preset(): + from bpy import context + + preset = "H264_in_MP4" + preset_filepath = bpy.utils.preset_find(preset, preset_path="ffmpeg") + if not preset_filepath: + print("Preset %r not found" % preset) + + for scene in bpy.data.scenes: + render = scene.render + render.image_settings.file_format = 'FFMPEG' + + if preset_filepath: + with context.temp_override(scene=scene): + bpy.ops.script.python_file_run(filepath=preset_filepath) + + render.ffmpeg.audio_codec = 'AAC' + render.ffmpeg.audio_bitrate = 128 + render.ffmpeg.audio_mixrate = 44100 + + + +@persistent +def load_handler(_): + update_factory_startup_screens() + if bpy.app.build_options.codec_ffmpeg: + update_factory_startup_ffmpeg_preset() + + +def register(): + bpy.app.handlers.load_factory_startup_post.append(load_handler) + + +def unregister(): + bpy.app.handlers.load_factory_startup_post.remove(load_handler) diff --git a/resources/app_templates/Review/startup.blend b/resources/app_templates/Review/startup.blend new file mode 100644 index 0000000000000000000000000000000000000000..79e8e58c1fb81721f5287b30a1183ef4ed4ed69a GIT binary patch literal 458836 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

EKob(1~^WNza*mIJji3QUT$HBRedGG#c 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ΞB4TeD* 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