From c7a85e327f5865b15d8c0b917b535f513934de8d Mon Sep 17 00:00:00 2001 From: harisreedhar Date: Fri, 8 Nov 2024 13:47:15 +0530 Subject: [PATCH] update processors download method --- facefusion/processors/modules/age_modifier.py | 55 +- .../processors/modules/expression_restorer.py | 79 +-- facefusion/processors/modules/face_editor.py | 139 ++-- .../processors/modules/face_enhancer.py | 331 +++++----- facefusion/processors/modules/face_swapper.py | 523 +++++++-------- .../processors/modules/frame_colorizer.py | 177 ++--- .../processors/modules/frame_enhancer.py | 619 +++++++++--------- 7 files changed, 965 insertions(+), 958 deletions(-) diff --git a/facefusion/processors/modules/age_modifier.py b/facefusion/processors/modules/age_modifier.py index 8a4d080a..571a9f84 100755 --- a/facefusion/processors/modules/age_modifier.py +++ b/facefusion/processors/modules/age_modifier.py @@ -10,7 +10,7 @@ import facefusion.jobs.job_store import facefusion.processors.core as processors from facefusion import config, content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, inference_manager, logger, process_manager, state_manager, wording from facefusion.common_helper import create_int_metavar -from facefusion.download import conditional_download_hashes, conditional_download_sources +from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url from facefusion.face_analyser import get_many_faces, get_one_face from facefusion.face_helper import merge_matrix, paste_back, scale_face_landmark_5, warp_face_by_face_landmark_5 from facefusion.face_masker import create_occlusion_mask, create_static_box_mask @@ -24,39 +24,40 @@ from facefusion.thread_helper import thread_semaphore from facefusion.typing import ApplyStateItem, Args, Face, InferencePool, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.vision import match_frame_color, read_image, read_static_image, write_image -MODEL_SET : ModelSet =\ -{ - 'styleganex_age': +def create_model_set() -> ModelSet: + return\ { - 'hashes': + 'styleganex_age': { - 'age_modifier': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/styleganex_age.hash', - 'path': resolve_relative_path('../.assets/models/styleganex_age.hash') - } - }, - 'sources': - { - 'age_modifier': + 'age_modifier': + { + 'url': resolve_download_url('models-3.0.0', 'styleganex_age.hash'), + 'path': resolve_relative_path('../.assets/models/styleganex_age.hash') + } + }, + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/styleganex_age.onnx', - 'path': resolve_relative_path('../.assets/models/styleganex_age.onnx') + 'age_modifier': + { + 'url': resolve_download_url('models-3.0.0', 'styleganex_age.onnx'), + 'path': resolve_relative_path('../.assets/models/styleganex_age.onnx') + } + }, + 'templates': + { + 'target': 'ffhq_512', + 'target_with_background': 'styleganex_384' + }, + 'sizes': + { + 'target': (256, 256), + 'target_with_background': (384, 384) } - }, - 'templates': - { - 'target': 'ffhq_512', - 'target_with_background': 'styleganex_384' - }, - 'sizes': - { - 'target': (256, 256), - 'target_with_background': (384, 384) } } -} def get_inference_pool() -> InferencePool: @@ -72,7 +73,7 @@ def clear_inference_pool() -> None: def get_model_options() -> ModelOptions: age_modifier_model = state_manager.get_item('age_modifier_model') - return MODEL_SET.get(age_modifier_model) + return create_model_set().get(age_modifier_model) def register_args(program : ArgumentParser) -> None: diff --git a/facefusion/processors/modules/expression_restorer.py b/facefusion/processors/modules/expression_restorer.py index 0eaa4baa..4c3ecb7d 100755 --- a/facefusion/processors/modules/expression_restorer.py +++ b/facefusion/processors/modules/expression_restorer.py @@ -9,7 +9,7 @@ import facefusion.jobs.job_store import facefusion.processors.core as processors from facefusion import config, content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, inference_manager, logger, process_manager, state_manager, wording from facefusion.common_helper import create_int_metavar -from facefusion.download import conditional_download_hashes, conditional_download_sources +from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url from facefusion.face_analyser import get_many_faces, get_one_face from facefusion.face_helper import paste_back, warp_face_by_face_landmark_5 from facefusion.face_masker import create_occlusion_mask, create_static_box_mask @@ -25,50 +25,51 @@ from facefusion.thread_helper import conditional_thread_semaphore, thread_semaph from facefusion.typing import ApplyStateItem, Args, Face, InferencePool, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.vision import get_video_frame, read_image, read_static_image, write_image -MODEL_SET : ModelSet =\ -{ - 'live_portrait': +def create_model_set() -> ModelSet: + return\ { - 'hashes': + 'live_portrait': { - 'feature_extractor': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_feature_extractor.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.hash') + 'feature_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_feature_extractor.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.hash') + }, + 'motion_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_motion_extractor.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.hash') + }, + 'generator': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_generator.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_generator.hash') + } }, - 'motion_extractor': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_motion_extractor.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.hash') + 'feature_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_feature_extractor.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.onnx') + }, + 'motion_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_motion_extractor.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.onnx') + }, + 'generator': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_generator.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_generator.onnx') + } }, - 'generator': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_generator.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_generator.hash') - } - }, - 'sources': - { - 'feature_extractor': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_feature_extractor.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.onnx') - }, - 'motion_extractor': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_motion_extractor.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.onnx') - }, - 'generator': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_generator.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_generator.onnx') - } - }, - 'template': 'arcface_128_v2', - 'size': (512, 512) + 'template': 'arcface_128_v2', + 'size': (512, 512) + } } -} def get_inference_pool() -> InferencePool: @@ -83,7 +84,7 @@ def clear_inference_pool() -> None: def get_model_options() -> ModelOptions: expression_restorer_model = state_manager.get_item('expression_restorer_model') - return MODEL_SET.get(expression_restorer_model) + return create_model_set().get(expression_restorer_model) def register_args(program : ArgumentParser) -> None: diff --git a/facefusion/processors/modules/face_editor.py b/facefusion/processors/modules/face_editor.py index 22682bec..23956739 100755 --- a/facefusion/processors/modules/face_editor.py +++ b/facefusion/processors/modules/face_editor.py @@ -9,7 +9,7 @@ import facefusion.jobs.job_store import facefusion.processors.core as processors from facefusion import config, content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, inference_manager, logger, process_manager, state_manager, wording from facefusion.common_helper import create_float_metavar -from facefusion.download import conditional_download_hashes, conditional_download_sources +from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url from facefusion.face_analyser import get_many_faces, get_one_face from facefusion.face_helper import paste_back, scale_face_landmark_5, warp_face_by_face_landmark_5 from facefusion.face_masker import create_static_box_mask @@ -24,80 +24,81 @@ from facefusion.thread_helper import conditional_thread_semaphore, thread_semaph from facefusion.typing import ApplyStateItem, Args, Face, FaceLandmark68, InferencePool, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.vision import read_image, read_static_image, write_image -MODEL_SET : ModelSet =\ -{ - 'live_portrait': +def create_model_set() -> ModelSet: + return\ { - 'hashes': + 'live_portrait': { - 'feature_extractor': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_feature_extractor.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.hash') + 'feature_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_feature_extractor.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.hash') + }, + 'motion_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_motion_extractor.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.hash') + }, + 'eye_retargeter': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_eye_retargeter.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_eye_retargeter.hash') + }, + 'lip_retargeter': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_lip_retargeter.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_lip_retargeter.hash') + }, + 'stitcher': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_stitcher.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_stitcher.hash') + }, + 'generator': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_generator.hash'), + 'path': resolve_relative_path('../.assets/models/live_portrait_generator.hash') + } }, - 'motion_extractor': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_motion_extractor.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.hash') + 'feature_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_feature_extractor.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.onnx') + }, + 'motion_extractor': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_motion_extractor.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.onnx') + }, + 'eye_retargeter': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_eye_retargeter.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_eye_retargeter.onnx') + }, + 'lip_retargeter': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_lip_retargeter.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_lip_retargeter.onnx') + }, + 'stitcher': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_stitcher.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_stitcher.onnx') + }, + 'generator': + { + 'url': resolve_download_url('models-3.0.0', 'live_portrait_generator.onnx'), + 'path': resolve_relative_path('../.assets/models/live_portrait_generator.onnx') + } }, - 'eye_retargeter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_eye_retargeter.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_eye_retargeter.hash') - }, - 'lip_retargeter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_lip_retargeter.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_lip_retargeter.hash') - }, - 'stitcher': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_stitcher.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_stitcher.hash') - }, - 'generator': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_generator.hash', - 'path': resolve_relative_path('../.assets/models/live_portrait_generator.hash') - } - }, - 'sources': - { - 'feature_extractor': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_feature_extractor.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_feature_extractor.onnx') - }, - 'motion_extractor': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_motion_extractor.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_motion_extractor.onnx') - }, - 'eye_retargeter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_eye_retargeter.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_eye_retargeter.onnx') - }, - 'lip_retargeter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_lip_retargeter.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_lip_retargeter.onnx') - }, - 'stitcher': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_stitcher.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_stitcher.onnx') - }, - 'generator': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/live_portrait_generator.onnx', - 'path': resolve_relative_path('../.assets/models/live_portrait_generator.onnx') - } - }, - 'template': 'ffhq_512', - 'size': (512, 512) + 'template': 'ffhq_512', + 'size': (512, 512) + } } -} def get_inference_pool() -> InferencePool: @@ -113,7 +114,7 @@ def clear_inference_pool() -> None: def get_model_options() -> ModelOptions: face_editor_model = state_manager.get_item('face_editor_model') - return MODEL_SET.get(face_editor_model) + return create_model_set().get(face_editor_model) def register_args(program : ArgumentParser) -> None: diff --git a/facefusion/processors/modules/face_enhancer.py b/facefusion/processors/modules/face_enhancer.py index da8d6498..2c78e933 100755 --- a/facefusion/processors/modules/face_enhancer.py +++ b/facefusion/processors/modules/face_enhancer.py @@ -9,7 +9,7 @@ import facefusion.jobs.job_store import facefusion.processors.core as processors from facefusion import config, content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, inference_manager, logger, process_manager, state_manager, wording from facefusion.common_helper import create_int_metavar -from facefusion.download import conditional_download_hashes, conditional_download_sources +from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url from facefusion.face_analyser import get_many_faces, get_one_face from facefusion.face_helper import paste_back, warp_face_by_face_landmark_5 from facefusion.face_masker import create_occlusion_mask, create_static_box_mask @@ -23,198 +23,199 @@ from facefusion.thread_helper import thread_semaphore from facefusion.typing import ApplyStateItem, Args, Face, InferencePool, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.vision import read_image, read_static_image, write_image -MODEL_SET : ModelSet =\ -{ - 'codeformer': +def create_model_set() -> ModelSet: + return\ { - 'hashes': + 'codeformer': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/codeformer.hash', - 'path': resolve_relative_path('../.assets/models/codeformer.hash') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'codeformer.hash'), + 'path': resolve_relative_path('../.assets/models/codeformer.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'codeformer.onnx'), + 'path': resolve_relative_path('../.assets/models/codeformer.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (512, 512) }, - 'sources': + 'gfpgan_1.2': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/codeformer.onnx', - 'path': resolve_relative_path('../.assets/models/codeformer.onnx') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gfpgan_1.2.hash'), + 'path': resolve_relative_path('../.assets/models/gfpgan_1.2.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gfpgan_1.2.onnx'), + 'path': resolve_relative_path('../.assets/models/gfpgan_1.2.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (512, 512) }, - 'template': 'ffhq_512', - 'size': (512, 512) - }, - 'gfpgan_1.2': - { - 'hashes': + 'gfpgan_1.3': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gfpgan_1.2.hash', - 'path': resolve_relative_path('../.assets/models/gfpgan_1.2.hash') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gfpgan_1.3.hash'), + 'path': resolve_relative_path('../.assets/models/gfpgan_1.3.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gfpgan_1.3.onnx'), + 'path': resolve_relative_path('../.assets/models/gfpgan_1.3.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (512, 512) }, - 'sources': + 'gfpgan_1.4': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gfpgan_1.2.onnx', - 'path': resolve_relative_path('../.assets/models/gfpgan_1.2.onnx') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gfpgan_1.4.hash'), + 'path': resolve_relative_path('../.assets/models/gfpgan_1.4.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gfpgan_1.4.onnx'), + 'path': resolve_relative_path('../.assets/models/gfpgan_1.4.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (512, 512) }, - 'template': 'ffhq_512', - 'size': (512, 512) - }, - 'gfpgan_1.3': - { - 'hashes': + 'gpen_bfr_256': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gfpgan_1.3.hash', - 'path': resolve_relative_path('../.assets/models/gfpgan_1.3.hash') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_256.hash'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_256.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_256.onnx'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_256.onnx') + } + }, + 'template': 'arcface_128_v2', + 'size': (256, 256) }, - 'sources': + 'gpen_bfr_512': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gfpgan_1.3.onnx', - 'path': resolve_relative_path('../.assets/models/gfpgan_1.3.onnx') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_512.hash'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_512.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_512.onnx'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_512.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (512, 512) }, - 'template': 'ffhq_512', - 'size': (512, 512) - }, - 'gfpgan_1.4': - { - 'hashes': + 'gpen_bfr_1024': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gfpgan_1.4.hash', - 'path': resolve_relative_path('../.assets/models/gfpgan_1.4.hash') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_1024.hash'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_1024.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_1024.onnx'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_1024.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (1024, 1024) }, - 'sources': + 'gpen_bfr_2048': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gfpgan_1.4.onnx', - 'path': resolve_relative_path('../.assets/models/gfpgan_1.4.onnx') - } + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_2048.hash'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_2048.hash') + } + }, + 'sources': + { + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'gpen_bfr_2048.onnx'), + 'path': resolve_relative_path('../.assets/models/gpen_bfr_2048.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (2048, 2048) }, - 'template': 'ffhq_512', - 'size': (512, 512) - }, - 'gpen_bfr_256': - { - 'hashes': + 'restoreformer_plus_plus': { - 'face_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_256.hash', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_256.hash') - } - }, - 'sources': - { - 'face_enhancer': + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'restoreformer_plus_plus.hash'), + 'path': resolve_relative_path('../.assets/models/restoreformer_plus_plus.hash') + } + }, + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_256.onnx', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_256.onnx') - } - }, - 'template': 'arcface_128_v2', - 'size': (256, 256) - }, - 'gpen_bfr_512': - { - 'hashes': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_512.hash', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_512.hash') - } - }, - 'sources': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_512.onnx', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_512.onnx') - } - }, - 'template': 'ffhq_512', - 'size': (512, 512) - }, - 'gpen_bfr_1024': - { - 'hashes': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_1024.hash', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_1024.hash') - } - }, - 'sources': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_1024.onnx', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_1024.onnx') - } - }, - 'template': 'ffhq_512', - 'size': (1024, 1024) - }, - 'gpen_bfr_2048': - { - 'hashes': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_2048.hash', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_2048.hash') - } - }, - 'sources': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/gpen_bfr_2048.onnx', - 'path': resolve_relative_path('../.assets/models/gpen_bfr_2048.onnx') - } - }, - 'template': 'ffhq_512', - 'size': (2048, 2048) - }, - 'restoreformer_plus_plus': - { - 'hashes': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/restoreformer_plus_plus.hash', - 'path': resolve_relative_path('../.assets/models/restoreformer_plus_plus.hash') - } - }, - 'sources': - { - 'face_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/restoreformer_plus_plus.onnx', - 'path': resolve_relative_path('../.assets/models/restoreformer_plus_plus.onnx') - } - }, - 'template': 'ffhq_512', - 'size': (512, 512) + 'face_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'restoreformer_plus_plus.onnx'), + 'path': resolve_relative_path('../.assets/models/restoreformer_plus_plus.onnx') + } + }, + 'template': 'ffhq_512', + 'size': (512, 512) + } } -} def get_inference_pool() -> InferencePool: @@ -230,7 +231,7 @@ def clear_inference_pool() -> None: def get_model_options() -> ModelOptions: face_enhancer_model = state_manager.get_item('face_enhancer_model') - return MODEL_SET.get(face_enhancer_model) + return create_model_set().get(face_enhancer_model) def register_args(program : ArgumentParser) -> None: diff --git a/facefusion/processors/modules/face_swapper.py b/facefusion/processors/modules/face_swapper.py index 878877c9..954d78d5 100755 --- a/facefusion/processors/modules/face_swapper.py +++ b/facefusion/processors/modules/face_swapper.py @@ -8,7 +8,7 @@ import facefusion.jobs.job_store import facefusion.processors.core as processors from facefusion import config, content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, inference_manager, logger, process_manager, state_manager, wording from facefusion.common_helper import get_first -from facefusion.download import conditional_download_hashes, conditional_download_sources +from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url from facefusion.execution import has_execution_provider from facefusion.face_analyser import get_average_face, get_many_faces, get_one_face from facefusion.face_helper import paste_back, warp_face_by_face_landmark_5 @@ -25,309 +25,310 @@ from facefusion.thread_helper import conditional_thread_semaphore from facefusion.typing import ApplyStateItem, Args, Embedding, Face, InferencePool, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.vision import read_image, read_static_image, read_static_images, unpack_resolution, write_image -MODEL_SET : ModelSet =\ -{ - 'blendswap_256': +def create_model_set() -> ModelSet: + return\ { - 'hashes': + 'blendswap_256': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/blendswap_256.hash', - 'path': resolve_relative_path('../.assets/models/blendswap_256.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/blendswap_256.onnx', - 'path': resolve_relative_path('../.assets/models/blendswap_256.onnx') - } - }, - 'type': 'blendswap', - 'template': 'ffhq_512', - 'size': (256, 256), - 'mean': [ 0.0, 0.0, 0.0 ], - 'standard_deviation': [ 1.0, 1.0, 1.0 ] - }, - 'ghost_1_256': - { - 'hashes': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ghost_1_256.hash', - 'path': resolve_relative_path('../.assets/models/ghost_1_256.hash') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'blendswap_256.hash'), + 'path': resolve_relative_path('../.assets/models/blendswap_256.hash') + } }, - 'embedding_converter': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_ghost.hash', - 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ghost_1_256.onnx', - 'path': resolve_relative_path('../.assets/models/ghost_1_256.onnx') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'blendswap_256.onnx'), + 'path': resolve_relative_path('../.assets/models/blendswap_256.onnx') + } }, - 'embedding_converter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_ghost.onnx', - 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.onnx') - } + 'type': 'blendswap', + 'template': 'ffhq_512', + 'size': (256, 256), + 'mean': [ 0.0, 0.0, 0.0 ], + 'standard_deviation': [ 1.0, 1.0, 1.0 ] }, - 'type': 'ghost', - 'template': 'arcface_112_v1', - 'size': (256, 256), - 'mean': [ 0.5, 0.5, 0.5 ], - 'standard_deviation': [ 0.5, 0.5, 0.5 ] - }, - 'ghost_2_256': - { - 'hashes': + 'ghost_1_256': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ghost_2_256.hash', - 'path': resolve_relative_path('../.assets/models/ghost_2_256.hash') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'ghost_1_256.hash'), + 'path': resolve_relative_path('../.assets/models/ghost_1_256.hash') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_ghost.hash'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.hash') + } }, - 'embedding_converter': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_ghost.hash', - 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ghost_2_256.onnx', - 'path': resolve_relative_path('../.assets/models/ghost_2_256.onnx') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'ghost_1_256.onnx'), + 'path': resolve_relative_path('../.assets/models/ghost_1_256.onnx') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_ghost.onnx'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.onnx') + } }, - 'embedding_converter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_ghost.onnx', - 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.onnx') - } + 'type': 'ghost', + 'template': 'arcface_112_v1', + 'size': (256, 256), + 'mean': [ 0.5, 0.5, 0.5 ], + 'standard_deviation': [ 0.5, 0.5, 0.5 ] }, - 'type': 'ghost', - 'template': 'arcface_112_v1', - 'size': (256, 256), - 'mean': [ 0.5, 0.5, 0.5 ], - 'standard_deviation': [ 0.5, 0.5, 0.5 ] - }, - 'ghost_3_256': - { - 'hashes': + 'ghost_2_256': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ghost_3_256.hash', - 'path': resolve_relative_path('../.assets/models/ghost_3_256.hash') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'ghost_2_256.hash'), + 'path': resolve_relative_path('../.assets/models/ghost_2_256.hash') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_ghost.hash'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.hash') + } }, - 'embedding_converter': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_ghost.hash', - 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ghost_3_256.onnx', - 'path': resolve_relative_path('../.assets/models/ghost_3_256.onnx') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'ghost_2_256.onnx'), + 'path': resolve_relative_path('../.assets/models/ghost_2_256.onnx') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_ghost.onnx'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.onnx') + } }, - 'embedding_converter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_ghost.onnx', - 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.onnx') - } + 'type': 'ghost', + 'template': 'arcface_112_v1', + 'size': (256, 256), + 'mean': [ 0.5, 0.5, 0.5 ], + 'standard_deviation': [ 0.5, 0.5, 0.5 ] }, - 'type': 'ghost', - 'template': 'arcface_112_v1', - 'size': (256, 256), - 'mean': [ 0.5, 0.5, 0.5 ], - 'standard_deviation': [ 0.5, 0.5, 0.5 ] - }, - 'hififace_unofficial_256': - { - 'hashes': + 'ghost_3_256': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/hififace_unofficial_256.hash', - 'path': resolve_relative_path('../.assets/models/hififace_unofficial_256.hash') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'ghost_3_256.hash'), + 'path': resolve_relative_path('../.assets/models/ghost_3_256.hash') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_ghost.hash'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.hash') + } }, - 'embedding_converter': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/arcface_converter_hififace.hash', - 'path': resolve_relative_path('../.assets/models/arcface_converter_hififace.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/hififace_unofficial_256.onnx', - 'path': resolve_relative_path('../.assets/models/hififace_unofficial_256.onnx') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'ghost_3_256.onnx'), + 'path': resolve_relative_path('../.assets/models/ghost_3_256.onnx') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_ghost.onnx'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_ghost.onnx') + } }, - 'embedding_converter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/arcface_converter_hififace.onnx', - 'path': resolve_relative_path('../.assets/models/arcface_converter_hififace.onnx') - } + 'type': 'ghost', + 'template': 'arcface_112_v1', + 'size': (256, 256), + 'mean': [ 0.5, 0.5, 0.5 ], + 'standard_deviation': [ 0.5, 0.5, 0.5 ] }, - 'type': 'hififace', - 'template': 'mtcnn_512', - 'size': (256, 256), - 'mean': [ 0.5, 0.5, 0.5 ], - 'standard_deviation': [ 0.5, 0.5, 0.5 ] - }, - 'inswapper_128': - { - 'hashes': + 'hififace_unofficial_256': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/inswapper_128.hash', - 'path': resolve_relative_path('../.assets/models/inswapper_128.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/inswapper_128.onnx', - 'path': resolve_relative_path('../.assets/models/inswapper_128.onnx') - } - }, - 'type': 'inswapper', - 'template': 'arcface_128_v2', - 'size': (128, 128), - 'mean': [ 0.0, 0.0, 0.0 ], - 'standard_deviation': [ 1.0, 1.0, 1.0 ] - }, - 'inswapper_128_fp16': - { - 'hashes': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/inswapper_128_fp16.hash', - 'path': resolve_relative_path('../.assets/models/inswapper_128_fp16.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/inswapper_128_fp16.onnx', - 'path': resolve_relative_path('../.assets/models/inswapper_128_fp16.onnx') - } - }, - 'type': 'inswapper', - 'template': 'arcface_128_v2', - 'size': (128, 128), - 'mean': [ 0.0, 0.0, 0.0 ], - 'standard_deviation': [ 1.0, 1.0, 1.0 ] - }, - 'simswap_256': - { - 'hashes': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/simswap_256.hash', - 'path': resolve_relative_path('../.assets/models/simswap_256.hash') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'hififace_unofficial_256.hash'), + 'path': resolve_relative_path('../.assets/models/hififace_unofficial_256.hash') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_hififace.hash'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_hififace.hash') + } }, - 'embedding_converter': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_simswap.hash', - 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/simswap_256.onnx', - 'path': resolve_relative_path('../.assets/models/simswap_256.onnx') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'hififace_unofficial_256.onnx'), + 'path': resolve_relative_path('../.assets/models/hififace_unofficial_256.onnx') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_hififace.onnx'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_hififace.onnx') + } }, - 'embedding_converter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_simswap.onnx', - 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.onnx') - } + 'type': 'hififace', + 'template': 'mtcnn_512', + 'size': (256, 256), + 'mean': [ 0.5, 0.5, 0.5 ], + 'standard_deviation': [ 0.5, 0.5, 0.5 ] }, - 'type': 'simswap', - 'template': 'arcface_112_v1', - 'size': (256, 256), - 'mean': [ 0.485, 0.456, 0.406 ], - 'standard_deviation': [ 0.229, 0.224, 0.225 ] - }, - 'simswap_unofficial_512': - { - 'hashes': + 'inswapper_128': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/simswap_unofficial_512.hash', - 'path': resolve_relative_path('../.assets/models/simswap_unofficial_512.hash') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'inswapper_128.hash'), + 'path': resolve_relative_path('../.assets/models/inswapper_128.hash') + } }, - 'embedding_converter': + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_simswap.hash', - 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.hash') - } - }, - 'sources': - { - 'face_swapper': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/simswap_unofficial_512.onnx', - 'path': resolve_relative_path('../.assets/models/simswap_unofficial_512.onnx') + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'inswapper_128.onnx'), + 'path': resolve_relative_path('../.assets/models/inswapper_128.onnx') + } }, - 'embedding_converter': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/arcface_converter_simswap.onnx', - 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.onnx') - } + 'type': 'inswapper', + 'template': 'arcface_128_v2', + 'size': (128, 128), + 'mean': [ 0.0, 0.0, 0.0 ], + 'standard_deviation': [ 1.0, 1.0, 1.0 ] }, - 'type': 'simswap', - 'template': 'arcface_112_v1', - 'size': (512, 512), - 'mean': [ 0.0, 0.0, 0.0 ], - 'standard_deviation': [ 1.0, 1.0, 1.0 ] - }, - 'uniface_256': - { - 'hashes': + 'inswapper_128_fp16': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/uniface_256.hash', - 'path': resolve_relative_path('../.assets/models/uniface_256.hash') - } + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'inswapper_128_fp16.hash'), + 'path': resolve_relative_path('../.assets/models/inswapper_128_fp16.hash') + } + }, + 'sources': + { + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'inswapper_128_fp16.onnx'), + 'path': resolve_relative_path('../.assets/models/inswapper_128_fp16.onnx') + } + }, + 'type': 'inswapper', + 'template': 'arcface_128_v2', + 'size': (128, 128), + 'mean': [ 0.0, 0.0, 0.0 ], + 'standard_deviation': [ 1.0, 1.0, 1.0 ] }, - 'sources': + 'simswap_256': { - 'face_swapper': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/uniface_256.onnx', - 'path': resolve_relative_path('../.assets/models/uniface_256.onnx') - } + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'simswap_256.hash'), + 'path': resolve_relative_path('../.assets/models/simswap_256.hash') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_simswap.hash'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.hash') + } + }, + 'sources': + { + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'simswap_256.onnx'), + 'path': resolve_relative_path('../.assets/models/simswap_256.onnx') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_simswap.onnx'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.onnx') + } + }, + 'type': 'simswap', + 'template': 'arcface_112_v1', + 'size': (256, 256), + 'mean': [ 0.485, 0.456, 0.406 ], + 'standard_deviation': [ 0.229, 0.224, 0.225 ] }, - 'type': 'uniface', - 'template': 'ffhq_512', - 'size': (256, 256), - 'mean': [ 0.5, 0.5, 0.5 ], - 'standard_deviation': [ 0.5, 0.5, 0.5 ] + 'simswap_unofficial_512': + { + 'hashes': + { + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'simswap_unofficial_512.hash'), + 'path': resolve_relative_path('../.assets/models/simswap_unofficial_512.hash') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_simswap.hash'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.hash') + } + }, + 'sources': + { + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'simswap_unofficial_512.onnx'), + 'path': resolve_relative_path('../.assets/models/simswap_unofficial_512.onnx') + }, + 'embedding_converter': + { + 'url': resolve_download_url('models-3.0.0', 'arcface_converter_simswap.onnx'), + 'path': resolve_relative_path('../.assets/models/arcface_converter_simswap.onnx') + } + }, + 'type': 'simswap', + 'template': 'arcface_112_v1', + 'size': (512, 512), + 'mean': [ 0.0, 0.0, 0.0 ], + 'standard_deviation': [ 1.0, 1.0, 1.0 ] + }, + 'uniface_256': + { + 'hashes': + { + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'uniface_256.hash'), + 'path': resolve_relative_path('../.assets/models/uniface_256.hash') + } + }, + 'sources': + { + 'face_swapper': + { + 'url': resolve_download_url('models-3.0.0', 'uniface_256.onnx'), + 'path': resolve_relative_path('../.assets/models/uniface_256.onnx') + } + }, + 'type': 'uniface', + 'template': 'ffhq_512', + 'size': (256, 256), + 'mean': [ 0.5, 0.5, 0.5 ], + 'standard_deviation': [ 0.5, 0.5, 0.5 ] + } } -} def get_inference_pool() -> InferencePool: @@ -344,7 +345,7 @@ def clear_inference_pool() -> None: def get_model_options() -> ModelOptions: face_swapper_model = state_manager.get_item('face_swapper_model') face_swapper_model = 'inswapper_128' if has_execution_provider('coreml') and face_swapper_model == 'inswapper_128_fp16' else face_swapper_model - return MODEL_SET.get(face_swapper_model) + return create_model_set().get(face_swapper_model) def register_args(program : ArgumentParser) -> None: diff --git a/facefusion/processors/modules/frame_colorizer.py b/facefusion/processors/modules/frame_colorizer.py index 256d8594..b63e4e16 100644 --- a/facefusion/processors/modules/frame_colorizer.py +++ b/facefusion/processors/modules/frame_colorizer.py @@ -9,7 +9,7 @@ import facefusion.jobs.job_store import facefusion.processors.core as processors from facefusion import config, content_analyser, inference_manager, logger, process_manager, state_manager, wording from facefusion.common_helper import create_int_metavar -from facefusion.download import conditional_download_hashes, conditional_download_sources +from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url from facefusion.filesystem import in_directory, is_image, is_video, resolve_relative_path, same_file_extension from facefusion.processors import choices as processors_choices from facefusion.processors.typing import FrameColorizerInputs @@ -18,109 +18,110 @@ from facefusion.thread_helper import thread_semaphore from facefusion.typing import ApplyStateItem, Args, Face, InferencePool, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.vision import read_image, read_static_image, unpack_resolution, write_image -MODEL_SET : ModelSet =\ -{ - 'ddcolor': +def create_model_set() -> ModelSet: + return\ { - 'hashes': + 'ddcolor': { - 'frame_colorizer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ddcolor.hash', - 'path': resolve_relative_path('../.assets/models/ddcolor.hash') - } + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'ddcolor.hash'), + 'path': resolve_relative_path('../.assets/models/ddcolor.hash') + } + }, + 'sources': + { + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'ddcolor.onnx'), + 'path': resolve_relative_path('../.assets/models/ddcolor.onnx') + } + }, + 'type': 'ddcolor' }, - 'sources': + 'ddcolor_artistic': { - 'frame_colorizer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ddcolor.onnx', - 'path': resolve_relative_path('../.assets/models/ddcolor.onnx') - } + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'ddcolor_artistic.hash'), + 'path': resolve_relative_path('../.assets/models/ddcolor_artistic.hash') + } + }, + 'sources': + { + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'ddcolor_artistic.onnx'), + 'path': resolve_relative_path('../.assets/models/ddcolor_artistic.onnx') + } + }, + 'type': 'ddcolor' }, - 'type': 'ddcolor' - }, - 'ddcolor_artistic': - { - 'hashes': + 'deoldify': { - 'frame_colorizer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ddcolor_artistic.hash', - 'path': resolve_relative_path('../.assets/models/ddcolor_artistic.hash') - } + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'deoldify.hash'), + 'path': resolve_relative_path('../.assets/models/deoldify.hash') + } + }, + 'sources': + { + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'deoldify.onnx'), + 'path': resolve_relative_path('../.assets/models/deoldify.onnx') + } + }, + 'type': 'deoldify' }, - 'sources': + 'deoldify_artistic': { - 'frame_colorizer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ddcolor_artistic.onnx', - 'path': resolve_relative_path('../.assets/models/ddcolor_artistic.onnx') - } + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'deoldify_artistic.hash'), + 'path': resolve_relative_path('../.assets/models/deoldify_artistic.hash') + } + }, + 'sources': + { + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'deoldify_artistic.onnx'), + 'path': resolve_relative_path('../.assets/models/deoldify_artistic.onnx') + } + }, + 'type': 'deoldify' }, - 'type': 'ddcolor' - }, - 'deoldify': - { - 'hashes': + 'deoldify_stable': { - 'frame_colorizer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/deoldify.hash', - 'path': resolve_relative_path('../.assets/models/deoldify.hash') - } - }, - 'sources': - { - 'frame_colorizer': + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'deoldify_stable.hash'), + 'path': resolve_relative_path('../.assets/models/deoldify_stable.hash') + } + }, + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/deoldify.onnx', - 'path': resolve_relative_path('../.assets/models/deoldify.onnx') - } - }, - 'type': 'deoldify' - }, - 'deoldify_artistic': - { - 'hashes': - { - 'frame_colorizer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/deoldify_artistic.hash', - 'path': resolve_relative_path('../.assets/models/deoldify_artistic.hash') - } - }, - 'sources': - { - 'frame_colorizer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/deoldify_artistic.onnx', - 'path': resolve_relative_path('../.assets/models/deoldify_artistic.onnx') - } - }, - 'type': 'deoldify' - }, - 'deoldify_stable': - { - 'hashes': - { - 'frame_colorizer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/deoldify_stable.hash', - 'path': resolve_relative_path('../.assets/models/deoldify_stable.hash') - } - }, - 'sources': - { - 'frame_colorizer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/deoldify_stable.onnx', - 'path': resolve_relative_path('../.assets/models/deoldify_stable.onnx') - } - }, - 'type': 'deoldify' + 'frame_colorizer': + { + 'url': resolve_download_url('models-3.0.0', 'deoldify_stable.onnx'), + 'path': resolve_relative_path('../.assets/models/deoldify_stable.onnx') + } + }, + 'type': 'deoldify' + } } -} def get_inference_pool() -> InferencePool: @@ -136,7 +137,7 @@ def clear_inference_pool() -> None: def get_model_options() -> ModelOptions: frame_colorizer_model = state_manager.get_item('frame_colorizer_model') - return MODEL_SET.get(frame_colorizer_model) + return create_model_set().get(frame_colorizer_model) def register_args(program : ArgumentParser) -> None: diff --git a/facefusion/processors/modules/frame_enhancer.py b/facefusion/processors/modules/frame_enhancer.py index df6472e8..831d2363 100644 --- a/facefusion/processors/modules/frame_enhancer.py +++ b/facefusion/processors/modules/frame_enhancer.py @@ -9,7 +9,7 @@ import facefusion.jobs.job_store import facefusion.processors.core as processors from facefusion import config, content_analyser, inference_manager, logger, process_manager, state_manager, wording from facefusion.common_helper import create_int_metavar -from facefusion.download import conditional_download_hashes, conditional_download_sources +from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url from facefusion.filesystem import in_directory, is_image, is_video, resolve_relative_path, same_file_extension from facefusion.processors import choices as processors_choices from facefusion.processors.typing import FrameEnhancerInputs @@ -18,366 +18,367 @@ from facefusion.thread_helper import conditional_thread_semaphore from facefusion.typing import ApplyStateItem, Args, Face, InferencePool, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.vision import create_tile_frames, merge_tile_frames, read_image, read_static_image, write_image -MODEL_SET : ModelSet =\ -{ - 'clear_reality_x4': +def create_model_set() -> ModelSet: + return\ { - 'hashes': + 'clear_reality_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/clear_reality_x4.hash', - 'path': resolve_relative_path('../.assets/models/clear_reality_x4.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'clear_reality_x4.hash'), + 'path': resolve_relative_path('../.assets/models/clear_reality_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'clear_reality_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/clear_reality_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'sources': + 'lsdir_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/clear_reality_x4.onnx', - 'path': resolve_relative_path('../.assets/models/clear_reality_x4.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'lsdir_x4.hash'), + 'path': resolve_relative_path('../.assets/models/lsdir_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'lsdir_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/lsdir_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'lsdir_x4': - { - 'hashes': + 'nomos8k_sc_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/lsdir_x4.hash', - 'path': resolve_relative_path('../.assets/models/lsdir_x4.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'nomos8k_sc_x4.hash'), + 'path': resolve_relative_path('../.assets/models/nomos8k_sc_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'nomos8k_sc_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/nomos8k_sc_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'sources': + 'real_esrgan_x2': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/lsdir_x4.onnx', - 'path': resolve_relative_path('../.assets/models/lsdir_x4.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x2.hash'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x2.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x2.onnx'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x2.onnx') + } + }, + 'size': (256, 16, 8), + 'scale': 2 }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'nomos8k_sc_x4': - { - 'hashes': + 'real_esrgan_x2_fp16': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/nomos8k_sc_x4.hash', - 'path': resolve_relative_path('../.assets/models/nomos8k_sc_x4.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x2_fp16.hash'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x2_fp16.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x2_fp16.onnx'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x2_fp16.onnx') + } + }, + 'size': (256, 16, 8), + 'scale': 2 }, - 'sources': + 'real_esrgan_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/nomos8k_sc_x4.onnx', - 'path': resolve_relative_path('../.assets/models/nomos8k_sc_x4.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x4.hash'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x4.onnx') + } + }, + 'size': (256, 16, 8), + 'scale': 4 }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'real_esrgan_x2': - { - 'hashes': + 'real_esrgan_x4_fp16': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x2.hash', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x2.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x4_fp16.hash'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x4_fp16.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x4_fp16.onnx'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x4_fp16.onnx') + } + }, + 'size': (256, 16, 8), + 'scale': 4 }, - 'sources': + 'real_esrgan_x8': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x2.onnx', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x2.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x8.hash'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x8.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x8.onnx'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x8.onnx') + } + }, + 'size': (256, 16, 8), + 'scale': 8 }, - 'size': (256, 16, 8), - 'scale': 2 - }, - 'real_esrgan_x2_fp16': - { - 'hashes': + 'real_esrgan_x8_fp16': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x2_fp16.hash', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x2_fp16.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x8_fp16.hash'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x8_fp16.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_esrgan_x8_fp16.onnx'), + 'path': resolve_relative_path('../.assets/models/real_esrgan_x8_fp16.onnx') + } + }, + 'size': (256, 16, 8), + 'scale': 8 }, - 'sources': + 'real_hatgan_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x2_fp16.onnx', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x2_fp16.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_hatgan_x4.hash'), + 'path': resolve_relative_path('../.assets/models/real_hatgan_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_hatgan_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/real_hatgan_x4.onnx') + } + }, + 'size': (256, 16, 8), + 'scale': 4 }, - 'size': (256, 16, 8), - 'scale': 2 - }, - 'real_esrgan_x4': - { - 'hashes': + 'real_web_photo_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x4.hash', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x4.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_web_photo_x4.hash'), + 'path': resolve_relative_path('../.assets/models/real_web_photo_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'real_web_photo_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/real_web_photo_x4.onnx') + } + }, + 'size': (64, 4, 2), + 'scale': 4 }, - 'sources': + 'realistic_rescaler_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x4.onnx', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x4.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'realistic_rescaler_x4.hash'), + 'path': resolve_relative_path('../.assets/models/realistic_rescaler_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'realistic_rescaler_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/realistic_rescaler_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'size': (256, 16, 8), - 'scale': 4 - }, - 'real_esrgan_x4_fp16': - { - 'hashes': + 'remacri_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x4_fp16.hash', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x4_fp16.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'remacri_x4.hash'), + 'path': resolve_relative_path('../.assets/models/remacri_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'remacri_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/remacri_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'sources': + 'siax_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x4_fp16.onnx', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x4_fp16.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'siax_x4.hash'), + 'path': resolve_relative_path('../.assets/models/siax_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'siax_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/siax_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'size': (256, 16, 8), - 'scale': 4 - }, - 'real_esrgan_x8': - { - 'hashes': + 'span_kendata_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x8.hash', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x8.hash') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'span_kendata_x4.hash'), + 'path': resolve_relative_path('../.assets/models/span_kendata_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'span_kendata_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/span_kendata_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'sources': + 'swin2_sr_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x8.onnx', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x8.onnx') - } + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'swin2_sr_x4.hash'), + 'path': resolve_relative_path('../.assets/models/swin2_sr_x4.hash') + } + }, + 'sources': + { + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'swin2_sr_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/swin2_sr_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 }, - 'size': (256, 16, 8), - 'scale': 8 - }, - 'real_esrgan_x8_fp16': - { - 'hashes': + 'ultra_sharp_x4': { - 'frame_enhancer': + 'hashes': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x8_fp16.hash', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x8_fp16.hash') - } - }, - 'sources': - { - 'frame_enhancer': + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'ultra_sharp_x4.hash'), + 'path': resolve_relative_path('../.assets/models/ultra_sharp_x4.hash') + } + }, + 'sources': { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_esrgan_x8_fp16.onnx', - 'path': resolve_relative_path('../.assets/models/real_esrgan_x8_fp16.onnx') - } - }, - 'size': (256, 16, 8), - 'scale': 8 - }, - 'real_hatgan_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_hatgan_x4.hash', - 'path': resolve_relative_path('../.assets/models/real_hatgan_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/real_hatgan_x4.onnx', - 'path': resolve_relative_path('../.assets/models/real_hatgan_x4.onnx') - } - }, - 'size': (256, 16, 8), - 'scale': 4 - }, - 'real_web_photo_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/real_web_photo_x4.hash', - 'path': resolve_relative_path('../.assets/models/real_web_photo_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/real_web_photo_x4.onnx', - 'path': resolve_relative_path('../.assets/models/real_web_photo_x4.onnx') - } - }, - 'size': (64, 4, 2), - 'scale': 4 - }, - 'realistic_rescaler_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/realistic_rescaler_x4.hash', - 'path': resolve_relative_path('../.assets/models/realistic_rescaler_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/realistic_rescaler_x4.onnx', - 'path': resolve_relative_path('../.assets/models/realistic_rescaler_x4.onnx') - } - }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'remacri_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/remacri_x4.hash', - 'path': resolve_relative_path('../.assets/models/remacri_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/remacri_x4.onnx', - 'path': resolve_relative_path('../.assets/models/remacri_x4.onnx') - } - }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'siax_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/siax_x4.hash', - 'path': resolve_relative_path('../.assets/models/siax_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/siax_x4.onnx', - 'path': resolve_relative_path('../.assets/models/siax_x4.onnx') - } - }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'span_kendata_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/span_kendata_x4.hash', - 'path': resolve_relative_path('../.assets/models/span_kendata_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/span_kendata_x4.onnx', - 'path': resolve_relative_path('../.assets/models/span_kendata_x4.onnx') - } - }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'swin2_sr_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/swin2_sr_x4.hash', - 'path': resolve_relative_path('../.assets/models/swin2_sr_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.1.0/swin2_sr_x4.onnx', - 'path': resolve_relative_path('../.assets/models/swin2_sr_x4.onnx') - } - }, - 'size': (128, 8, 4), - 'scale': 4 - }, - 'ultra_sharp_x4': - { - 'hashes': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ultra_sharp_x4.hash', - 'path': resolve_relative_path('../.assets/models/ultra_sharp_x4.hash') - } - }, - 'sources': - { - 'frame_enhancer': - { - 'url': 'https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/ultra_sharp_x4.onnx', - 'path': resolve_relative_path('../.assets/models/ultra_sharp_x4.onnx') - } - }, - 'size': (128, 8, 4), - 'scale': 4 + 'frame_enhancer': + { + 'url': resolve_download_url('models-3.0.0', 'ultra_sharp_x4.onnx'), + 'path': resolve_relative_path('../.assets/models/ultra_sharp_x4.onnx') + } + }, + 'size': (128, 8, 4), + 'scale': 4 + } } -} def get_inference_pool() -> InferencePool: @@ -393,7 +394,7 @@ def clear_inference_pool() -> None: def get_model_options() -> ModelOptions: frame_enhancer_model = state_manager.get_item('frame_enhancer_model') - return MODEL_SET.get(frame_enhancer_model) + return create_model_set().get(frame_enhancer_model) def register_args(program : ArgumentParser) -> None: