from typing import List, Optional import gradio import facefusion.choices from facefusion import state_manager, translator, voice_extractor from facefusion.filesystem import is_video from facefusion.types import VoiceExtractorModel from facefusion.uis.core import get_ui_component, get_ui_components, register_ui_component VOICE_EXTRACTOR_MODEL_DROPDOWN : Optional[gradio.Dropdown] = None def render() -> None: global VOICE_EXTRACTOR_MODEL_DROPDOWN has_lip_syncer = 'lip_syncer' in state_manager.get_item('processors') VOICE_EXTRACTOR_MODEL_DROPDOWN = gradio.Dropdown( label = translator.get('uis.voice_extractor_model_dropdown'), choices = facefusion.choices.voice_extractor_models, value = state_manager.get_item('voice_extractor_model'), visible = is_video(state_manager.get_item('target_path')) and has_lip_syncer ) register_ui_component('voice_extractor_model_dropdown', VOICE_EXTRACTOR_MODEL_DROPDOWN) def listen() -> None: VOICE_EXTRACTOR_MODEL_DROPDOWN.change(update_voice_extractor_model, inputs = VOICE_EXTRACTOR_MODEL_DROPDOWN, outputs = VOICE_EXTRACTOR_MODEL_DROPDOWN) processors_checkbox_group = get_ui_component('processors_checkbox_group') if processors_checkbox_group: processors_checkbox_group.change(remote_update, inputs = processors_checkbox_group, outputs = VOICE_EXTRACTOR_MODEL_DROPDOWN) for ui_component in get_ui_components( [ 'target_image', 'target_video' ]): for method in [ 'change', 'clear' ]: getattr(ui_component, method)(remote_update, inputs = processors_checkbox_group, outputs = VOICE_EXTRACTOR_MODEL_DROPDOWN) def remote_update(processors : List[str]) -> gradio.Dropdown: has_lip_syncer = 'lip_syncer' in processors if is_video(state_manager.get_item('target_path')) and has_lip_syncer: return gradio.Dropdown(visible = True) return gradio.Dropdown(visible = False) def update_voice_extractor_model(voice_extractor_model : VoiceExtractorModel) -> gradio.Dropdown: voice_extractor.clear_inference_pool() state_manager.set_item('voice_extractor_model', voice_extractor_model) if voice_extractor.pre_check(): gradio.Dropdown(value = state_manager.get_item('voice_extractor_model')) return gradio.Dropdown()