89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
from typing import Tuple, Optional
|
|
from time import sleep
|
|
import gradio
|
|
|
|
import deepfuze.globals
|
|
from deepfuze import process_manager, wording
|
|
from deepfuze.core import conditional_process
|
|
from deepfuze.memory import limit_system_memory
|
|
from deepfuze.normalizer import normalize_output_path
|
|
from deepfuze.uis.core import get_ui_component
|
|
from deepfuze.filesystem import clear_temp, is_image, is_video
|
|
|
|
OUTPUT_IMAGE : Optional[gradio.Image] = None
|
|
OUTPUT_VIDEO : Optional[gradio.Video] = None
|
|
OUTPUT_START_BUTTON : Optional[gradio.Button] = None
|
|
OUTPUT_CLEAR_BUTTON : Optional[gradio.Button] = None
|
|
OUTPUT_STOP_BUTTON : Optional[gradio.Button] = None
|
|
|
|
|
|
def render() -> None:
|
|
global OUTPUT_IMAGE
|
|
global OUTPUT_VIDEO
|
|
global OUTPUT_START_BUTTON
|
|
global OUTPUT_STOP_BUTTON
|
|
global OUTPUT_CLEAR_BUTTON
|
|
|
|
OUTPUT_IMAGE = gradio.Image(
|
|
label = wording.get('uis.output_image_or_video'),
|
|
visible = False
|
|
)
|
|
OUTPUT_VIDEO = gradio.Video(
|
|
label = wording.get('uis.output_image_or_video')
|
|
)
|
|
OUTPUT_START_BUTTON = gradio.Button(
|
|
value = wording.get('uis.start_button'),
|
|
variant = 'primary',
|
|
size = 'sm'
|
|
)
|
|
OUTPUT_STOP_BUTTON = gradio.Button(
|
|
value = wording.get('uis.stop_button'),
|
|
variant = 'primary',
|
|
size = 'sm',
|
|
visible = False
|
|
)
|
|
OUTPUT_CLEAR_BUTTON = gradio.Button(
|
|
value = wording.get('uis.clear_button'),
|
|
size = 'sm'
|
|
)
|
|
|
|
|
|
def listen() -> None:
|
|
output_path_textbox = get_ui_component('output_path_textbox')
|
|
if output_path_textbox:
|
|
OUTPUT_START_BUTTON.click(start, outputs = [ OUTPUT_START_BUTTON, OUTPUT_STOP_BUTTON ])
|
|
OUTPUT_START_BUTTON.click(process, outputs = [ OUTPUT_IMAGE, OUTPUT_VIDEO, OUTPUT_START_BUTTON, OUTPUT_STOP_BUTTON ])
|
|
OUTPUT_STOP_BUTTON.click(stop, outputs = [ OUTPUT_START_BUTTON, OUTPUT_STOP_BUTTON ])
|
|
OUTPUT_CLEAR_BUTTON.click(clear, outputs = [ OUTPUT_IMAGE, OUTPUT_VIDEO ])
|
|
|
|
|
|
def start() -> Tuple[gradio.Button, gradio.Button]:
|
|
while not process_manager.is_processing():
|
|
sleep(0.5)
|
|
return gradio.Button(visible = False), gradio.Button(visible = True)
|
|
|
|
|
|
def process() -> Tuple[gradio.Image, gradio.Video, gradio.Button, gradio.Button]:
|
|
normed_output_path = normalize_output_path(deepfuze.globals.target_path, deepfuze.globals.output_path)
|
|
if deepfuze.globals.system_memory_limit > 0:
|
|
limit_system_memory(deepfuze.globals.system_memory_limit)
|
|
conditional_process()
|
|
if is_image(normed_output_path):
|
|
return gradio.Image(value = normed_output_path, visible = True), gradio.Video(value = None, visible = False), gradio.Button(visible = True), gradio.Button(visible = False)
|
|
if is_video(normed_output_path):
|
|
return gradio.Image(value = None, visible = False), gradio.Video(value = normed_output_path, visible = True), gradio.Button(visible = True), gradio.Button(visible = False)
|
|
return gradio.Image(value = None), gradio.Video(value = None), gradio.Button(visible = True), gradio.Button(visible = False)
|
|
|
|
|
|
def stop() -> Tuple[gradio.Button, gradio.Button]:
|
|
process_manager.stop()
|
|
return gradio.Button(visible = True), gradio.Button(visible = False)
|
|
|
|
|
|
def clear() -> Tuple[gradio.Image, gradio.Video]:
|
|
while process_manager.is_processing():
|
|
sleep(0.5)
|
|
if deepfuze.globals.target_path:
|
|
clear_temp(deepfuze.globals.target_path)
|
|
return gradio.Image(value = None), gradio.Video(value = None)
|