
* Improve typing for our callbacks * Return 0 for get_download_size * Introduce ONNX powered face enhancer * Introduce ONNX powered face enhancer * Introduce ONNX powered face enhancer * Remove tile processing from frame enhancer * Fix video compress translation for libvpx-vp9 * Allow zero values for video compression * Develop (#134) * Introduce model options to the frame processors * Finish UI to select frame processors models * Simplify frame processors options * Fix lint in CI * Rename all kind of settings to options * Add blend to enhancers * Simplify webcam mode naming * Bypass SSL issues under Windows * Fix blend of frame enhancer * Massive CLI refactoring, Register and apply ARGS via the frame processors * Refine UI theme and introduce donate button * Update dependencies and fix cpu only torch * Update dependencies and fix cpu only torch * Fix theme, Fix frame_processors in headless mode * Remove useless astype * Disable CoreML for the ONNX face enhancer * Disable CoreML for the ONNX face enhancer * Predict webcam too * Improve resize of preview * Change output quality defaults, Move options to the right * Support for codeformer model * Update the typo * Add GPEN and GFPGAN 1.2 * Extract blend_frame methods * Extend the installer * Revert broken Gradio * Rework on ui components * Move output path selector to the output options * Remove tons of pointless component updates * Reset more base theme styling * Use latest Gradio * Fix the sliders * More styles * Update torch to 2.1.0 * Add RealESRNet_x4plus * Fix that button * Use latest onnxruntime-silicon * Looks stable to me * Lowercase model keys, Update preview and readme
71 lines
2.8 KiB
Python
71 lines
2.8 KiB
Python
from typing import Any, Dict, Tuple, Optional
|
|
import gradio
|
|
|
|
import facefusion.globals
|
|
from facefusion import wording
|
|
from facefusion.vision import count_video_frame_total
|
|
from facefusion.utilities import is_video
|
|
from facefusion.uis.core import get_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('trim_frame_start_slider_label'),
|
|
'step': 1,
|
|
'minimum': 0,
|
|
'maximum': 100,
|
|
'visible': False
|
|
}
|
|
trim_frame_end_slider_args : Dict[str, Any] =\
|
|
{
|
|
'label': wording.get('trim_frame_end_slider_label'),
|
|
'step': 1,
|
|
'minimum': 0,
|
|
'maximum': 100,
|
|
'visible': False
|
|
}
|
|
if is_video(facefusion.globals.target_path):
|
|
video_frame_total = count_video_frame_total(facefusion.globals.target_path)
|
|
trim_frame_start_slider_args['value'] = facefusion.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'] = facefusion.globals.trim_frame_end or video_frame_total
|
|
trim_frame_end_slider_args['maximum'] = video_frame_total
|
|
trim_frame_end_slider_args['visible'] = True
|
|
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:
|
|
TRIM_FRAME_START_SLIDER.change(update_trim_frame_start, inputs = TRIM_FRAME_START_SLIDER)
|
|
TRIM_FRAME_END_SLIDER.change(update_trim_frame_end, inputs = TRIM_FRAME_END_SLIDER)
|
|
target_video = get_ui_component('target_video')
|
|
if target_video:
|
|
for method in [ 'upload', 'change', 'clear' ]:
|
|
getattr(target_video, method)(remote_update, outputs = [ TRIM_FRAME_START_SLIDER, TRIM_FRAME_END_SLIDER ])
|
|
|
|
|
|
def remote_update() -> Tuple[gradio.Slider, gradio.Slider]:
|
|
if is_video(facefusion.globals.target_path):
|
|
video_frame_total = count_video_frame_total(facefusion.globals.target_path)
|
|
facefusion.globals.trim_frame_start = None
|
|
facefusion.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:
|
|
facefusion.globals.trim_frame_start = trim_frame_start if trim_frame_start > 0 else None
|
|
|
|
|
|
def update_trim_frame_end(trim_frame_end : int) -> None:
|
|
video_frame_total = count_video_frame_total(facefusion.globals.target_path)
|
|
facefusion.globals.trim_frame_end = trim_frame_end if trim_frame_end < video_frame_total else None
|