From f76c17aae7a57f3f3092eefbb1040614188fbdc3 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 30 Mar 2025 11:25:16 +1100 Subject: [PATCH] #54 #57 #53 --- README.md | 6 ++++-- __init__.py | 2 +- images/editorchoice.png | Bin 0 -> 9744 bytes js/image_filter.js | 6 ++++++ js/popup.js | 5 +++++ pyproject.toml | 2 +- string_utility_nodes.py | 12 +++++++++--- 7 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 images/editorchoice.png diff --git a/README.md b/README.md index 4a89534..f5937a1 100644 --- a/README.md +++ b/README.md @@ -89,8 +89,6 @@ Other things (like prompts, segs etc.) that have been used can be selected using ## Mask Image Filter -**Note that the Mask Image Filter works with the new Mask Editor; it does not work with the old one** - Designed for a single image, when executed the Mask Image Filter node will automatically launch the mask editor. ![mask](images/mask.png) @@ -103,6 +101,10 @@ mask the bit you don't like, before doing an img2img step. Again, there is a timeout, and if you don't save a mask before the end of the timeout (or if you press the cancel button in the mask editor), it will either cancel, or send a blank mask, depending on the option chosen. +**Note that the Mask Image Filter works with the new Mask Editor; it does not work with the old one** + +![img](images/editorchoice.png) + --- ## Text Image Filter diff --git a/__init__.py b/__init__.py index 7948ca4..ca6d823 100644 --- a/__init__.py +++ b/__init__.py @@ -9,7 +9,7 @@ from .image_filter import ImageFilter, MaskImageFilter, TextImageFilterWithExtra from .list_utility_nodes import PickFromList, BatchFromImageList, ImageListFromBatch from .string_utility_nodes import SplitByCommas, StringToFloat, StringToInt -VERSION = "1.2.2" +VERSION = "1.2.3" WEB_DIRECTORY = "./js" NODE_CLASS_MAPPINGS= { diff --git a/images/editorchoice.png b/images/editorchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..dda98d11b6c603d92e7268a6a5d4a10383585476 GIT binary patch literal 9744 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 ${JSON.stringify(message.detail)}` + (extra ? ` ${extra}` : "")) if (message.detail && message.detail.tick) Log.log(`--> tick`) } static message_out(response, extra) { + if (!app.ui.settings.getSettingValue("ImageFilter.DetailedLogging")) return Log.log(`"<-- ${JSON.stringify(response)}` + (extra ? ` ${extra}` : "")) } } diff --git a/pyproject.toml b/pyproject.toml index 4131c2a..08fecbf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "cg-image-filter" description = "A set of custom nodes that pause a workflow while you select images, add masks, or edit text." -version = "1.2.2" +version = "1.2.3" license = { file = "LICENSE" } [project.urls] diff --git a/string_utility_nodes.py b/string_utility_nodes.py index 182d71c..ed77299 100644 --- a/string_utility_nodes.py +++ b/string_utility_nodes.py @@ -15,9 +15,15 @@ class SplitByCommas: } def func(self, string:str, split:str=","): - bits = [r.strip() for r in string.split(split,5)] - padded = bits + [""]*5 - return tuple(padded[:5] + [bits,]) + bits = [r.strip() for r in string.split(split)] + as_list = [b for b in bits] + if len(bits)<=5: + bits += ["",]*(5-len(bits)) + else: + bits = bits[:4] + [",".join(bits[4:]),] + + bits.append(as_list) + return tuple(bits) class StringToInt: RETURN_TYPES = ("INT",)