Spaces:
Runtime error
Runtime error
| import json | |
| import os | |
| from typing import Optional, Sequence, Tuple | |
| from src.video_util import get_frame_count | |
| class RerenderConfig: | |
| def __init__(self): | |
| ... | |
| def create_from_parameters(self, | |
| input_path: str, | |
| output_path: str, | |
| prompt: str, | |
| work_dir: Optional[str] = None, | |
| key_subdir: str = 'keys', | |
| frame_count: Optional[int] = None, | |
| interval: int = 10, | |
| crop: Sequence[int] = (0, 0, 0, 0), | |
| sd_model: Optional[str] = None, | |
| a_prompt: str = '', | |
| n_prompt: str = '', | |
| ddim_steps=20, | |
| scale=7.5, | |
| control_type: str = 'HED', | |
| control_strength=1, | |
| seed: int = -1, | |
| image_resolution: int = 512, | |
| x0_strength: float = -1, | |
| style_update_freq: int = 10, | |
| cross_period: Tuple[float, float] = (0, 1), | |
| warp_period: Tuple[float, float] = (0, 0.1), | |
| mask_period: Tuple[float, float] = (0.5, 0.8), | |
| ada_period: Tuple[float, float] = (1.0, 1.0), | |
| mask_strength: float = 0.5, | |
| inner_strength: float = 0.9, | |
| smooth_boundary: bool = True, | |
| color_preserve: bool = True, | |
| **kwargs): | |
| self.input_path = input_path | |
| self.output_path = output_path | |
| self.prompt = prompt | |
| self.work_dir = work_dir | |
| if work_dir is None: | |
| self.work_dir = os.path.dirname(output_path) | |
| self.key_dir = os.path.join(self.work_dir, key_subdir) | |
| self.first_dir = os.path.join(self.work_dir, 'first') | |
| # Split video into frames | |
| if not os.path.isfile(input_path): | |
| raise FileNotFoundError(f'Cannot find video file {input_path}') | |
| self.input_dir = os.path.join(self.work_dir, 'video') | |
| self.frame_count = frame_count | |
| if frame_count is None: | |
| self.frame_count = get_frame_count(self.input_path) | |
| self.interval = interval | |
| self.crop = crop | |
| self.sd_model = sd_model | |
| self.a_prompt = a_prompt | |
| self.n_prompt = n_prompt | |
| self.ddim_steps = ddim_steps | |
| self.scale = scale | |
| self.control_type = control_type | |
| if self.control_type == 'canny': | |
| self.canny_low = kwargs.get('canny_low', 100) | |
| self.canny_high = kwargs.get('canny_high', 200) | |
| else: | |
| self.canny_low = None | |
| self.canny_high = None | |
| self.control_strength = control_strength | |
| self.seed = seed | |
| self.image_resolution = image_resolution | |
| self.x0_strength = x0_strength | |
| self.style_update_freq = style_update_freq | |
| self.cross_period = cross_period | |
| self.mask_period = mask_period | |
| self.warp_period = warp_period | |
| self.ada_period = ada_period | |
| self.mask_strength = mask_strength | |
| self.inner_strength = inner_strength | |
| self.smooth_boundary = smooth_boundary | |
| self.color_preserve = color_preserve | |
| os.makedirs(self.input_dir, exist_ok=True) | |
| os.makedirs(self.work_dir, exist_ok=True) | |
| os.makedirs(self.key_dir, exist_ok=True) | |
| os.makedirs(self.first_dir, exist_ok=True) | |
| def create_from_path(self, cfg_path: str): | |
| with open(cfg_path, 'r') as fp: | |
| cfg = json.load(fp) | |
| kwargs = dict() | |
| def append_if_not_none(key): | |
| value = cfg.get(key, None) | |
| if value is not None: | |
| kwargs[key] = value | |
| kwargs['input_path'] = cfg['input'] | |
| kwargs['output_path'] = cfg['output'] | |
| kwargs['prompt'] = cfg['prompt'] | |
| append_if_not_none('work_dir') | |
| append_if_not_none('key_subdir') | |
| append_if_not_none('frame_count') | |
| append_if_not_none('interval') | |
| append_if_not_none('crop') | |
| append_if_not_none('sd_model') | |
| append_if_not_none('a_prompt') | |
| append_if_not_none('n_prompt') | |
| append_if_not_none('ddim_steps') | |
| append_if_not_none('scale') | |
| append_if_not_none('control_type') | |
| if kwargs.get('control_type', '') == 'canny': | |
| append_if_not_none('canny_low') | |
| append_if_not_none('canny_high') | |
| append_if_not_none('control_strength') | |
| append_if_not_none('seed') | |
| append_if_not_none('image_resolution') | |
| append_if_not_none('x0_strength') | |
| append_if_not_none('style_update_freq') | |
| append_if_not_none('cross_period') | |
| append_if_not_none('warp_period') | |
| append_if_not_none('mask_period') | |
| append_if_not_none('ada_period') | |
| append_if_not_none('mask_strength') | |
| append_if_not_none('inner_strength') | |
| append_if_not_none('smooth_boundary') | |
| append_if_not_none('color_perserve') | |
| self.create_from_parameters(**kwargs) | |
| def use_warp(self): | |
| return self.warp_period[0] <= self.warp_period[1] | |
| def use_mask(self): | |
| return self.mask_period[0] <= self.mask_period[1] | |
| def use_ada(self): | |
| return self.ada_period[0] <= self.ada_period[1] | |