|
import argparse |
|
import importlib |
|
from typing import Dict, Any |
|
|
|
def load_parser(module_name: str) -> argparse.ArgumentParser: |
|
module = importlib.import_module(module_name) |
|
if not hasattr(module, "get_parser"): |
|
raise ValueError(f"{module_name} undefined get_parser()") |
|
return module.get_parser() |
|
|
|
def filter_args(args: Dict[str, Any], parser: argparse.ArgumentParser) -> Dict[str, Any]: |
|
known_args = set() |
|
for action in parser._actions: |
|
if action.dest and action.dest != "help": |
|
known_args.add(action.dest) |
|
return {k: v for k, v in args.items() if k in known_args} |
|
|
|
def main(): |
|
|
|
main_parser = argparse.ArgumentParser() |
|
main_parser.add_argument("--base", type=str, default='ltx', choices=['ltx', 'wan']) |
|
pipeline_args, _ = main_parser.parse_known_args() |
|
|
|
if pipeline_args.base in ["ltx"]: |
|
preproccess_name, inference_name = "vace_preproccess", "vace_ltx_inference" |
|
else: |
|
preproccess_name, inference_name = "vace_preproccess", "vace_wan_inference" |
|
|
|
preprocess_parser = load_parser(preproccess_name) |
|
inference_parser = load_parser(inference_name) |
|
|
|
for parser in [preprocess_parser, inference_parser]: |
|
for action in parser._actions: |
|
if action.dest != "help": |
|
main_parser._add_action(action) |
|
|
|
cli_args = main_parser.parse_args() |
|
args_dict = vars(cli_args) |
|
|
|
|
|
preprocess_args = filter_args(args_dict, preprocess_parser) |
|
preprocess_output = importlib.import_module(preproccess_name).main(preprocess_args) |
|
print("preprocess_output:", preprocess_output) |
|
|
|
|
|
inference_args = filter_args(args_dict, inference_parser) |
|
inference_args.update(preprocess_output) |
|
preprocess_output = importlib.import_module(inference_name).main(inference_args) |
|
print("preprocess_output:", preprocess_output) |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |