优化与新增艺术提示词输出

This commit is contained in:
DreamFly
2026-01-17 18:22:15 +08:00
parent bd0e0fd47d
commit 0aede29674
12 changed files with 279 additions and 71 deletions
+4 -1
View File
@@ -3,7 +3,8 @@ from .nodes.prompt_generate import GeneratePrompt
from .nodes.prompt_scenery import SceneryPrompt
from .nodes.prompt_negative import NegativePrompt
from .nodes.prompt_light import LightPrompt
from .nodes.prompt_style import DrawStylePrompt
from .nodes.prompt_draw_artist import DrawArtistPrompt
from .nodes.prompt_draw_style import DrawStylePrompt
from .nodes.prompt_portrait import PortraitPrompt
from .nodes.prompt_portrait import PortraitSkinPrompt
from .nodes.prompt_portrait import PortraitFashionPrompt
@@ -26,6 +27,7 @@ NODE_CLASS_MAPPINGS = {
"SceneryPrompt" : SceneryPrompt,
"NegativePrompt" : NegativePrompt,
"LightPrompt" : LightPrompt,
"DrawArtistPrompt" : DrawArtistPrompt,
"DrawStylePrompt" : DrawStylePrompt,
"PortraitPrompt": PortraitPrompt,
"PortraitSkinPrompt": PortraitSkinPrompt,
@@ -52,6 +54,7 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"SceneryPrompt": "Generate Scenery Prompt",
"NegativePrompt": "Generate Negative Prompt",
"LightPrompt": "Generate Light Prompt",
"DrawArtistPrompt" : "Generate Draw Artist Prompt",
"DrawStylePrompt" : "Generate Draw Style Prompt",
"PortraitPrompt": "Portrait Prompt",
"PortraitSkinPrompt": "Portrait Skin Prompt",
+9
View File
@@ -1,4 +1,13 @@
{
"languages": [
"Chinese",
"English"
],
"assets": {
"default": "zh",
"Chinese": "zh",
"English": "en"
},
"classifies": [
"action",
"age",
+59 -1
View File
@@ -111,7 +111,7 @@ class BuildPrompt:
return prompt
def generate_prompt(self, seed, styles="", artists=""):
def generate_prompt(self, seed):
length = len(self._dataset)
if length == 0:
@@ -937,7 +937,65 @@ class BuildPromptManager:
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,
+158
View File
@@ -0,0 +1,158 @@
import os
from ..modules.build_prompt import buildOptionList, buildPromptWeight, build_prompt_manager
from ..modules.build_prompt import EMPTY_OPTION, RANDOM_OPTION, DEFAULT_OPTION
from ..modules.config import config
# Draw Artist Prompt 绘画艺术提示词
class DrawArtistPrompt:
@classmethod
def INPUT_TYPES(s):
max_float_value = 2
return {
"required": {
# 语言选择
"language": (config.languages, {
"default": config.languages[0]
}),
# 绘画艺术
"draw_artist_1": (buildOptionList(build_prompt_manager.draw_artist_prompt.get_dataset()), {
"default": EMPTY_OPTION,
}),
# 绘画艺术权重
"draw_artist_1_weight": ("FLOAT", {
"default": 1,
"min": 0,
"max": max_float_value,
"round": 0.01,
"step": 0.05,
"display": "slider",
}),
# 绘画艺术
"draw_artist_2": (buildOptionList(build_prompt_manager.draw_artist_prompt.get_dataset()), {
"default": EMPTY_OPTION,
}),
# 绘画艺术权重
"draw_artist_2_weight": ("FLOAT", {
"default": 0,
"min": 0,
"max": max_float_value,
"round": 0.01,
"step": 0.05,
"display": "slider",
}),
# 绘画艺术
"draw_artist_3": (buildOptionList(build_prompt_manager.draw_artist_prompt.get_dataset()), {
"default": EMPTY_OPTION,
}),
# 绘画艺术权重
"draw_artist_3_weight": ("FLOAT", {
"default": 0,
"min": 0,
"max": max_float_value,
"round": 0.01,
"step": 0.05,
"display": "slider",
}),
# 绘画艺术
"draw_artist_4": (buildOptionList(build_prompt_manager.draw_artist_prompt.get_dataset()), {
"default": EMPTY_OPTION,
}),
# 绘画艺术权重
"draw_artist_4_weight": ("FLOAT", {
"default": 0,
"min": 0,
"max": max_float_value,
"round": 0.01,
"step": 0.05,
"display": "slider",
}),
# 绘画艺术
"draw_artist_5": (buildOptionList(build_prompt_manager.draw_artist_prompt.get_dataset()), {
"default": EMPTY_OPTION,
}),
# 绘画艺术权重
"draw_artist_5_weight": ("FLOAT", {
"default": 0,
"min": 0,
"max": max_float_value,
"round": 0.01,
"step": 0.05,
"display": "slider",
}),
# 随机种子值
"seed": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF}),
# 启用
"enable": ("BOOLEAN", {"default": True}),
# 预设提示词
"preset_prompt": ("STRING", {
"multiline": True,
"default": ""
})
},
"optional": {
"input_prompt": ("STRING", {"forceInput": True}),
}
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("text",)
FUNCTION = "prompt_generate"
CATEGORY = "PromptWrapper"
def prompt_generate(self,
language="",
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,
enable=True,
preset_prompt="",
input_prompt=""
):
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
if input_prompt != "":
prompt_words.append(input_prompt)
if preset_prompt != "":
prompt_words.append(preset_prompt)
if enable == True:
draw_artist_prompt = build_prompt_manager.generate_draw_artist_prompt(
draw_artist_1=draw_artist_1,
draw_artist_1_weight=draw_artist_1_weight,
draw_artist_2=draw_artist_2,
draw_artist_2_weight=draw_artist_2_weight,
draw_artist_3=draw_artist_3,
draw_artist_3_weight=draw_artist_3_weight,
draw_artist_4=draw_artist_4,
draw_artist_4_weight=draw_artist_4_weight,
draw_artist_5=draw_artist_5,
draw_artist_5_weight=draw_artist_5_weight,
seed=seed
)
if draw_artist_prompt != "":
prompt_words.append(draw_artist_prompt)
output_prompt = ""
if len(prompt_words) > 0:
output_prompt = ", ".join(prompt_words)
return (output_prompt, )
@@ -13,8 +13,8 @@ class DrawStylePrompt:
return {
"required": {
# 语言选择
"language": (["Chinese", "English"],{
"default": "Chinese",
"language": (config.languages, {
"default": config.languages[0]
}),
# 绘画风格
"draw_style_1": (buildOptionList(build_prompt_manager.draw_style_prompt.get_dataset()), {
@@ -121,8 +121,8 @@ class DrawStylePrompt:
input_prompt=""
):
language = "zh" if language == "Chinese" else "en"
build_prompt_manager.reload_build_prompt_datas(language)
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
+3 -3
View File
@@ -13,8 +13,8 @@ class GeneratePrompt:
def INPUT_TYPES(s):
return {
"required": {
"language": (["Chinese", "English"], {
"default": "Chinese"
"language": (config.languages, {
"default": config.languages[0]
}),
"classify": (buildOptionList(config.classifies, True, False), {
"default": DEFAULT_OPTION
@@ -49,7 +49,7 @@ class GeneratePrompt:
if classify != EMPTY_OPTION:
# 获取Script的目录路径
script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory
language_dir = "zh" if language == "Chinese" else "en"
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
classify_datas = buildClassifyDatas(classify)
file_name = f"{classify_datas}.jsonl"
+4 -4
View File
@@ -13,8 +13,8 @@ class LightPrompt:
return {
"required": {
# 语言选择
"language": (["Chinese", "English"],{
"default": "Chinese",
"language": (config.languages, {
"default": config.languages[0],
}),
# 光的类型
"light_type": (buildOptionList(build_prompt_manager.light_type_prompt.get_dataset()), {
@@ -91,8 +91,8 @@ class LightPrompt:
input_prompt=""
):
language = "zh" if language == "Chinese" else "en"
build_prompt_manager.reload_build_prompt_datas(language)
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
+5 -2
View File
@@ -1,5 +1,6 @@
import os
from ..modules.build_prompt import BuildPrompt
from ..modules.config import config
@@ -10,7 +11,9 @@ class NegativePrompt:
def INPUT_TYPES(s):
return {
"required": {
"language": (["Chinese", "English"],),
"language": (config.languages, {
"default": config.languages[0]
}),
"seed": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF}),
"preset_prompt": ("STRING", {
"multiline": True,
@@ -28,7 +31,7 @@ class NegativePrompt:
# 获取Script的目录路径
script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory
language_dir = "zh" if language == "Chinese" else "en"
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
data_file = os.path.join(script_dir, "..", "assets", language_dir, "negative_datas.jsonl")
build = BuildPrompt(data_file)
+21 -20
View File
@@ -13,8 +13,8 @@ class PortraitPrompt:
return {
"required": {
# 语言选择
"language": (["Chinese", "English"],{
"default": "Chinese",
"language": (config.languages, {
"default": config.languages[0]
}),
# 镜头角度
"lens_angle": (buildOptionList(build_prompt_manager.lens_angle_prompt.get_dataset()), {
@@ -299,8 +299,8 @@ class PortraitPrompt:
input_prompt=""
):
language = "zh" if language == "Chinese" else "en"
build_prompt_manager.reload_build_prompt_datas(language)
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
@@ -373,8 +373,8 @@ class PortraitSkinPrompt:
return {
"required": {
# 语言选择
"language": (["Chinese", "English"],{
"default": "Chinese",
"language": (config.languages, {
"default": config.languages[0]
}),
# 皮肤
"skin": (buildOptionList(build_prompt_manager.skin_prompt.get_dataset()), {
@@ -579,8 +579,9 @@ class PortraitSkinPrompt:
preset_prompt="",
input_prompt=""
):
language = "zh" if language == "Chinese" else "en"
build_prompt_manager.reload_build_prompt_datas(language)
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
@@ -634,8 +635,8 @@ class PortraitFashionPrompt:
return {
"required": {
# 语言选择
"language": (["Chinese", "English"],{
"default": "Chinese",
"language": (config.languages, {
"default": config.languages[0]
}),
# 衣服
"clothes": (buildOptionList(build_prompt_manager.clothes_prompt.get_dataset()), {
@@ -967,8 +968,8 @@ class PortraitFashionPrompt:
input_prompt=""
):
language = "zh" if language == "Chinese" else "en"
build_prompt_manager.reload_build_prompt_datas(language)
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
@@ -1044,8 +1045,8 @@ class PortraitPosePrompt:
return {
"required": {
# 语言选择
"language": (["Chinese", "English"],{
"default": "Chinese",
"language": (config.languages, {
"default": config.languages[0]
}),
# 姿态
"pose": (buildOptionList(build_prompt_manager.pose_prompt.get_dataset()), {
@@ -1212,8 +1213,8 @@ class PortraitPosePrompt:
input_prompt=""
):
language = "zh" if language == "Chinese" else "en"
build_prompt_manager.reload_build_prompt_datas(language)
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
@@ -1267,8 +1268,8 @@ class PortraitCosmeticPrompt:
return {
"required": {
# 语言选择
"language": (["Chinese", "English"],{
"default": "Chinese"
"language": (config.languages, {
"default": config.languages[0]
}),
# 化妆风格
"makeup_style": (buildOptionList(build_prompt_manager.makeup_style_prompt.get_dataset()), {
@@ -1388,8 +1389,8 @@ class PortraitCosmeticPrompt:
input_prompt=""
):
language = "zh" if language == "Chinese" else "en"
build_prompt_manager.reload_build_prompt_datas(language)
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
build_prompt_manager.reload_build_prompt_datas(language_dir)
prompt_words = []
+6 -6
View File
@@ -14,8 +14,8 @@ class RandomsPrompt:
return {
"required": {
# 选择语言
"language": (["Chinese", "English"], {
"default": "Chinese"
"language": (config.languages, {
"default": config.languages[0]
}),
"classify1": (buildOptionList(config.classifies, True, False), {
"default": DEFAULT_OPTION
@@ -66,7 +66,7 @@ class RandomsPrompt:
if enable == True:
# 获取Script的目录路径
script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory
language_dir = "zh" if language == "Chinese" else "en"
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
classifys = [classify1, classify2, classify3, classify4, classify5, classify6, classify7, classify8]
for classify in classifys:
@@ -101,8 +101,8 @@ class RandomsWeightPrompt:
return {
"required": {
# 选择语言
"language": (["Chinese", "English"], {
"default": "Chinese"
"language": (config.languages, {
"default": config.languages[0]
}),
"classify1": (buildOptionList(config.classifies, True, False), {
"default": DEFAULT_OPTION
@@ -219,7 +219,7 @@ class RandomsWeightPrompt:
if enable == True:
# 获取Script的目录路径
script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory
language_dir = "zh" if language == "Chinese" else "en"
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
classify_weights = [(classify1, classify1_weight), (classify2, classify2_weight), (classify3, classify3_weight),
(classify4, classify4_weight), (classify5, classify5_weight), (classify6, classify6_weight),
(classify7, classify7_weight), (classify8, classify8_weight)]
+5 -29
View File
@@ -4,25 +4,6 @@ from ..modules.build_prompt import EMPTY_OPTION, RANDOM_OPTION, DEFAULT_OPTION
from ..modules.config import config
styles = [
EMPTY_OPTION, RANDOM_OPTION
]
artists = [
EMPTY_OPTION, RANDOM_OPTION, "popular", "greg mode", "3D", "abstract", "angular",
"anime", "architecture", "art nouveau", "art deco", "baroque", "bauhaus", "cartoon",
"character", "children's illustration", "cityscape", "cinema", "clean", "cloudscape",
"collage", "colorful", "comics", "cubism", "dark", "detailed", "digital", "expressionism",
"fantasy", "fashion", "fauvism", "figurativism", "gore", "graffiti", "graphic design",
"high contrast", "horror", "impressionism", "installation", "landscape", "light",
"line drawing", "low contrast", "luminism", "magical realism", "manga", "melanin",
"messy", "monochromatic", "nature", "nudity", "photography", "pop art", "portrait",
"primitivism", "psychedelic", "realism", "renaissance", "romanticism",
"scene", "sci-fi", "sculpture", "seascape", "space", "stained glass", "still life",
"storybook realism", "street art", "streetscape", "surrealism", "symbolism", "textile",
"ukiyo-e", "vibrant", "watercolor", "whimsical"
]
# Scenery Prompt
@@ -33,11 +14,9 @@ class SceneryPrompt:
return {
"required": {
# 选择语言
"language": (["Chinese", "English"], {
"default": "Chinese"
"language": (config.languages, {
"default": config.languages[0]
}),
"style": (styles, { "default": DEFAULT_OPTION }),
"artist": (artists, { "default": DEFAULT_OPTION }),
"seed": ("INT", { "default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF }),
# 预设前缀提示词
"preset_prefix": ("STRING", {
@@ -60,19 +39,16 @@ class SceneryPrompt:
FUNCTION = "generate_prompt"
CATEGORY = "PromptWrapper"
def generate_prompt(self, language, style, artist, seed,
def generate_prompt(self, language, seed,
preset_prefix="", preset_suffix="", input_prompt=""):
styles = (style,)
artists = (artist,)
# 获取Script的目录路径
script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory
language_dir = "zh" if language == "Chinese" else "en"
language_dir = config.assets[language] if language in config.assets else config.assets["default"]
data_file = os.path.join(script_dir, "..", "assets", language_dir, "scenery_datas.jsonl")
build = BuildPrompt(data_file)
scenery_prompt = build.generate_prompt(seed, styles, artists)
scenery_prompt = build.generate_prompt(seed)
prompt_words = []
+1 -1
View File
@@ -1,7 +1,7 @@
[project]
name = "ComfyUI-PromptWrapper"
description = "ComfyUI nodes for PromptWrapper, Mainly for prompt word translation, Chinese translation into English or English translation into Chinese."
version = "1.2.0"
version = "1.3.0"
license = {file = "LICENSE"}
[project.urls]