from time import sleep from typing import Any, Dict, Tuple, Optional import gradio import DeepFakeAI.globals from DeepFakeAI import wording from DeepFakeAI.capturer import get_video_frame_total from DeepFakeAI.uis import core as ui from DeepFakeAI.uis.typing import Update from DeepFakeAI.utilities import is_video TRIM_FRAME_START_SLIDER : Optional[gradio.Slider] = None TRIM_FRAME_END_SLIDER : Optional[gradio.Slider] = None def render() -> None: global TRIM_FRAME_START_SLIDER global TRIM_FRAME_END_SLIDER with gradio.Box(): trim_frame_start_slider_args : Dict[str, Any] = { 'label': wording.get('trim_frame_start_slider_label'), 'step': 1, 'visible': False } trim_frame_end_slider_args : Dict[str, Any] = { 'label': wording.get('trim_frame_end_slider_label'), 'step': 1, 'visible': False } if is_video(DeepFakeAI.globals.target_path): video_frame_total = get_video_frame_total(DeepFakeAI.globals.target_path) trim_frame_start_slider_args['value'] = DeepFakeAI.globals.trim_frame_start or 0 trim_frame_start_slider_args['maximum'] = video_frame_total trim_frame_start_slider_args['visible'] = True trim_frame_end_slider_args['value'] = DeepFakeAI.globals.trim_frame_end or video_frame_total trim_frame_end_slider_args['maximum'] = video_frame_total trim_frame_end_slider_args['visible'] = True with gradio.Row(): TRIM_FRAME_START_SLIDER = gradio.Slider(**trim_frame_start_slider_args) TRIM_FRAME_END_SLIDER = gradio.Slider(**trim_frame_end_slider_args) def listen() -> None: target_file = ui.get_component('target_file') if target_file: target_file.change(remote_update, outputs = [ TRIM_FRAME_START_SLIDER, TRIM_FRAME_END_SLIDER ]) TRIM_FRAME_START_SLIDER.change(lambda value : update_number('trim_frame_start', int(value)), inputs = TRIM_FRAME_START_SLIDER, outputs = TRIM_FRAME_START_SLIDER) TRIM_FRAME_END_SLIDER.change(lambda value : update_number('trim_frame_end', int(value)), inputs = TRIM_FRAME_END_SLIDER, outputs = TRIM_FRAME_END_SLIDER) def remote_update() -> Tuple[Update, Update]: sleep(0.1) if is_video(DeepFakeAI.globals.target_path): video_frame_total = get_video_frame_total(DeepFakeAI.globals.target_path) DeepFakeAI.globals.trim_frame_start = 0 DeepFakeAI.globals.trim_frame_end = video_frame_total return gradio.update(value = 0, maximum = video_frame_total, visible = True), gradio.update(value = video_frame_total, maximum = video_frame_total, visible = True) return gradio.update(value = None, maximum = None, visible = False), gradio.update(value = None, maximum = None, visible = False) def update_number(name : str, value : int) -> Update: setattr(DeepFakeAI.globals, name, value) return gradio.update(value = value)