Partial adjust program codebase

This commit is contained in:
henryruhs 2024-10-30 20:44:08 +01:00
parent 3559f7891a
commit c3f24d28ab
8 changed files with 57 additions and 44 deletions

View File

@ -35,6 +35,7 @@ def apply_args(args : Args, apply_state_item : ApplyStateItem) -> None:
# general
apply_state_item('command', args.get('command'))
# paths
apply_state_item('temp_path', args.get('temp_path'))
apply_state_item('jobs_path', args.get('jobs_path'))
apply_state_item('source_paths', args.get('source_paths'))
apply_state_item('target_path', args.get('target_path'))

View File

@ -67,6 +67,7 @@ def route(args : Args) -> None:
for ui_layout in ui.get_ui_layouts_modules(state_manager.get_item('ui_layouts')):
if not ui_layout.pre_check():
return conditional_exit(2)
ui.init()
ui.launch()
if state_manager.get_item('command') == 'headless-run':
if not job_manager.init_jobs(state_manager.get_item('jobs_path')):

View File

@ -1,3 +1,4 @@
import tempfile
from argparse import ArgumentParser, HelpFormatter
import facefusion.choices
@ -7,7 +8,7 @@ from facefusion.execution import get_execution_provider_choices
from facefusion.filesystem import list_directory
from facefusion.jobs import job_store
from facefusion.processors.core import get_processors_modules
from facefusion.program_helper import remove_args, suggest_face_detector_choices
from facefusion.program_helper import suggest_face_detector_choices
def create_help_formatter_small(prog : str) -> HelpFormatter:
@ -18,15 +19,33 @@ def create_help_formatter_large(prog : str) -> HelpFormatter:
return HelpFormatter(prog, max_help_position = 300)
def create_config_program() -> ArgumentParser:
def create_paths_program() -> ArgumentParser:
program = ArgumentParser(add_help = False)
group_paths = program.add_argument_group('paths')
group_paths.add_argument('-c', '--config-path', help = wording.get('help.config_path'), default = 'facefusion.ini')
group_paths.add_argument('-s', '--source-paths', help = wording.get('help.source_paths'), action = 'append', default = config.get_str_list('paths.source_paths'))
group_paths.add_argument('-t', '--target-path', help = wording.get('help.target_path'), default = config.get_str_value('paths.target_path'))
group_paths.add_argument('-o', '--output-path', help = wording.get('help.output_path'), default = config.get_str_value('paths.output_path'))
job_store.register_step_keys([ 'source_paths', 'target_path', 'output_path' ])
return program
def create_config_path_program() -> ArgumentParser:
program = ArgumentParser(add_help = False)
group_paths = program.add_argument_group('paths')
group_paths.add_argument('--config-path', help = wording.get('help.config_path'), default = 'facefusion.ini')
job_store.register_job_keys([ 'config-path' ])
apply_config_path(program)
return program
def create_temp_path_program() -> ArgumentParser:
program = ArgumentParser(add_help = False)
group_paths = program.add_argument_group('paths')
group_paths.add_argument('--temp-path', help = wording.get('help.temp_path'), default = tempfile.gettempdir())
job_store.register_job_keys([ 'temp_path' ])
return program
def create_jobs_path_program() -> ArgumentParser:
program = ArgumentParser(add_help = False)
group_paths = program.add_argument_group('paths')
@ -35,13 +54,27 @@ def create_jobs_path_program() -> ArgumentParser:
return program
def create_paths_program() -> ArgumentParser:
def create_source_paths_program() -> ArgumentParser:
program = ArgumentParser(add_help = False)
group_paths = program.add_argument_group('paths')
group_paths.add_argument('-s', '--source-paths', help = wording.get('help.source_paths'), action = 'append', default = config.get_str_list('paths.source_paths'))
job_store.register_job_keys([ 'source_paths' ])
return program
def create_target_path_program() -> ArgumentParser:
program = ArgumentParser(add_help = False)
group_paths = program.add_argument_group('paths')
group_paths.add_argument('-t', '--target-path', help = wording.get('help.target_path'), default = config.get_str_value('paths.target_path'))
job_store.register_job_keys([ 'target_path' ])
return program
def create_output_path_program() -> ArgumentParser:
program = ArgumentParser(add_help = False)
group_paths = program.add_argument_group('paths')
group_paths.add_argument('-o', '--output-path', help = wording.get('help.output_path'), default = config.get_str_value('paths.output_path'))
job_store.register_step_keys([ 'source_paths', 'target_path', 'output_path' ])
job_store.register_step_keys([ 'output_path' ])
return program
@ -197,7 +230,7 @@ def create_step_index_program() -> ArgumentParser:
def collect_step_program() -> ArgumentParser:
return ArgumentParser(parents= [ create_config_program(), create_jobs_path_program(), create_paths_program(), create_face_detector_program(), create_face_landmarker_program(), create_face_selector_program(), create_face_masker_program(), create_frame_extraction_program(), create_output_creation_program(), create_processors_program() ], add_help = False)
return ArgumentParser(parents= [ create_config_path_program(), create_jobs_path_program(), create_paths_program(), create_face_detector_program(), create_face_landmarker_program(), create_face_selector_program(), create_face_masker_program(), create_frame_extraction_program(), create_output_creation_program(), create_processors_program() ], add_help = False)
def collect_job_program() -> ArgumentParser:
@ -221,14 +254,14 @@ def create_program() -> ArgumentParser:
sub_program.add_parser('job-delete', help = wording.get('help.job_delete'), parents = [ create_job_id_program(), create_jobs_path_program(), create_log_level_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-delete-all', help = wording.get('help.job_delete_all'), parents = [ create_jobs_path_program(), create_log_level_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-add-step', help = wording.get('help.job_add_step'), parents = [ create_job_id_program(), collect_step_program(), create_log_level_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-remix-step', help = wording.get('help.job_remix_step'), parents = [ create_job_id_program(), create_step_index_program(), remove_args(collect_step_program(), [ 'target_path' ]), create_log_level_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-remix-step', help = wording.get('help.job_remix_step'), parents = [ create_job_id_program(), create_step_index_program(), collect_step_program(), create_log_level_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-insert-step', help = wording.get('help.job_insert_step'), parents = [ create_job_id_program(), create_step_index_program(), collect_step_program(), create_log_level_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-remove-step', help = wording.get('help.job_remove_step'), parents = [ create_job_id_program(), create_step_index_program(), create_jobs_path_program(), create_log_level_program() ], formatter_class = create_help_formatter_large)
# job runner
sub_program.add_parser('job-run', help = wording.get('help.job_run'), parents = [ create_job_id_program(), create_config_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-run-all', help = wording.get('help.job_run_all'), parents = [ create_config_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-retry', help = wording.get('help.job_retry'), parents = [ create_job_id_program(), create_config_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-retry-all', help = wording.get('help.job_retry_all'), parents = [ create_config_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-run', help = wording.get('help.job_run'), parents = [ create_job_id_program(), create_config_path_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-run-all', help = wording.get('help.job_run_all'), parents = [ create_config_path_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-retry', help = wording.get('help.job_retry'), parents = [ create_job_id_program(), create_config_path_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
sub_program.add_parser('job-retry-all', help = wording.get('help.job_retry_all'), parents = [ create_config_path_program(), create_jobs_path_program(), collect_job_program() ], formatter_class = create_help_formatter_large)
return ArgumentParser(parents = [ program ], formatter_class = create_help_formatter_small, add_help = True)

View File

@ -34,14 +34,6 @@ def validate_actions(program : ArgumentParser) -> bool:
return True
def remove_args(program : ArgumentParser, remove_names : List[str]) -> ArgumentParser:
actions = [ action for action in program._actions if action.dest in remove_names ]
for action in actions:
program._actions.remove(action)
return program
def suggest_face_detector_choices(program : ArgumentParser) -> List[str]:
known_args, _ = program.parse_known_args()
return facefusion.choices.face_detector_set.get(known_args.face_detector_model) #type:ignore[call-overload]

View File

@ -192,6 +192,7 @@ StateKey = Literal\
[
'command',
'config_path',
'temp_path',
'jobs_path',
'source_paths',
'target_path',
@ -248,6 +249,7 @@ State = TypedDict('State',
{
'command' : str,
'config_path' : str,
'temp_path': str,
'jobs_path' : str,
'source_paths' : List[str],
'target_path' : str,

View File

@ -12,10 +12,6 @@ from facefusion.exit_helper import hard_exit
from facefusion.filesystem import resolve_relative_path
from facefusion.uis.typing import Component, ComponentName
os.environ['GRADIO_ANALYTICS_ENABLED'] = '0'
warnings.filterwarnings('ignore', category = UserWarning, module = 'gradio')
UI_COMPONENTS: Dict[ComponentName, Component] = {}
UI_LAYOUT_MODULES : List[ModuleType] = []
UI_LAYOUT_METHODS =\
@ -73,6 +69,13 @@ def register_ui_component(component_name : ComponentName, component: Component)
UI_COMPONENTS[component_name] = component
def init() -> None:
os.environ['GRADIO_ANALYTICS_ENABLED'] = '0'
os.environ['GRADIO_TEMP_DIR'] = os.path.join(state_manager.get_item('temp_path'), 'gradio')
warnings.filterwarnings('ignore', category = UserWarning, module = 'gradio')
def launch() -> None:
ui_layouts_total = len(state_manager.get_item('ui_layouts'))
with gradio.Blocks(theme = get_theme(), css = get_css(), title = metadata.get('name') + ' ' + metadata.get('version'), fill_width = True) as ui:

View File

@ -96,6 +96,7 @@ WORDING : Dict[str, Any] =\
'skip_conda': 'skip the conda environment check',
# paths
'config_path': 'choose the config file to override defaults',
'temp_path': 'specify the directory for the temporary resources',
'jobs_path': 'specify the directory to store jobs',
'source_paths': 'choose single or multiple source images or audios',
'target_path': 'choose single target image or video',

View File

@ -2,7 +2,7 @@ from argparse import ArgumentParser
import pytest
from facefusion.program_helper import find_argument_group, remove_args, validate_actions
from facefusion.program_helper import find_argument_group, validate_actions
def test_find_argument_group() -> None:
@ -38,23 +38,3 @@ def test_validate_actions() -> None:
action.default = args[action.dest]
assert validate_actions(program) is False
def test_remove_args() -> None:
program = ArgumentParser()
program.add_argument('--test-1')
program.add_argument('--test-2')
program.add_argument('--test-3')
actions = [ action.dest for action in program._actions ]
assert 'test_1' in actions
assert 'test_2' in actions
assert 'test_3' in actions
program = remove_args(program, [ 'test_1', 'test_2' ])
actions = [ action.dest for action in program._actions ]
assert 'test_1' not in actions
assert 'test_2' not in actions
assert 'test_3' in actions