waifuc-gui / waifuc_gui /action_manager.py
LittleApple-fp16's picture
Upload 7 files
32b00b0 verified
import inspect
import waifuc.action
import gradio as gr
from .config_manager import ConfigManager
class ActionManager:
def __init__(self, config_manager: ConfigManager):
self.config_manager = config_manager
self.action_classes = [
cls for name, cls in inspect.getmembers(waifuc.action, inspect.isclass)
if name.endswith("Action") and not inspect.isabstract(cls)
]
self.action_names = [cls.__name__ for cls in self.action_classes]
def get_action_params(self, action_name):
action_cls = next(cls for cls in self.action_classes if cls.__name__ == action_name)
sig = inspect.signature(action_cls.__init__)
return [p for p in sig.parameters.values() if p.name != 'self']
def create_action_param_inputs(self, selected_actions):
params = {}
for action in selected_actions:
params[action] = {}
for param in self.get_action_params(action):
if param.name == "size" and action == "ResizeAction":
params[action][param.name] = gr.Number(
label="Resize Size" if self.config_manager.get_config("language") == "en" else "调整大小",
value=self.config_manager.get_config("default_resize_size"),
info="Image resize dimension" if self.config_manager.get_config("language") == "en" else "图片调整尺寸"
)
elif param.annotation == int:
params[action][param.name] = gr.Number(label=param.name)
else:
params[action][param.name] = gr.Textbox(label=param.name)
return params
def instantiate_actions(self, selected_actions, action_params):
actions = []
for name in selected_actions:
action_cls = next(cls for cls in self.action_classes if cls.__name__ == name)
params = action_params.get(name, {})
if name == "FaceCountAction":
actions.append(action_cls(params.get("count", 1)))
elif name == "AlignMinSizeAction":
actions.append(action_cls(params.get("size", 800)))
elif name == "ResizeAction":
actions.append(action_cls(size=params.get("size", self.config_manager.get_config("default_resize_size"))))
else:
actions.append(action_cls(**params))
return actions