80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
from typing import Any, Dict, Tuple, Optional
|
|
import gradio
|
|
|
|
import deepfuze.globals
|
|
from deepfuze import wording
|
|
from deepfuze.face_store import clear_static_faces
|
|
from deepfuze.vision import count_video_frame_total
|
|
from deepfuze.filesystem import is_video
|
|
from deepfuze.uis.core import get_ui_components, register_ui_component
|
|
|
|
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
|
|
|
|
trim_frame_start_slider_args : Dict[str, Any] =\
|
|
{
|
|
'label': wording.get('uis.trim_frame_start_slider'),
|
|
'step': 1,
|
|
'minimum': 0,
|
|
'maximum': 100,
|
|
'visible': False
|
|
}
|
|
trim_frame_end_slider_args : Dict[str, Any] =\
|
|
{
|
|
'label': wording.get('uis.trim_frame_end_slider'),
|
|
'step': 1,
|
|
'minimum': 0,
|
|
'maximum': 100,
|
|
'visible': False
|
|
}
|
|
if is_video(deepfuze.globals.target_path):
|
|
video_frame_total = count_video_frame_total(deepfuze.globals.target_path)
|
|
trim_frame_start_slider_args['value'] = deepfuze.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'] = deepfuze.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)
|
|
register_ui_component('trim_frame_start_slider', TRIM_FRAME_START_SLIDER)
|
|
register_ui_component('trim_frame_end_slider', TRIM_FRAME_END_SLIDER)
|
|
|
|
|
|
def listen() -> None:
|
|
TRIM_FRAME_START_SLIDER.release(update_trim_frame_start, inputs = TRIM_FRAME_START_SLIDER)
|
|
TRIM_FRAME_END_SLIDER.release(update_trim_frame_end, inputs = TRIM_FRAME_END_SLIDER)
|
|
for ui_component in get_ui_components(
|
|
[
|
|
'target_image',
|
|
'target_video'
|
|
]):
|
|
for method in [ 'upload', 'change', 'clear' ]:
|
|
getattr(ui_component, method)(remote_update, outputs = [ TRIM_FRAME_START_SLIDER, TRIM_FRAME_END_SLIDER ])
|
|
|
|
|
|
def remote_update() -> Tuple[gradio.Slider, gradio.Slider]:
|
|
if is_video(deepfuze.globals.target_path):
|
|
video_frame_total = count_video_frame_total(deepfuze.globals.target_path)
|
|
deepfuze.globals.trim_frame_start = None
|
|
deepfuze.globals.trim_frame_end = None
|
|
return gradio.Slider(value = 0, maximum = video_frame_total, visible = True), gradio.Slider(value = video_frame_total, maximum = video_frame_total, visible = True)
|
|
return gradio.Slider(value = None, maximum = None, visible = False), gradio.Slider(value = None, maximum = None, visible = False)
|
|
|
|
|
|
def update_trim_frame_start(trim_frame_start : int) -> None:
|
|
clear_static_faces()
|
|
deepfuze.globals.trim_frame_start = trim_frame_start if trim_frame_start > 0 else None
|
|
|
|
|
|
def update_trim_frame_end(trim_frame_end : int) -> None:
|
|
clear_static_faces()
|
|
video_frame_total = count_video_frame_total(deepfuze.globals.target_path)
|
|
deepfuze.globals.trim_frame_end = trim_frame_end if trim_frame_end < video_frame_total else None
|