Blender Kitsu: Refactor Shot Builder #183
@ -118,3 +118,15 @@ OUTPUT_COL_LINK_MAPPING = {
|
|||||||
"smear_to_mesh": None,
|
"smear_to_mesh": None,
|
||||||
"storyboard": None,
|
"storyboard": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOAD_EDITORIAL_REF = {
|
||||||
|
"anim": True,
|
||||||
|
"comp": False,
|
||||||
|
"fx": False,
|
||||||
|
"layout": True,
|
||||||
|
"lighting": False,
|
||||||
|
"previz": False,
|
||||||
|
"rendering": False,
|
||||||
|
"smear_to_mesh": False,
|
||||||
|
"storyboard": False,
|
||||||
|
}
|
||||||
|
@ -0,0 +1,80 @@
|
|||||||
|
import bpy
|
||||||
|
from .. import prefs
|
||||||
|
from pathlib import Path
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
def editorial_export_get_latest(
|
||||||
|
context: bpy.types.Context, shot
|
||||||
|
) -> list[bpy.types.Sequence]: # TODO add info to shot
|
||||||
|
"""Loads latest export from editorial department"""
|
||||||
|
addon_prefs = prefs.addon_prefs_get(context)
|
||||||
|
strip_channel = 1
|
||||||
|
latest_file = editorial_export_check_latest(context)
|
||||||
|
if not latest_file:
|
||||||
|
return None
|
||||||
|
# Check if Kitsu server returned empty shot
|
||||||
|
if shot.id == '':
|
||||||
|
return None
|
||||||
|
strip_filepath = latest_file.as_posix()
|
||||||
|
strip_frame_start = addon_prefs.shot_builder_frame_offset
|
||||||
|
|
||||||
|
scene = context.scene
|
||||||
|
if not scene.sequence_editor:
|
||||||
|
scene.sequence_editor_create()
|
||||||
|
seq_editor = scene.sequence_editor
|
||||||
|
movie_strip = seq_editor.sequences.new_movie(
|
||||||
|
latest_file.name,
|
||||||
|
strip_filepath,
|
||||||
|
strip_channel + 1,
|
||||||
|
strip_frame_start,
|
||||||
|
fit_method="FIT",
|
||||||
|
)
|
||||||
|
sound_strip = seq_editor.sequences.new_sound(
|
||||||
|
latest_file.name,
|
||||||
|
strip_filepath,
|
||||||
|
strip_channel,
|
||||||
|
strip_frame_start,
|
||||||
|
)
|
||||||
|
new_strips = [movie_strip, sound_strip]
|
||||||
|
|
||||||
|
# Update shift frame range prop.
|
||||||
|
frame_in = shot.data.get("frame_in")
|
||||||
|
frame_3d_start = shot.data.get("3d_start")
|
||||||
|
frame_3d_offset = frame_3d_start - addon_prefs.shot_builder_frame_offset
|
||||||
|
edit_export_offset = addon_prefs.edit_export_frame_offset
|
||||||
|
|
||||||
|
# Set sequence strip start kitsu data.
|
||||||
|
for strip in new_strips:
|
||||||
|
strip.frame_start = (
|
||||||
|
-frame_in + (strip_frame_start * 2) + frame_3d_offset + edit_export_offset
|
||||||
|
)
|
||||||
|
return new_strips
|
||||||
|
|
||||||
|
|
||||||
|
def editorial_export_check_latest(context: bpy.types.Context):
|
||||||
|
"""Find latest export in editorial export directory"""
|
||||||
|
addon_prefs = prefs.addon_prefs_get(context)
|
||||||
|
|
||||||
|
edit_export_path = Path(addon_prefs.edit_export_dir)
|
||||||
|
|
||||||
|
files_list = [
|
||||||
|
f
|
||||||
|
for f in edit_export_path.iterdir()
|
||||||
|
if f.is_file()
|
||||||
|
and editorial_export_is_valid_edit_name(
|
||||||
|
addon_prefs.edit_export_file_pattern, f.name
|
||||||
|
)
|
||||||
|
]
|
||||||
|
if len(files_list) >= 1:
|
||||||
|
files_list = sorted(files_list, reverse=True)
|
||||||
|
return files_list[0]
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def editorial_export_is_valid_edit_name(file_pattern: str, filename: str) -> bool:
|
||||||
|
"""Verify file name matches file pattern set in preferences"""
|
||||||
|
match = re.search(file_pattern, filename)
|
||||||
|
if match:
|
||||||
|
return True
|
||||||
|
return False
|
@ -14,6 +14,8 @@ from .core import (
|
|||||||
link_task_type_output_collections,
|
link_task_type_output_collections,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from .editorial import editorial_export_get_latest
|
||||||
|
|
||||||
active_project = None
|
active_project = None
|
||||||
|
|
||||||
|
|
||||||
@ -164,6 +166,9 @@ class KITSU_OT_build_new_shot(bpy.types.Operator):
|
|||||||
# Link External Output Collections
|
# Link External Output Collections
|
||||||
link_task_type_output_collections(shot, task_short_name)
|
link_task_type_output_collections(shot, task_short_name)
|
||||||
|
|
||||||
|
if bkglobals.LOAD_EDITORIAL_REF.get(task_short_name):
|
||||||
|
editorial_export_get_latest(context, shot)
|
||||||
|
|
||||||
print("Create shot with the following details") # TODO Remove
|
print("Create shot with the following details") # TODO Remove
|
||||||
print(f"Seq Name: '{seq.name}' Seq ID: '{self.seq_id}'")
|
print(f"Seq Name: '{seq.name}' Seq ID: '{self.seq_id}'")
|
||||||
print(f"Shot Name: '{shot.name}' Shot ID: '{self.shot_id}'")
|
print(f"Shot Name: '{shot.name}' Shot ID: '{self.shot_id}'")
|
||||||
|
Loading…
Reference in New Issue
Block a user