mirror of
https://github.com/facefusion/facefusion.git
synced 2026-07-29 05:18:57 +02:00
63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
from typing import Optional
|
|
|
|
import gradio
|
|
|
|
from facefusion import state_manager, translator
|
|
from facefusion.filesystem import is_video
|
|
from facefusion.uis import choices as uis_choices
|
|
from facefusion.uis.core import get_ui_components, register_ui_component
|
|
from facefusion.uis.types import ComponentOptions
|
|
from facefusion.vision import count_video_frame_total
|
|
|
|
PREVIEW_FRAME_SLIDER: Optional[gradio.Slider] = None
|
|
PREVIEW_MODE_DROPDOWN: Optional[gradio.Dropdown] = None
|
|
PREVIEW_RESOLUTION_DROPDOWN: Optional[gradio.Dropdown] = None
|
|
|
|
|
|
def render() -> None:
|
|
global PREVIEW_FRAME_SLIDER, PREVIEW_MODE_DROPDOWN, PREVIEW_RESOLUTION_DROPDOWN
|
|
|
|
preview_frame_slider_options : ComponentOptions =\
|
|
{
|
|
'label': translator.get('uis.preview_frame_slider'),
|
|
'step': 1,
|
|
'minimum': 0,
|
|
'maximum': 100,
|
|
'visible': False
|
|
}
|
|
if is_video(state_manager.get_item('target_path')):
|
|
video_frame_total = count_video_frame_total(state_manager.get_item('target_path'))
|
|
preview_frame_slider_options['value'] = state_manager.get_item('reference_frame_number')
|
|
preview_frame_slider_options['maximum'] = video_frame_total - 1
|
|
preview_frame_slider_options['visible'] = True
|
|
PREVIEW_FRAME_SLIDER = gradio.Slider(**preview_frame_slider_options)
|
|
with gradio.Row():
|
|
PREVIEW_MODE_DROPDOWN = gradio.Dropdown(
|
|
label = translator.get('uis.preview_mode_dropdown'),
|
|
value = uis_choices.preview_modes[0],
|
|
choices = uis_choices.preview_modes,
|
|
visible = True
|
|
)
|
|
PREVIEW_RESOLUTION_DROPDOWN = gradio.Dropdown(
|
|
label = translator.get('uis.preview_resolution_dropdown'),
|
|
value = uis_choices.preview_resolutions[-1],
|
|
choices = uis_choices.preview_resolutions,
|
|
visible = True
|
|
)
|
|
register_ui_component('preview_mode_dropdown', PREVIEW_MODE_DROPDOWN)
|
|
register_ui_component('preview_resolution_dropdown', PREVIEW_RESOLUTION_DROPDOWN)
|
|
register_ui_component('preview_frame_slider', PREVIEW_FRAME_SLIDER)
|
|
|
|
|
|
def listen() -> None:
|
|
for ui_component in get_ui_components([ 'target_image', 'target_video' ]):
|
|
for method in [ 'change', 'clear' ]:
|
|
getattr(ui_component, method)(update_preview_frame_slider, outputs = PREVIEW_FRAME_SLIDER)
|
|
|
|
|
|
def update_preview_frame_slider() -> gradio.Slider:
|
|
if is_video(state_manager.get_item('target_path')):
|
|
video_frame_total = count_video_frame_total(state_manager.get_item('target_path'))
|
|
return gradio.Slider(maximum = video_frame_total - 1, visible = True)
|
|
return gradio.Slider(value = 0, visible = False)
|