import os from .dataset import Dataset, JsonlDataset, JsonDataset from .config import config EMPTY_OPTION = "--" RANDOM_OPTION = "random 🎲" DEFAULT_OPTION = EMPTY_OPTION # 构建选项列表 def buildOptionList(option_list, is_empty=True, is_random=True): if option_list is None and is_empty == False and is_random == True: return [] new_option_list = [EMPTY_OPTION] if is_empty == True else [] if is_random == True: new_option_list.append(RANDOM_OPTION) if isinstance(option_list, list): new_option_list.extend(option_list) elif isinstance(option_list, Dataset): for index in range(len(option_list)): text, _, _, = option_list[index] new_option_list.append(text) return new_option_list # 构建提示词与权重 def buildPromptWeight(text, weight): if weight == 1: return text else: return f"({text}:{round(weight, 2)})" # 构建组合提示词与权重 def buildCombinePromptWeight(text1, text2, weight): if weight == 1: return f"[{text1}:{text2}]" else: return f"[{text1}:{text2}:{round(weight, 2)}]" # 构建分类数据 def buildClassifyDatas(text): return text.replace(" ", "_") + "_datas" # 构建分类提示词 def buildClassifyPrompt(text): return text.replace(" ", "_") + "_prompt" # 构建数据 def buildJsonDatas(text): return text.replace(" ", "_") + "_datas" # 构建提示词 def buildJsonPrompt(text): return text.replace(" ", "_") + "_prompt" # 构建提示词 class BuildPrompt: def __init__(self, path): ext = os.path.splitext(path)[1] if ext.lower() == ".json": self._dataset = JsonDataset(path) else: self._dataset = JsonlDataset(path) def get_dataset(self): return self._dataset def choice_prompt(self, seed): length = len(self._dataset) if length == 0: return "" index = seed % length datas = self._dataset[index] prompt = "" if isinstance(datas, tuple) or isinstance(datas, list): prompt = datas[0] elif isinstance(datas, str): prompt = datas return prompt def get_prompt(self, key): prompt = "" datas = getattr(self._dataset, key, None) if datas is not None: prompt = datas["text"] if "text" in datas else "" return prompt def generate_prompt(self, seed): length = len(self._dataset) if length == 0: return "" index = seed % length datas = self._dataset[index] prompt = "" if isinstance(datas, tuple) or isinstance(datas, list): prompt = datas[0] elif isinstance(datas, str): prompt = datas return prompt # 构建提示词管理 class BuildPromptManager: def __init__(self, path, config, language="zh"): self.path = path self.config = config self.language = language self.build_prompts = self.load_build_prompt_datas(path, config, language) def reload_build_prompt_datas(self, language="zh"): if self.language != language: self.language = language self.build_prompts = self.load_build_prompt_datas(self.path, self.config, self.language) def load_build_prompt_datas(self, path, config, language="zh"): build_prompts = {} for classify in config.classifies: classify_datas = buildClassifyDatas(classify) classify_prompt = buildClassifyPrompt(classify) file_name = f"{classify_datas}.jsonl" data_path = os.path.join(path, language, file_name) build_prompts[classify_prompt] = BuildPrompt(data_path) for data_name in config.json_datas: json_datas = buildJsonDatas(data_name) json_prompt = buildJsonPrompt(data_name) file_name = f"{json_datas}.json" data_path = os.path.join(path, language, file_name) build_prompts[json_prompt] = BuildPrompt(data_path) return build_prompts def __getattr__(self, key): return self.build_prompts[key] if key in self.build_prompts else None # 生成肖像提示词 def generate_portrait_prompt(self, lens_angle=EMPTY_OPTION, lens_angle_weight=1, nationality_1=EMPTY_OPTION, nationality_2=EMPTY_OPTION, nationality_mix_weight=0.5, gender=EMPTY_OPTION, androgynous_weight=0, age=18, age_weight=1, body_part=EMPTY_OPTION, body_part_weight=1, body_type=EMPTY_OPTION, body_type_weight=1, face_shape=EMPTY_OPTION, face_shape_weight=1, pretty_face_weight=1, ordinary_face_weight=0, ugly_face_weight=0, facial_asymmetry_weight=0, facial_expression=EMPTY_OPTION, facial_expression_weight=1, eyes_shape=EMPTY_OPTION, eyes_color=EMPTY_OPTION, eyebrows_style=EMPTY_OPTION, eyebrows_color=EMPTY_OPTION, eyelashs_style=EMPTY_OPTION, eyelashs_color=EMPTY_OPTION, nose_shape=EMPTY_OPTION, hair_style=EMPTY_OPTION, hair_color=EMPTY_OPTION, hair_length=EMPTY_OPTION, disheveled_weight=0, mouth_shape=EMPTY_OPTION, lips_shape=EMPTY_OPTION, lips_color=EMPTY_OPTION, beard_style=EMPTY_OPTION, beard_color=EMPTY_OPTION, beard_length=EMPTY_OPTION, seed=0 ): if lens_angle_weight > 0: if lens_angle == RANDOM_OPTION: lens_angle = self.lens_angle_prompt.choice_prompt(seed) lens_angle = buildPromptWeight(lens_angle, lens_angle_weight) elif lens_angle != EMPTY_OPTION: lens_angle = buildPromptWeight(lens_angle, lens_angle_weight) else: lens_angle = "" else: lens_angle = "" if nationality_1 != EMPTY_OPTION or nationality_2 != EMPTY_OPTION: if nationality_1 == RANDOM_OPTION: nationality_1 = self.nationality_prompt.choice_prompt(seed) if nationality_2 == RANDOM_OPTION: nationality_2 = self.nationality_prompt.choice_prompt(seed) if nationality_1 != EMPTY_OPTION and nationality_2 != EMPTY_OPTION: nationality = buildCombinePromptWeight(nationality_1, nationality_2, nationality_mix_weight) else: nationality = nationality_1 if nationality_1 != EMPTY_OPTION else nationality_2 nationality = buildPromptWeight(nationality, 1.05) else: nationality = "" if gender == RANDOM_OPTION: gender = self.gender_prompt.choice_prompt(seed) gender = buildPromptWeight(gender, 1.05) elif gender != EMPTY_OPTION: gender = buildPromptWeight(gender, 1.05) else: gender = "" if androgynous_weight > 0: androgynous = self.portrait_prompt.get_prompt("androgynous") androgynous = buildPromptWeight(androgynous, androgynous_weight) else: androgynous = "" if age_weight > 0: if age == RANDOM_OPTION: age = self.age_prompt.choice_prompt(seed) age = buildPromptWeight(age, age_weight) elif age != EMPTY_OPTION: age = buildPromptWeight(age, age_weight) else: age = "" else: age = "" if body_part_weight > 0: if body_part == RANDOM_OPTION: body_part = self.body_part_prompt.choice_prompt(seed) body_part = buildPromptWeight(body_part, body_part_weight) elif body_part != EMPTY_OPTION: body_part = buildPromptWeight(body_part, body_part_weight) else: body_part = "" else: body_part = "" if body_type_weight > 0: if body_type == RANDOM_OPTION: body_type = self.body_type_prompt.choice_prompt(seed) body_type = buildPromptWeight(body_type, body_type_weight) elif body_type != EMPTY_OPTION: body_type = buildPromptWeight(body_type, body_type_weight) else: body_type = "" else: body_type = "" if face_shape_weight > 0: if face_shape == RANDOM_OPTION: face_shape = self.face_shape_prompt.choice_prompt(seed) face_shape = buildPromptWeight(face_shape, face_shape_weight) elif face_shape != EMPTY_OPTION: face_shape = buildPromptWeight(face_shape, face_shape_weight) else: face_shape = "" else: face_shape = "" if pretty_face_weight > 0: pretty_face = self.portrait_prompt.get_prompt("pretty_face") pretty_face = buildPromptWeight(pretty_face, pretty_face_weight) else: pretty_face = "" if ordinary_face_weight > 0: ordinary_face = self.portrait_prompt.get_prompt("ordinary_face") ordinary_face = buildPromptWeight(ordinary_face, ordinary_face_weight) else: ordinary_face = "" if ugly_face_weight > 0: ugly_face = self.portrait_prompt.get_prompt("ugly_face") ugly_face = buildPromptWeight(ugly_face, ugly_face_weight) else: ugly_face = "" if facial_asymmetry_weight > 0: facial_asymmetry = self.portrait_prompt.get_prompt("facial_asymmetry") facial_asymmetry = buildPromptWeight(facial_asymmetry, facial_asymmetry_weight) else: facial_asymmetry = "" if facial_expression_weight > 0: if facial_expression == RANDOM_OPTION: facial_expression = self.facial_expression_prompt.choice_prompt(seed) facial_expression = buildPromptWeight(facial_expression, facial_expression_weight) elif facial_expression != EMPTY_OPTION: facial_expression = buildPromptWeight(facial_expression, facial_expression_weight) else: facial_expression = "" else: facial_expression = "" if eyes_shape == RANDOM_OPTION: eyes_shape = self.eyes_shape_prompt.choice_prompt(seed) eyes_shape = buildPromptWeight(eyes_shape, 1.05) elif eyes_shape != EMPTY_OPTION: eyes_shape = buildPromptWeight(eyes_shape, 1.05) else: eyes_shape = "" if eyes_color == RANDOM_OPTION: eyes_color = self.eyes_color_prompt.choice_prompt(seed) eyes_color = buildPromptWeight(eyes_color, 1.05) elif eyes_color != EMPTY_OPTION: eyes_color = buildPromptWeight(eyes_color, 1.05) else: eyes_color = "" if eyebrows_style == RANDOM_OPTION: eyebrows_style = self.eyebrows_style_prompt.choice_prompt(seed) eyebrows_style = buildPromptWeight(eyebrows_style, 1.05) elif eyebrows_style != EMPTY_OPTION: eyebrows_style = buildPromptWeight(eyebrows_style, 1.05) else: eyebrows_style = "" if eyebrows_color == RANDOM_OPTION: eyebrows_color = self.eyebrows_color_prompt.choice_prompt(seed) eyebrows_color = buildPromptWeight(eyebrows_color, 1.05) elif eyebrows_color != EMPTY_OPTION: eyebrows_color = buildPromptWeight(eyebrows_color, 1.05) else: eyebrows_color = "" if eyelashs_style == RANDOM_OPTION: eyelashs_style = self.eyelashs_style_prompt.choice_prompt(seed) eyelashs_style = buildPromptWeight(eyelashs_style, 1.05) elif eyelashs_style != EMPTY_OPTION: eyelashs_style = buildPromptWeight(eyelashs_style, 1.05) else: eyelashs_style = "" if eyelashs_color == RANDOM_OPTION: eyelashs_color = self.eyelashs_color_prompt.choice_prompt(seed) eyelashs_color = buildPromptWeight(eyelashs_color, 1.05) elif eyelashs_color != EMPTY_OPTION: eyelashs_color = buildPromptWeight(eyelashs_color, 1.05) else: eyelashs_color = "" if nose_shape == RANDOM_OPTION: nose_shape = self.nose_shape_prompt.choice_prompt(seed) nose_shape = buildPromptWeight(nose_shape, 1.05) elif nose_shape != EMPTY_OPTION: nose_shape = buildPromptWeight(nose_shape, 1.05) else: nose_shape = "" if hair_style == RANDOM_OPTION: hair_style = self.hair_style_prompt.choice_prompt(seed) hair_style = buildPromptWeight(hair_style, 1.05) elif hair_style != EMPTY_OPTION: hair_style = buildPromptWeight(hair_style, 1.05) else: hair_style = "" if hair_color == RANDOM_OPTION: hair_color = self.hair_color_prompt.choice_prompt(seed) hair_color = buildPromptWeight(hair_color, 1.05) elif hair_color != EMPTY_OPTION: hair_color = buildPromptWeight(hair_color, 1.05) else: hair_color = "" if hair_length == RANDOM_OPTION: hair_length = self.hair_length_prompt.choice_prompt(seed) hair_length = buildPromptWeight(hair_length, 1.05) elif hair_length != EMPTY_OPTION: hair_length = buildPromptWeight(hair_length, 1.05) else: hair_length = "" if disheveled_weight > 0: disheveled = self.portrait_prompt.get_prompt("disheveled") disheveled = buildPromptWeight(disheveled, disheveled_weight) else: disheveled = "" if mouth_shape == RANDOM_OPTION: mouth_shape = self.mouth_shape_prompt.choice_prompt(seed) mouth_shape = buildPromptWeight(mouth_shape, 1.05) elif mouth_shape != EMPTY_OPTION: mouth_shape = buildPromptWeight(mouth_shape, 1.05) else: mouth_shape = "" if lips_shape == RANDOM_OPTION: lips_shape = self.lips_shape_prompt.choice_prompt(seed) lips_shape = buildPromptWeight(lips_shape, 1.05) elif lips_shape != EMPTY_OPTION: lips_shape = buildPromptWeight(lips_shape, 1.05) else: lips_shape = "" if lips_color == RANDOM_OPTION: lips_color = self.lips_color_prompt.choice_prompt(seed) lips_color = buildPromptWeight(lips_color, 1.05) elif lips_color != EMPTY_OPTION: lips_color = buildPromptWeight(lips_color, 1.05) else: lips_color = "" if beard_style == RANDOM_OPTION: beard_style = self.beard_style_prompt.choice_prompt(seed) beard_style = buildPromptWeight(beard_style, 1.05) elif beard_style != EMPTY_OPTION: beard_style = buildPromptWeight(beard_style, 1.05) else: beard_style = "" if beard_color == RANDOM_OPTION: beard_color = self.beard_color_prompt.choice_prompt(seed) beard_color = buildPromptWeight(beard_color, 1.05) elif beard_color != EMPTY_OPTION: beard_color = buildPromptWeight(beard_color, 1.05) else: beard_color = "" if beard_length == RANDOM_OPTION: beard_length = self.beard_length_prompt.choice_prompt(seed) beard_length = buildPromptWeight(beard_length, 1.05) elif beard_length != EMPTY_OPTION: beard_length = buildPromptWeight(beard_length, 1.05) else: beard_length = "" build_words = [ lens_angle, nationality, gender, androgynous, age, body_part, body_type, face_shape, pretty_face, ordinary_face, ugly_face, facial_asymmetry, facial_expression, eyes_shape, eyes_color, eyebrows_style, eyebrows_color, eyelashs_style, eyelashs_color, nose_shape, hair_style, hair_color, hair_length, disheveled, mouth_shape, lips_shape, lips_color, beard_style, beard_color, beard_length ] prompt_words = [] for words in build_words: if words is not None and words != "": prompt_words.append(words) output_prompt = "" if len(prompt_words) > 0: output_prompt = ", ".join(prompt_words) return output_prompt # 生成人像皮肤提示词 def generate_portrait_skin_prompt(self, skin=EMPTY_OPTION, skin_weight=1, skin_details_weight=0, skin_pores_weight=0, skin_imperfections_weight=0, skin_acne_weight=0, tanned_skin_weight=0, bare_face_weight=0, moist_face_weight=0, dried_face_weight=0, dimples_weight=0, wrinkles_weight=0, freckles_weight=0, moles_weight=0, eyes_details_weight=0, circular_pupils_weight=0, iris_details_weight=0, circular_iris_weight=0, seed=0 ): prompt_words = [] if skin_weight > 0: if skin == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.skin_prompt.choice_prompt(seed), skin_weight)) elif skin != EMPTY_OPTION: prompt_words.append(buildPromptWeight(skin, skin_weight)) if skin_details_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("skin_details"), skin_details_weight)) if skin_pores_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("skin_pores"), skin_pores_weight)) if skin_imperfections_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("skin_imperfections"), skin_imperfections_weight)) if skin_acne_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("skin_acne"), skin_acne_weight)) if tanned_skin_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("tanned_skin"), tanned_skin_weight)) if bare_face_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("bare_face"), bare_face_weight)) if moist_face_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("moist_face"), moist_face_weight)) if dried_face_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("dried_face"), dried_face_weight)) if dimples_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("dimples"), dimples_weight)) if wrinkles_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("wrinkles"), wrinkles_weight)) if freckles_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("freckles"), freckles_weight)) if moles_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("moles"), moles_weight)) if eyes_details_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("eyes_details"), eyes_details_weight)) if circular_pupils_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("circular_pupil"), circular_pupils_weight)) if iris_details_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("iris_details"), iris_details_weight)) if circular_iris_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("circular_iris"), circular_iris_weight)) output_prompt = "" if len(prompt_words) > 0: output_prompt = ', '.join(prompt_words) return output_prompt # 生成人像时装提示词 def generate_portrait_fashion_prompt(self, clothes=EMPTY_OPTION, clothes_weight=1, clothes_color=EMPTY_OPTION, clothes_color_weight=0, up_clothes=EMPTY_OPTION, up_clothes_weight=0, down_clothes=EMPTY_OPTION, down_clothes_weight=0, trousers=EMPTY_OPTION, trousers_weight=0, underwear=EMPTY_OPTION, underwear_weight=0, underpants=EMPTY_OPTION, underpants_weight=0, socks=EMPTY_OPTION, socks_weight=0, shoes=EMPTY_OPTION, shoes_weight=0, hat=EMPTY_OPTION, hat_weight=0, gloves=EMPTY_OPTION, gloves_weight=0, head_decoration=EMPTY_OPTION, head_decoration_weight=0, ears_decoration=EMPTY_OPTION, ears_decoration_weight=0, neck_decoration=EMPTY_OPTION, neck_decoration_weight=0, chest_decoration=EMPTY_OPTION, chest_decoration_weight=0, waist_decoration=EMPTY_OPTION, waist_decoration_weight=0, arms_decoration=EMPTY_OPTION, arms_decoration_weight=0, hands_decoration=EMPTY_OPTION, hands_decoration_weight=0, legs_decoration=EMPTY_OPTION, legs_decoration_weight=0, feet_decoration=EMPTY_OPTION, feet_decoration_weight=0, seed=0 ): prompt_words = [] if clothes_weight > 0: if clothes == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.clothes_prompt.choice_prompt(seed), clothes_weight)) elif clothes != EMPTY_OPTION: prompt_words.append(buildPromptWeight(clothes, clothes_weight)) if clothes_color_weight > 0: if clothes_color == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.clothes_color_prompt.choice_prompt(seed), clothes_color_weight)) elif clothes_color != EMPTY_OPTION: prompt_words.append(buildPromptWeight(clothes_color, clothes_color_weight)) if up_clothes_weight > 0: if up_clothes == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.up_clothes_prompt.choice_prompt(seed), up_clothes_weight)) elif up_clothes != EMPTY_OPTION: prompt_words.append(buildPromptWeight(up_clothes, up_clothes_weight)) if down_clothes_weight > 0: if down_clothes== RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.down_clothes_prompt.choice_prompt(seed), down_clothes_weight)) elif down_clothes != EMPTY_OPTION: prompt_words.append(buildPromptWeight(down_clothes, down_clothes_weight)) if trousers_weight > 0: if trousers == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.trousers_prompt.choice_prompt(seed), trousers_weight)) elif trousers != EMPTY_OPTION: prompt_words.append(buildPromptWeight(trousers, trousers_weight)) if underwear_weight > 0: if underwear == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.underwear_prompt.choice_prompt(seed), underwear_weight)) elif underwear != EMPTY_OPTION: prompt_words.append(buildPromptWeight(underwear, underwear_weight)) if underpants_weight > 0: if underpants == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.underpants_prompt.choice_prompt(seed), underpants_weight)) elif underpants != EMPTY_OPTION: prompt_words.append(buildPromptWeight(underpants, underpants_weight)) if socks_weight > 0: if socks == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.socks_prompt.choice_prompt(seed), socks_weight)) elif socks != EMPTY_OPTION: prompt_words.append(buildPromptWeight(socks, socks_weight)) if shoes_weight > 0: if shoes == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.shoes_prompt.choice_prompt(seed), shoes_weight)) elif shoes != EMPTY_OPTION: prompt_words.append(buildPromptWeight(shoes, shoes_weight)) if hat_weight > 0: if hat == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.hat_prompt.choice_prompt(seed), hat_weight)) elif hat != EMPTY_OPTION: prompt_words.append(buildPromptWeight(hat, hat_weight)) if gloves_weight > 0: if gloves == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.gloves_prompt.choice_prompt(seed), gloves_weight)) elif gloves != EMPTY_OPTION: prompt_words.append(buildPromptWeight(gloves, gloves_weight)) if head_decoration_weight > 0: if head_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.head_decoration_prompt.choice_prompt(seed), head_decoration_weight)) elif head_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(head_decoration, head_decoration_weight)) if ears_decoration_weight > 0: if ears_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.ears_decoration_prompt.choice_prompt(seed), ears_decoration_weight)) elif ears_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(ears_decoration, ears_decoration_weight)) if neck_decoration_weight > 0: if neck_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.neck_decoration_prompt.choice_prompt(seed), neck_decoration_weight)) elif neck_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(neck_decoration, neck_decoration_weight)) if chest_decoration_weight > 0: if chest_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.chest_decoration_prompt.choice_prompt(seed), chest_decoration_weight)) elif chest_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(chest_decoration, chest_decoration_weight)) if waist_decoration_weight > 0: if waist_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.waist_decoration_prompt.choice_prompt(seed), waist_decoration_weight)) elif waist_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(waist_decoration, waist_decoration_weight)) if arms_decoration_weight > 0: if arms_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.arms_decoration_prompt.choice_prompt(seed), arms_decoration_weight)) elif arms_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(arms_decoration, arms_decoration_weight)) if hands_decoration_weight > 0: if hands_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.hands_decoration_prompt.choice_prompt(seed), hands_decoration_weight)) elif hands_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(hands_decoration, hands_decoration_weight)) if legs_decoration_weight > 0: if legs_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.legs_decoration_prompt.choice_prompt(seed), legs_decoration_weight)) elif legs_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(legs_decoration, legs_decoration_weight)) if feet_decoration_weight > 0: if feet_decoration == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.feet_decoration_prompt.choice_prompt(seed), feet_decoration_weight)) elif feet_decoration != EMPTY_OPTION: prompt_words.append(buildPromptWeight(feet_decoration, feet_decoration_weight)) output_prompt = "" if len(prompt_words) > 0: output_prompt = ', '.join(prompt_words) return output_prompt # 生成人像姿态提示词 def generate_portrait_pose_prompt(self, pose=EMPTY_OPTION, pose_weight=1, action=EMPTY_OPTION, action_weight=0, head_action=EMPTY_OPTION, head_action_weight=0, chest_action=EMPTY_OPTION, chest_action_weight=0, waist_action=EMPTY_OPTION, waist_action_weight=0, arms_action=EMPTY_OPTION, arms_action_weight=0, hands_action=EMPTY_OPTION, hands_action_weight=0, legs_action=EMPTY_OPTION, legs_action_weight=0, feet_action=EMPTY_OPTION, feet_action_weight=0, seed=0 ): prompt_words = [] if pose_weight > 0: if pose == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.pose_prompt.choice_prompt(seed), pose_weight)) elif pose != EMPTY_OPTION: prompt_words.append(buildPromptWeight(pose, pose_weight)) if action_weight > 0: if action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.action_prompt.choice_prompt(seed), action_weight)) elif action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(action, action_weight)) if head_action_weight > 0: if head_action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.head_action_prompt.choice_prompt(seed), head_action_weight)) elif head_action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(head_action, head_action_weight)) if chest_action_weight > 0: if chest_action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.chest_action_prompt.choice_prompt(seed), chest_action_weight)) elif chest_action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(chest_action, chest_action_weight)) if waist_action_weight > 0: if waist_action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.waist_action_prompt.choice_prompt(seed), waist_action_weight)) elif waist_action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(waist_action, waist_action_weight)) if arms_action_weight > 0: if arms_action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.arms_action_prompt.choice_prompt(seed), arms_action_weight)) elif arms_action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(arms_action, arms_action_weight)) if hands_action_weight > 0: if hands_action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.hands_action_prompt.choice_prompt(seed), hands_action_weight)) elif hands_action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(hands_action, hands_action_weight)) if legs_action_weight > 0: if legs_action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.legs_action_prompt.choice_prompt(seed), legs_action_weight)) elif legs_action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(legs_action, legs_action_weight)) if feet_action_weight > 0: if feet_action == RANDOM_OPTION: prompt_words.append(buildPromptWeight(self.feet_action_prompt.choice_prompt(seed), feet_action_weight)) elif feet_action != EMPTY_OPTION: prompt_words.append(buildPromptWeight(feet_action, feet_action_weight)) output_prompt = "" if len(prompt_words) > 0: output_prompt = ', '.join(prompt_words) return output_prompt # 生成人像化妆提示词 def generate_portrait_cosmetic_prompt(self, makeup_style=EMPTY_OPTION, makeup_style_weight=1, makeup_color=EMPTY_OPTION, makeup_color_weight=0, eyeshadow_weight=0, eyeliner_weight=0, mascara_weight=0, blush_weight=0, lipstick_weight=0, lip_gloss_weight=0, seed=0 ): prompt_words = [] if makeup_style_weight > 0: if makeup_style == RANDOM_OPTION: makeup_style = self.makeup_style_prompt.choice_prompt(seed) prompt_words.append(buildPromptWeight(makeup_style, makeup_style_weight)) elif makeup_style != EMPTY_OPTION: prompt_words.append(buildPromptWeight(makeup_style, makeup_style_weight)) if makeup_color_weight > 0: if makeup_color == RANDOM_OPTION: makeup_color = self.makeup_color_prompt.choice_prompt(seed) prompt_words.append(buildPromptWeight(makeup_color, makeup_color_weight)) elif makeup_color != EMPTY_OPTION: prompt_words.append(buildPromptWeight(makeup_color, makeup_color_weight)) if eyeshadow_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("eyeshadow_make_up"), eyeshadow_weight)) if eyeliner_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("eyeliner_make_up"), eyeliner_weight)) if mascara_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("mascara_make_up"), mascara_weight)) if blush_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("blush_make_up"), blush_weight)) if lipstick_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("lipstick_make_up"), lipstick_weight)) if lip_gloss_weight > 0: prompt_words.append(buildPromptWeight(self.portrait_prompt.get_prompt("lip_gloss_make_up"), lip_gloss_weight)) output_prompt = "" if len(prompt_words) > 0: output_prompt = ', '.join(prompt_words) return output_prompt # 生成光线提示词 def generate_light_prompt(self, light_type=EMPTY_OPTION, light_type_weight=1, light_color=EMPTY_OPTION, light_color_weight=0, light_direction=EMPTY_OPTION, light_direction_weight=0, seed=0 ): prompt_words = [] if light_type_weight > 0: if light_type == RANDOM_OPTION: light_type = self.light_type_prompt.choice_prompt(seed) prompt_words.append(buildPromptWeight(light_type, light_type_weight)) elif light_type != EMPTY_OPTION: prompt_words.append(buildPromptWeight(light_type, light_type_weight)) if light_color_weight > 0: if light_color == RANDOM_OPTION: light_color = self.light_color_prompt.choice_prompt(seed) prompt_words.append(buildPromptWeight(light_color, light_color_weight)) elif light_color != EMPTY_OPTION: prompt_words.append(buildPromptWeight(light_color, light_color_weight)) if light_direction_weight > 0: if light_direction == RANDOM_OPTION: light_direction = self.light_direction_prompt.choice_prompt(seed) prompt_words.append(buildPromptWeight(light_direction, light_direction_weight)) elif light_direction != EMPTY_OPTION: prompt_words.append(buildPromptWeight(light_direction, light_direction_weight)) output_prompt = "" if len(prompt_words) > 0: output_prompt = ', '.join(prompt_words) return output_prompt # 生成绘画艺术提示词 def generate_draw_artist_prompt(self, draw_artist_1=EMPTY_OPTION, draw_artist_1_weight=1, draw_artist_2=EMPTY_OPTION, draw_artist_2_weight=0, draw_artist_3=EMPTY_OPTION, draw_artist_3_weight=0, draw_artist_4=EMPTY_OPTION, draw_artist_4_weight=0, draw_artist_5=EMPTY_OPTION, draw_artist_5_weight=0, seed=0 ): prompt_words = [] if draw_artist_1_weight > 0: if draw_artist_1 == RANDOM_OPTION: draw_artist_1 = self.draw_artist_prompt.choice_prompt(seed) prompt_words.append(buildPromptWeight(draw_artist_1, draw_artist_1_weight)) elif draw_artist_1 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_artist_1, draw_artist_1_weight)) if draw_artist_2_weight > 0: if draw_artist_2 == RANDOM_OPTION: draw_artist_2 = self.draw_artist_prompt.choice_prompt(seed + 1) prompt_words.append(buildPromptWeight(draw_artist_2, draw_artist_2_weight)) elif draw_artist_2 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_artist_2, draw_artist_2_weight)) if draw_artist_3_weight > 0: if draw_artist_3 == RANDOM_OPTION: draw_artist_3 = self.draw_artist_prompt.choice_prompt(seed + 2) prompt_words.append(buildPromptWeight(draw_artist_3, draw_artist_3_weight)) elif draw_artist_3 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_artist_3, draw_artist_3_weight)) if draw_artist_4_weight > 0: if draw_artist_4 == RANDOM_OPTION: draw_artist_4 = self.draw_artist_prompt.choice_prompt(seed + 3) prompt_words.append(buildPromptWeight(draw_artist_4, draw_artist_4_weight)) elif draw_artist_4 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_artist_4, draw_artist_4_weight)) if draw_artist_5_weight > 0: if draw_artist_5 == RANDOM_OPTION: draw_artist_5 = self.draw_artist_prompt.choice_prompt(seed + 4) prompt_words.append(buildPromptWeight(draw_artist_5, draw_artist_5_weight)) elif draw_artist_5 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_artist_5, draw_artist_5_weight)) output_prompt = "" if len(prompt_words) > 0: output_prompt = ', '.join(prompt_words) return output_prompt # 生成绘画风格提示词 def generate_draw_style_prompt(self, draw_style_1=EMPTY_OPTION, draw_style_1_weight=1, draw_style_2=EMPTY_OPTION, draw_style_2_weight=0, draw_style_3=EMPTY_OPTION, draw_style_3_weight=0, draw_style_4=EMPTY_OPTION, draw_style_4_weight=0, draw_style_5=EMPTY_OPTION, draw_style_5_weight=0, seed=0 ): prompt_words = [] if draw_style_1_weight > 0: if draw_style_1 == RANDOM_OPTION: draw_style_1 = self.draw_style_prompt.choice_prompt(seed) prompt_words.append(buildPromptWeight(draw_style_1, draw_style_1_weight)) elif draw_style_1 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_style_1, draw_style_1_weight)) if draw_style_2_weight > 0: if draw_style_2 == RANDOM_OPTION: draw_style_2 = self.draw_style_prompt.choice_prompt(seed + 1) prompt_words.append(buildPromptWeight(draw_style_2, draw_style_2_weight)) elif draw_style_2 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_style_2, draw_style_2_weight)) if draw_style_3_weight > 0: if draw_style_3 == RANDOM_OPTION: draw_style_3 = self.draw_style_prompt.choice_prompt(seed + 2) prompt_words.append(buildPromptWeight(draw_style_3, draw_style_3_weight)) elif draw_style_3 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_style_3, draw_style_3_weight)) if draw_style_4_weight > 0: if draw_style_4 == RANDOM_OPTION: draw_style_4 = self.draw_style_prompt.choice_prompt(seed + 3) prompt_words.append(buildPromptWeight(draw_style_4, draw_style_4_weight)) elif draw_style_4 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_style_4, draw_style_4_weight)) if draw_style_5_weight > 0: if draw_style_5 == RANDOM_OPTION: draw_style_5 = self.draw_style_prompt.choice_prompt(seed + 4) prompt_words.append(buildPromptWeight(draw_style_5, draw_style_5_weight)) elif draw_style_5 != EMPTY_OPTION: prompt_words.append(buildPromptWeight(draw_style_5, draw_style_5_weight)) output_prompt = "" if len(prompt_words) > 0: output_prompt = ', '.join(prompt_words) return output_prompt # 初始化 def _init_build_prompt_manager(): script_dir = os.path.dirname(os.path.abspath(__file__)) config_dir = os.path.join(script_dir, "..", "assets") return BuildPromptManager(config_dir, config) # 初始化 build_prompt_manager = _init_build_prompt_manager()