diff --git a/README.md b/README.md index d035b56..00babf8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# πŸ”— Comfyui : Bjornulf_custom_nodes v0.10 πŸ”— +# πŸ”— Comfyui : Bjornulf_custom_nodes v0.11 πŸ”— # Dependencies @@ -19,6 +19,7 @@ - **v0.8**: Add basic node to transform greenscreen in to transparency. - **v0.9**: Add a new node : Return one random line from input. - **v0.10**: Add a new node : Loop (All Lines from input) - Iterate over all lines from an input text. +- **v0.11**: Add a new node : Text with random Seed - Generate a random seed, along with text. # πŸ“ Nodes descriptions @@ -176,20 +177,45 @@ Update 0.8 : Also have a option to put image top, bottom or center. ❗ Warning : For now, `background` is a static image. (I will allow video there later too.) ## 25 - πŸŸ©βžœβ–’ Green Screen to Transparency -![Combine Images](screenshots/greeenscreen_to_transparency.png) +![Greenscreen to Transparency](screenshots/greeenscreen_to_transparency.png) **Description:** Transform greenscreen into transparency. Need clean greenscreen ofc. (Can adjust threshold but very basic node.) ## 26 - 🎲 Random line from input -![Combine Images](screenshots/random_line_from_input.png) +![Random line from input](screenshots/random_line_from_input.png) **Description:** Take a random line from an input text. (When using multiple "Write Text" nodes is annoying for example, you can use that and just copy/paste a list from outside.) ## 27 - β™» Loop (All Lines from input) -![Combine Images](screenshots/loop_all_lines.png) +![Loop input](screenshots/loop_all_lines.png) **Description:** Iterate over all lines from an input text. (Good for testing multiple lines of text.) + +## 28 - πŸ”’ Text with random Seed + +**Description:** + +❗ This node is used to generate a random seed, along with text. +But what does that mean ??? +When you use a loop, the loop will use the same seed for each iteration. (That is the point, it will keep the same seed to compare results.) +Simple example without using random seed node : + +![Text with random Seed 1](screenshots/random_seed_1.png) + +But, if you want to force using another seed for each iteration, you can use this node in the middle. +For example, if you want to generate a different image every time. (aka : You use loop nodes not to compare or test results but to generate multiple images.) +Use it like that for example : + +![Text with random Seed 2](screenshots/random_seed_2.png) + +Here is an example of FLUX with different prompt (hood/helmet) but same seed : + +![Text with random Seed 3](screenshots/random_seed_3_flux.png) + +Here is an example of SDXL with different prompt (blue/red) but same seed : + +![Text with random Seed 4](screenshots/random_seed_4_sdxl.png) \ No newline at end of file diff --git a/__init__.py b/__init__.py index d1c8c07..5a93e3d 100644 --- a/__init__.py +++ b/__init__.py @@ -32,6 +32,7 @@ from .save_bjornulf_lobechat import SaveBjornulfLobeChat from .green_to_transparency import GreenScreenToTransparency from .random_line_from_input import RandomLineFromInput from .loop_lines import LoopAllLines +from .random_seed_with_text import TextToStringAndSeed # from .check_black_image import CheckBlackImage # from .clear_vram import ClearVRAM @@ -41,6 +42,7 @@ NODE_CLASS_MAPPINGS = { # "Bjornulf_CustomStringType": CustomStringType, "Bjornulf_ollamaLoader": ollamaLoader, "Bjornulf_LoopAllLines": LoopAllLines, + "Bjornulf_TextToStringAndSeed": TextToStringAndSeed, "Bjornulf_GreenScreenToTransparency": GreenScreenToTransparency, "Bjornulf_RandomLineFromInput": RandomLineFromInput, # "Bjornulf_CheckBlackImage": CheckBlackImage, @@ -83,6 +85,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "Bjornulf_GreenScreenToTransparency": "πŸŸ©βžœβ–’ Green Screen to Transparency", # "Bjornulf_CheckBlackImage": "πŸ”² Check Black Image (Empty mask)", "Bjornulf_SaveBjornulfLobeChat": "πŸ–ΌπŸ’¬ Save image for Bjornulf LobeChat", + "Bjornulf_TextToStringAndSeed": "πŸ”’ Text with random Seed", # "Bjornulf_ClearVRAM": "🧹 Clear VRAM", "Bjornulf_RandomLineFromInput": "🎲 Random line from input", "Bjornulf_ShowText": "πŸ‘ Show (Text)", diff --git a/create_seed_from_text.txt b/create_seed_from_text.txt new file mode 100644 index 0000000..95fa53c --- /dev/null +++ b/create_seed_from_text.txt @@ -0,0 +1,31 @@ +import random +import hashlib + +class TextToStringAndSeed: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "text": ("STRING", {"forceInput": True}), + }, + } + + RETURN_NAMES = ("text","random_seed") + RETURN_TYPES = ("STRING", "INT") + FUNCTION = "process" + CATEGORY = "utils" + + def process(self, text): + # Generate a hash from the input text + text_hash = hashlib.md5(text.encode()).hexdigest() + + # Use the hash to seed the random number generator + random.seed(text_hash) + + # Generate a random seed (integer) + random_seed = random.randint(0, 2**32 - 1) + + # Reset the random seed to ensure randomness in subsequent calls + random.seed() + + return (text, random_seed) \ No newline at end of file diff --git a/random_seed_with_text.py b/random_seed_with_text.py new file mode 100644 index 0000000..2d3d1bc --- /dev/null +++ b/random_seed_with_text.py @@ -0,0 +1,22 @@ +import random + +class TextToStringAndSeed: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "text": ("STRING", {"forceInput": True}), + "seed": ("INT", {"default": 1}), + }, + } + + RETURN_NAMES = ("text", "random_seed") + RETURN_TYPES = ("STRING", "INT") + FUNCTION = "text_with_random_seed" + CATEGORY = "Bjornulf" + + def text_with_random_seed(self, text, seed): + # Generate a random seed (integer) + random_seed = random.randint(0, 2**32 - 1) + + return (text, random_seed) \ No newline at end of file diff --git a/screenshots/random_seed_1.png b/screenshots/random_seed_1.png new file mode 100644 index 0000000..b6ef1f4 Binary files /dev/null and b/screenshots/random_seed_1.png differ diff --git a/screenshots/random_seed_2.png b/screenshots/random_seed_2.png new file mode 100644 index 0000000..25f772d Binary files /dev/null and b/screenshots/random_seed_2.png differ diff --git a/screenshots/random_seed_3_flux.png b/screenshots/random_seed_3_flux.png new file mode 100644 index 0000000..1a81694 Binary files /dev/null and b/screenshots/random_seed_3_flux.png differ diff --git a/screenshots/random_seed_4_sdxl.png b/screenshots/random_seed_4_sdxl.png new file mode 100644 index 0000000..a36bbf7 Binary files /dev/null and b/screenshots/random_seed_4_sdxl.png differ diff --git a/web/js/random_seed_with_text.js b/web/js/random_seed_with_text.js new file mode 100644 index 0000000..a2ca6eb --- /dev/null +++ b/web/js/random_seed_with_text.js @@ -0,0 +1,19 @@ +import { app } from "../../../scripts/app.js"; + +app.registerExtension({ + name: "Bjornulf.TextToStringAndSeed", + async nodeCreated(node) { + if (node.comfyClass === "Bjornulf_TextToStringAndSeed") { + // Set seed widget to hidden input + const seedWidget = node.widgets.find(w => w.name === "seed"); + if (seedWidget) { + seedWidget.type = "HIDDEN"; + } + // Set seed widget to hidden input + const controlWidget = node.widgets.find(w => w.name === "control_after_generate"); + if (controlWidget) { + controlWidget.type = "HIDDEN"; + } + } + } +});