from pathlib import Path import uuid import pickle as pkl from dynamic_utils import Sampler, get_layout from utils import clean_temp_dir, get_scene_data, get_scene_dir_path from video_utils import Video_Generator from utils import get_video_path, read_character def generate_schedules(scene_file_name, character_files): scene_dir = get_scene_dir_path(scene_file_name) house_info = get_scene_data(scene_dir) activity_base_list = [] character_info_list = [] schedule_list = [] for character_file in character_files: activity_base, character_info, schedule = read_character(character_file) activity_base_list.append(activity_base) character_info_list.append(character_info) schedule_list.append(schedule) #set sampler sampler = Sampler() sampler.set_activity(character_info_list, activity_base_list, schedule_list) scene_layout = get_layout(house_info) sampler.set_scene_layout(scene_layout) schedules, _, _ = sampler.sample() return schedules def save_vedio(schedules, scene_id, vedio_path): video_generator = Video_Generator() video_generator.generate(schedules, scene_id, vedio_path) def generate_video(scene_file_name: str, character_files: list[dict|str|Path], max_try_num: int=5) -> Path: for _ in range(max_try_num): try: schedules = generate_schedules(scene_file_name, character_files) clean_temp_dir() video_path = get_video_path() save_vedio(schedules, scene_file_name, video_path) return video_path except: continue return None