from typing import List, Optional import gradio import facefusion.choices from facefusion import content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, state_manager, voice_extractor, wording from facefusion.filesystem import list_directory from facefusion.processors.core import get_processors_modules from facefusion.typing import DownloadProvider DOWNLOAD_PROVIDERS_CHECKBOX_GROUP : Optional[gradio.CheckboxGroup] = None def render() -> None: global DOWNLOAD_PROVIDERS_CHECKBOX_GROUP DOWNLOAD_PROVIDERS_CHECKBOX_GROUP = gradio.CheckboxGroup( label = wording.get('uis.download_providers_checkbox_group'), choices = facefusion.choices.download_providers, value = state_manager.get_item('download_providers') ) def listen() -> None: DOWNLOAD_PROVIDERS_CHECKBOX_GROUP.change(update_download_providers, inputs = DOWNLOAD_PROVIDERS_CHECKBOX_GROUP, outputs = DOWNLOAD_PROVIDERS_CHECKBOX_GROUP) def update_download_providers(download_providers : List[DownloadProvider]) -> gradio.CheckboxGroup: common_modules =\ [ content_analyser, face_classifier, face_detector, face_landmarker, face_recognizer, face_masker, voice_extractor ] available_processors = [ file.get('name') for file in list_directory('facefusion/processors/modules') ] processor_modules = get_processors_modules(available_processors) for module in common_modules + processor_modules: if hasattr(module, 'create_static_model_set'): module.create_static_model_set.cache_clear() download_providers = download_providers or facefusion.choices.download_providers state_manager.set_item('download_providers', download_providers) return gradio.CheckboxGroup(value = state_manager.get_item('download_providers'))