Skip to content

Commit 33d601b

Browse files
committed
1.13
1 parent ba3d5ca commit 33d601b

File tree

10 files changed

+80
-45
lines changed

10 files changed

+80
-45
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ API_key.json
99
installed.txt
1010
my_styles.csv
1111
*.pem
12+
wildcards/WC

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ ___
5555

5656
- **For all nodes with download:** Supports direct download from **civitai** and **huggingface** with model address link and model download link
5757
- **For all dodes load photos with the URL:** Automatically download photos to the url of the image. Can automatically search for the highest quality image with the [Pinterest link](https://www.pinterest.com/) . See also the [support list](https://github.com/mikf/gallery-dl/blob/master/docs/supportedsites.md)
58-
- **For all nodes capable of entering the text:** Support **Google Translate** and [**Dynamic Prompt function**](https://github.com/adieyal/sd-dynamic-prompts/blob/main/docs/SYNTAX.md) (Request installed node [Dynamicprompts](https://github.com/adieyal/comfyui-dynamicprompts))
58+
- **For all nodes capable of entering the text:** Support **Google Translate** and [**Dynamic Prompt function**](https://github.com/adieyal/sd-dynamic-prompts/blob/main/docs/SYNTAX.md) ((Wildcards folder: /ComfyUI/wildcards))
5959
___
6060
### BaseNode
6161
*A collection of smart nodes that replace basic tasks, helping users build processes smarter and faster*

README_vi.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ ___
5353

5454
- **Đối với tất cả các node có chức năng tải về:** Hỗ trợ tải trực tiếp từ **civitai****huggingface** bằng liên kết địa chỉ model hoặc liên kết tải model.
5555
- **Đối với tất cả các node tải ảnh bằng URL:** Tự động tải ảnh về từ đường dẫn hình ảnh. Có thể tự động tìm ảnh chất lượng cao nhất với link [Pinterest](https://www.pinterest.com/). Xem thêm [danh sách hỗ trợ](https://github.com/mikf/gallery-dl/blob/master/docs/supportedsites.md)
56-
- **Đối với tất cả các node nhập văn bản:** Hỗ trợ **Google Dịch**[**chức năng Dynamic Prompt**](https://github.com/adieyal/sd-dynamic-prompts/blob/main/docs/SYNTAX.md) (Yêu cầu cài đặt node [Dynamicprompts](https://github.com/adieyal/comfyui-dynamicprompts))
56+
- **Đối với tất cả các node nhập văn bản:** Hỗ trợ **Google Dịch**[**chức năng Dynamic Prompt**](https://github.com/adieyal/sd-dynamic-prompts/blob/main/docs/SYNTAX.md) (Wildcards folder: /ComfyUI/wildcards)
5757
___
5858
### BaseNode
5959
*Bộ node thông minh thay thế các tác vụ cơ bản, giúp người dùng xây dựng quy trình thông minh và nhanh hơn*

node/api.py

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,8 @@ def api_chatbot(self, chatbot, preset, APIkey, seed, main_prompt, sub_prompt, tr
221221
if "Deepseek" in chatbot:
222222
APIkey = api_list["Deepseek"]
223223

224-
if "DPRandomGenerator" in ALL_NODE:
225-
cls = ALL_NODE["DPRandomGenerator"]
226-
main_prompt = cls().get_prompt(main_prompt, seed, 'No')[0]
227-
sub_prompt = cls().get_prompt(sub_prompt, seed, 'No')[0]
224+
main_prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(main_prompt, 1, seed)[0][0]
225+
sub_prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(sub_prompt, 1, seed)[0][0]
228226
main_prompt = ALL_NODE["SDVN Translate"]().ggtranslate(main_prompt,translate)[0]
229227
sub_prompt = ALL_NODE["SDVN Translate"]().ggtranslate(sub_prompt,translate)[0]
230228
prompt = f"{main_prompt}.{sub_prompt}"
@@ -315,9 +313,7 @@ def api_dalle(self, OpenAI_API, size, seed, prompt, quality, translate):
315313
if OpenAI_API == "":
316314
api_list = api_check()
317315
OpenAI_API = api_list["OpenAI"]
318-
if "DPRandomGenerator" in ALL_NODE:
319-
cls = ALL_NODE["DPRandomGenerator"]
320-
prompt = cls().get_prompt(prompt, seed, 'No')[0]
316+
prompt =ALL_NODE["SDVN Random Prompt"]().get_prompt(prompt, 1, seed)[0][0]
321317
prompt = ALL_NODE["SDVN Translate"]().ggtranslate(prompt,translate)[0]
322318

323319
client = OpenAI(
@@ -363,9 +359,8 @@ def api_dalle(self, OpenAI_API, size, seed, prompt, n, translate, image = None,
363359
if OpenAI_API == "":
364360
api_list = api_check()
365361
OpenAI_API = api_list["OpenAI"]
366-
if "DPRandomGenerator" in ALL_NODE:
367-
cls = ALL_NODE["DPRandomGenerator"]
368-
prompt = cls().get_prompt(prompt, seed, 'No')[0]
362+
363+
ALL_NODE["SDVN Random Prompt"]().get_prompt(prompt, 1, seed)[0][0]
369364
prompt = ALL_NODE["SDVN Translate"]().ggtranslate(prompt,translate)[0]
370365

371366
client = OpenAI(
@@ -434,8 +429,8 @@ def API_GPT_image(self, OpenAI_API, size, seed, prompt, quality, background, n,
434429
if OpenAI_API == "":
435430
api_list = api_check()
436431
OpenAI_API = api_list["OpenAI"]
437-
if "DPRandomGenerator" in ALL_NODE:
438-
prompt = ALL_NODE["DPRandomGenerator"]().get_prompt(prompt, seed, 'No')[0]
432+
433+
prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(prompt, 1, seed)[0][0]
439434
prompt = ALL_NODE["SDVN Translate"]().ggtranslate(prompt,translate)[0]
440435

441436
client = OpenAI(
@@ -506,9 +501,8 @@ def api_imagen(self, Gemini_API, max_size_input, seed, prompt, translate, image
506501
if Gemini_API == "":
507502
api_list = api_check()
508503
Gemini_API = api_list["Gemini"]
509-
if "DPRandomGenerator" in ALL_NODE:
510-
cls = ALL_NODE["DPRandomGenerator"]
511-
prompt = cls().get_prompt(prompt, seed, 'No')[0]
504+
505+
prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(prompt, 1, seed)[0][0]
512506
prompt = ALL_NODE["SDVN Translate"]().ggtranslate(prompt,translate)[0]
513507
client = genai.Client(api_key=Gemini_API)
514508
if image != None:
@@ -553,10 +547,10 @@ def api_imagen(self, Gemini_API, aspect_ratio, person_gen, seed, prompt, transla
553547
if Gemini_API == "":
554548
api_list = api_check()
555549
Gemini_API = api_list["Gemini"]
556-
if "DPRandomGenerator" in ALL_NODE:
557-
cls = ALL_NODE["DPRandomGenerator"]
558-
prompt = cls().get_prompt(prompt, seed, 'No')[0]
550+
551+
prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(prompt, 1, seed)[0][0]
559552
prompt = ALL_NODE["SDVN Translate"]().ggtranslate(prompt,translate)[0]
553+
560554
client = genai.Client(api_key=Gemini_API)
561555
response = client.models.generate_images(
562556
model='imagen-3.0-generate-002',
@@ -598,10 +592,9 @@ def INPUT_TYPES(s):
598592

599593
def ic_light_v2(s, image, mode, bg_source, prompt, translate, n_prompt, hf_token, image_size, steps, seed):
600594

601-
if "DPRandomGenerator" in ALL_NODE:
602-
cls = ALL_NODE["DPRandomGenerator"]
603-
prompt = cls().get_prompt(prompt, seed, 'No')[0]
604-
n_prompt = cls().get_prompt(n_prompt, seed, 'No')[0]
595+
prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(prompt, 1, seed)[0][0]
596+
n_prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(n_prompt, 1, seed)[0][0]
597+
605598
prompt = ALL_NODE["SDVN Translate"]().ggtranslate(prompt,translate)[0]
606599
n_prompt = ALL_NODE["SDVN Translate"]().ggtranslate(n_prompt,translate)[0]
607600
if hf_token == "":

node/creative.py

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@
66
import pandas as pd
77
import random as rd
88

9+
from pathlib import Path
10+
from dynamicprompts.wildcards.wildcard_manager import WildcardManager
11+
from dynamicprompts.generators import CombinatorialPromptGenerator
12+
13+
wildcards_folder = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))),"wildcards")
14+
if not os.path.exists(wildcards_folder):
15+
os.makedirs(wildcards_folder)
16+
wm = WildcardManager(Path(wildcards_folder))
17+
918
def check_mask(mask_tensor):
1019
if not isinstance(mask_tensor, torch.Tensor):
1120
return False
@@ -37,7 +46,43 @@ def __ne__(self, __value: object) -> bool:
3746

3847
any = AnyType("*")
3948

49+
class Random_Prompt:
50+
@classmethod
51+
def INPUT_TYPES(s):
52+
return {"required": {
53+
"prompt": ("STRING", {"default": "Syntax - https://github.com/adieyal/sd-dynamic-prompts/blob/main/docs/SYNTAX.md", "multiline": True, }),
54+
"max_prompts": ("INT", {"default": 1, "min": 0, "max": 1000, "tooltip": "Sô lượng prompt tối đa tạo ra, 0 sẽ tạo tối đa"}),
55+
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Giá trị seed ban đầu."}),
56+
}
57+
}
58+
59+
CATEGORY = "📂 SDVN/💡 Creative"
4060

61+
RETURN_TYPES = ("STRING",)
62+
FUNCTION = "get_prompt"
63+
OUTPUT_IS_LIST = (True,)
64+
65+
def get_prompt(self, prompt, max_prompts, seed):
66+
generator = CombinatorialPromptGenerator(wildcard_manager=wm)
67+
list_prompt = generator.generate(prompt, max_prompts=1000)
68+
print(f"Max prompt: {len(list_prompt)}")
69+
if max_prompts == 0:
70+
return (list_prompt,)
71+
elif max_prompts == 1:
72+
index = seed % len(list_prompt) if seed > 0 else 0
73+
return ([list_prompt[index]],)
74+
else:
75+
index = seed % len(list_prompt) if seed > 0 else 0
76+
max_index = index + max_prompts
77+
if max_prompts >= len(list_prompt):
78+
return (list_prompt,)
79+
elif max_index >= len(list_prompt):
80+
list_1 = list_prompt[index:]
81+
list2 = list_prompt[:max_prompts - (len(list_prompt) - index)]
82+
return (list_1 + list2,)
83+
else:
84+
return (list_prompt[index:max_index],)
85+
4186
class Easy_IPA_weight:
4287
@classmethod
4388
def INPUT_TYPES(s):
@@ -126,9 +171,7 @@ def any_return(self, input, output_list, translate, seed, in1 = None, in2 = None
126171
for i in in_list:
127172
if in_list[i] !=None and i in input:
128173
input = input.replace(i,str(in_list[i]))
129-
if "DPRandomGenerator" in ALL_NODE:
130-
cls = ALL_NODE["DPRandomGenerator"]
131-
input = cls().get_prompt(input, seed, 'No')[0]
174+
input = Random_Prompt().get_prompt(input, 1, seed)[0][0]
132175
input = GGTranslate().ggtranslate(input,translate)[0]
133176
true_values = ["true", "1", "yes", "y", "on"]
134177
if output_list == "None":
@@ -932,6 +975,7 @@ def slider100(self, num):
932975
return (num,)
933976

934977
NODE_CLASS_MAPPINGS = {
978+
"SDVN Random Prompt": Random_Prompt,
935979
"SDVN Easy IPAdapter weight": Easy_IPA_weight,
936980
"SDVN Any Input Type": AnyInput,
937981
"SDVN Simple Any Input": SimpleAnyInput,
@@ -961,6 +1005,7 @@ def slider100(self, num):
9611005
}
9621006

9631007
NODE_DISPLAY_NAME_MAPPINGS = {
1008+
"SDVN Random Prompt": "🎲 Random Prompt",
9641009
"SDVN Easy IPAdapter weight": "📊 IPAdapter weight",
9651010
"SDVN Any Input Type": "🔡 Any Input Type",
9661011
"SDVN Image Size": "📐 Image Size",

node/load.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -594,10 +594,9 @@ def encode(self, clip, positive, negative, style, translate, seed, image = None)
594594
if style != "None":
595595
positive = f"{positive}, {style_list()[1][style_list()[0].index(style)][1]}"
596596
negative = f"{negative}, {style_list()[1][style_list()[0].index(style)][2]}" if len(style_list()[1][style_list()[0].index(style)]) > 2 else ""
597-
if "DPRandomGenerator" in ALL_NODE:
598-
cls = ALL_NODE["DPRandomGenerator"]
599-
positive = cls().get_prompt(positive, seed, 'No')[0]
600-
negative = cls().get_prompt(negative, seed, 'No')[0]
597+
598+
positive = ALL_NODE["SDVN Random Prompt"]().get_prompt(positive, 1, seed)[0][0]
599+
negative = ALL_NODE["SDVN Random Prompt"]().get_prompt(negative, 1, seed)[0][0]
601600
positive = ALL_NODE["SDVN Translate"]().ggtranslate(positive,translate)[0]
602601
negative = ALL_NODE["SDVN Translate"]().ggtranslate(negative,translate)[0]
603602
prompt =f"""
@@ -639,10 +638,9 @@ def loadstyle(self, positive, negative, translate, seed, **kargs):
639638
if kargs[i] != "None":
640639
positive = f"{positive}, {style_list()[1][style_list()[0].index(kargs[i])][1]}"
641640
negative = f"{negative}, {style_list()[1][style_list()[0].index(kargs[i])][2]}" if len(style_list()[1][style_list()[0].index(kargs[i])]) > 2 else ""
642-
if "DPRandomGenerator" in ALL_NODE:
643-
cls = ALL_NODE["DPRandomGenerator"]
644-
positive = cls().get_prompt(positive, seed, 'No')[0]
645-
negative = cls().get_prompt(negative, seed, 'No')[0]
641+
642+
positive = ALL_NODE["SDVN Random Prompt"]().get_prompt(positive, 1, seed)[0][0]
643+
negative = ALL_NODE["SDVN Random Prompt"]().get_prompt(negative, 1, seed)[0][0]
646644
positive = ALL_NODE["SDVN Translate"]().ggtranslate(positive,translate)[0]
647645
negative = ALL_NODE["SDVN Translate"]().ggtranslate(negative,translate)[0]
648646
return (positive,negative,)
@@ -1238,9 +1236,7 @@ def qwen_size(self, image):
12381236
return (image, width, height)
12391237

12401238
def append(s, prompt, img_size, translate, seed, clip, image=None, vae=None, mask=None):
1241-
if "DPRandomGenerator" in ALL_NODE:
1242-
cls = ALL_NODE["DPRandomGenerator"]
1243-
prompt = cls().get_prompt(prompt, seed, 'No')[0]
1239+
prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(prompt, 1, seed)[0][0]
12441240
prompt = ALL_NODE["SDVN Translate"]().ggtranslate(prompt,translate)[0]
12451241
if mask is not None:
12461242
if ALL_NODE["SDVN Get Mask Size"]().get_size(mask)[0] == 0:

node/preset.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,8 @@ def auto_generate(s, model, clip, vae, Prompt, Negative, Active_prompt, Image_si
227227
n_h = int(round(n_h))
228228
n_w = int(round(n_w))
229229
rand_seed = random.randint(0, 0xffffffffffffffff)
230-
if "DPRandomGenerator" in ALL_NODE:
231-
cls = ALL_NODE["DPRandomGenerator"]
232-
Prompt = cls().get_prompt(Prompt, seed, 'No')[0]
233-
Negative = cls().get_prompt(Negative, seed, 'No')[0]
230+
Prompt = ALL_NODE["SDVN Random Prompt"]().get_prompt(Prompt, 1, seed)[0][0]
231+
Negative = ALL_NODE["SDVN Random Prompt"]().get_prompt(Negative, 1, seed)[0][0]
234232
Prompt = ALL_NODE["SDVN Translate"]().ggtranslate(Prompt,"en")[0]
235233
Prompt = f"{Active_prompt}, {Prompt}"
236234
Negative = ALL_NODE["SDVN Translate"]().ggtranslate(Negative,"en")[0]

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[project]
22
name = "sdvn_comfy_node"
3-
description = "Update Support Qwen Models for ComfyUI - SDVN Qwen Reference"
4-
version = "1.12.3"
3+
description = "Update Support Dynamic Prompts"
4+
version = "1.13.0"
55
license = {file = "LICENSE"}
66
dependencies = ["#If MacOs - Please install aria2 manually via brew", "aria2;sys_platform != 'darwin'", "openai", "gallery-dl", "google-generativeai", "googletrans-py"]
77

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ opencv-python
99
google-genai
1010
PyYAML
1111
pandas
12-
ultralytics>=8.3.107
12+
ultralytics>=8.3.107
13+
dynamicprompts
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Copy wildcards file to folder

0 commit comments

Comments
 (0)