diff --git a/README.md b/README.md index 361e6f5..a71318d 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,8 @@ options: --max-memory MAX_MEMORY maximum amount of RAM in GB --execution-provider {cpu} [{cpu} ...] available execution provider (choices: cpu, ...) --execution-threads EXECUTION_THREADS number of execution threads + --headless run in headless mode + --enhancer-upscale-factor Sets the upscale factor for the enhancer. Only applies if `face_enhancer` is set as a frame-processor -v, --version show program's version number and exit ``` diff --git a/modules/core.py b/modules/core.py index b4e4a31..a0d45ca 100644 --- a/modules/core.py +++ b/modules/core.py @@ -70,6 +70,10 @@ def parse_args() -> None: choices=suggest_execution_providers(), nargs='+') program.add_argument('--execution-threads', help='Number of execution threads', dest='execution_threads', type=int, default=suggest_execution_threads()) + program.add_argument('--headless', help='Run in headless mode', dest='headless', default=False, action='store_true') + program.add_argument('--enhancer-upscale-factor', + help='Sets the upscale factor for the enhancer. Only applies if `face_enhancer` is set as a frame-processor', + dest='enhancer_upscale_factor', type=int, default=1) program.add_argument('-v', '--version', action='version', version=f'{modules.metadata.name} {modules.metadata.version}') @@ -98,7 +102,8 @@ def parse_args() -> None: modules.globals.max_memory = args.max_memory modules.globals.execution_providers = decode_execution_providers(args.execution_provider) modules.globals.execution_threads = args.execution_threads - + modules.globals.headless = args.headless + modules.globals.enhancer_upscale_factor = args.enhancer_upscale_factor # Handle face enhancer tumbler modules.globals.fp_ui['face_enhancer'] = 'face_enhancer' in args.frame_processor diff --git a/modules/globals.py b/modules/globals.py index 2bc15fd..a435e4d 100644 --- a/modules/globals.py +++ b/modules/globals.py @@ -29,4 +29,5 @@ log_level = 'error' fp_ui: Dict[str, bool] = {} nsfw = None camera_input_combobox = None -webcam_preview_running = False \ No newline at end of file +webcam_preview_running = False +enhancer_upscale_factor = 1 diff --git a/modules/processors/frame/face_enhancer.py b/modules/processors/frame/face_enhancer.py index a75f5c0..a39bef6 100644 --- a/modules/processors/frame/face_enhancer.py +++ b/modules/processors/frame/face_enhancer.py @@ -33,7 +33,10 @@ def get_face_enhancer() -> Any: with THREAD_LOCK: if FACE_ENHANCER is None: model_path = resolve_relative_path('../models/GFPGANv1.4.pth') - FACE_ENHANCER = gfpgan.GFPGANer(model_path=model_path, upscale=1) # type: ignore[attr-defined] + FACE_ENHANCER = gfpgan.GFPGANer( + model_path=model_path, + upscale=modules.globals.enhancer_upscale_factor + ) # type: ignore[attr-defined] return FACE_ENHANCER def enhance_face(temp_frame: Frame) -> Frame: diff --git a/modules/ui.py b/modules/ui.py index 494d85a..2733dbb 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -6,15 +6,17 @@ from typing import Callable, Tuple, List, Any from types import ModuleType import cv2 from PIL import Image, ImageOps -from pygrabber.dshow_graph import FilterGraph import pyvirtualcam # Import OS-specific modules only when necessary if platform.system() == 'Darwin': # macOS - import objc - from Foundation import NSObject import AVFoundation +# Import Windows specific modules only when on windows platform +if platform.system() == 'Windows' or platform.system() == 'Linux': # Windows or Linux + from pygrabber.dshow_graph import FilterGraph + + import modules.globals import modules.metadata from modules.face_analyser import get_one_face diff --git a/requirements.txt b/requirements.txt index 915179d..96bb6b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,4 +23,5 @@ tqdm==4.66.4 gfpgan==1.3.8 pyobjc==9.1; sys_platform == 'darwin' pygrabber==0.2 -pyvirtualcam==0.12.0 \ No newline at end of file +pyvirtualcam==0.12.0 +pyobjc-framework-AVFoundation==10.3.1; sys_platform == 'darwin' \ No newline at end of file