| 831 | return (out_imgs,) |
| 832 | |
| 833 | class ExpressionEditor: |
| 834 | def __init__(self): |
| 835 | self.sample_image = None |
| 836 | self.src_image = None |
| 837 | self.crop_factor = None |
| 838 | |
| 839 | @classmethod |
| 840 | def INPUT_TYPES(s): |
| 841 | display = "number" |
| 842 | #display = "slider" |
| 843 | return { |
| 844 | "required": { |
| 845 | |
| 846 | "rotate_pitch": ("FLOAT", {"default": 0, "min": -20, "max": 20, "step": 0.5, "display": display}), |
| 847 | "rotate_yaw": ("FLOAT", {"default": 0, "min": -20, "max": 20, "step": 0.5, "display": display}), |
| 848 | "rotate_roll": ("FLOAT", {"default": 0, "min": -20, "max": 20, "step": 0.5, "display": display}), |
| 849 | |
| 850 | "blink": ("FLOAT", {"default": 0, "min": -20, "max": 5, "step": 0.5, "display": display}), |
| 851 | "eyebrow": ("FLOAT", {"default": 0, "min": -10, "max": 15, "step": 0.5, "display": display}), |
| 852 | "wink": ("FLOAT", {"default": 0, "min": 0, "max": 25, "step": 0.5, "display": display}), |
| 853 | "pupil_x": ("FLOAT", {"default": 0, "min": -15, "max": 15, "step": 0.5, "display": display}), |
| 854 | "pupil_y": ("FLOAT", {"default": 0, "min": -15, "max": 15, "step": 0.5, "display": display}), |
| 855 | "aaa": ("FLOAT", {"default": 0, "min": -30, "max": 120, "step": 1, "display": display}), |
| 856 | "eee": ("FLOAT", {"default": 0, "min": -20, "max": 15, "step": 0.2, "display": display}), |
| 857 | "woo": ("FLOAT", {"default": 0, "min": -20, "max": 15, "step": 0.2, "display": display}), |
| 858 | "smile": ("FLOAT", {"default": 0, "min": -0.3, "max": 1.3, "step": 0.01, "display": display}), |
| 859 | |
| 860 | "src_ratio": ("FLOAT", {"default": 1, "min": 0, "max": 1, "step": 0.01, "display": display}), |
| 861 | "sample_ratio": ("FLOAT", {"default": 1, "min": -0.2, "max": 1.2, "step": 0.01, "display": display}), |
| 862 | "sample_parts": (["OnlyExpression", "OnlyRotation", "OnlyMouth", "OnlyEyes", "All"],), |
| 863 | "crop_factor": ("FLOAT", {"default": crop_factor_default, |
| 864 | "min": crop_factor_min, "max": crop_factor_max, "step": 0.1}), |
| 865 | }, |
| 866 | |
| 867 | "optional": {"src_image": ("IMAGE",), "motion_link": ("EDITOR_LINK",), |
| 868 | "sample_image": ("IMAGE",), "add_exp": ("EXP_DATA",), |
| 869 | }, |
| 870 | } |
| 871 | |
| 872 | RETURN_TYPES = ("IMAGE", "EDITOR_LINK", "EXP_DATA") |
| 873 | RETURN_NAMES = ("image", "motion_link", "save_exp") |
| 874 | |
| 875 | FUNCTION = "run" |
| 876 | |
| 877 | OUTPUT_NODE = True |
| 878 | |
| 879 | CATEGORY = "AdvancedLivePortrait" |
| 880 | |
| 881 | # INPUT_IS_LIST = False |
| 882 | # OUTPUT_IS_LIST = (False,) |
| 883 | |
| 884 | def run(self, rotate_pitch, rotate_yaw, rotate_roll, blink, eyebrow, wink, pupil_x, pupil_y, aaa, eee, woo, smile, |
| 885 | src_ratio, sample_ratio, sample_parts, crop_factor, src_image=None, sample_image=None, motion_link=None, add_exp=None): |
| 886 | rotate_yaw = -rotate_yaw |
| 887 | |
| 888 | new_editor_link = None |
| 889 | if motion_link != None: |
| 890 | self.psi = motion_link[0] |
nothing calls this directly
no outgoing calls
no test coverage detected