| 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) |
|
|