Node updates
@@ -1,6 +1,15 @@
|
||||
# String Essentials - Custom nodes for ComfyUI
|
||||
|
||||
Easy to use string manipulation nodes for ComfyUI (strip/remove multiple text strings or search and replace text strings). Particularly useful for modifying text from LLM outputs (Ollama, Claude.ai, OpenAI ChatGPT), such as prompts or image-to-text description results. Nodes will be located under standard `Add Node` > `utils` menu.
|
||||
Simple string manipulation nodes for ComfyUI (strip/remove text strings, search and replace text strings, preview modified string outputs). Particularly useful for modifying text from LLM outputs (Ollama, Claude.ai, OpenAI ChatGPT), such as prompts or image-to-text description results. No bloat/additional Python dependencies or external modules required. Nodes use a small amount of basic Python and Javascript code.
|
||||
|
||||
## Nodes included:
|
||||
|
||||
- String Textbox
|
||||
- String Strip
|
||||
- String Replace
|
||||
- String Preview
|
||||
|
||||
***Once added nodes can be found under the `Add Node` > `utils` menu.***
|
||||
|
||||
## Features
|
||||
- Remove or replace text, words, numbers in input strings
|
||||
@@ -8,10 +17,15 @@ Easy to use string manipulation nodes for ComfyUI (strip/remove multiple text st
|
||||
- Case-sensitive/insensitive matching
|
||||
- Whole string matching option
|
||||
|
||||
## String Strip Node
|
||||
Removes specified strings from input text. Each line should contain the string to be searched. The string can contain multiple words. To match individual words/strings place on separate lines.
|
||||
## String Textbox
|
||||
A simple multiline textbox for free form text.
|
||||
|
||||

|
||||
|
||||
## String Strip
|
||||
Removes specified strings from input text. Each line should contain the string to be searched. The string can contain multiple words. To strip multiple individual words/strings place on separate lines.
|
||||
|
||||

|
||||

|
||||
|
||||
### Inputs
|
||||
- **`input_string`**: The string or text to process
|
||||
@@ -20,13 +34,10 @@ Removes specified strings from input text. Each line should contain the string t
|
||||
- **`match_whole_string`**: Ensure only exact matches are removed (default: enabled)
|
||||
- **`remove_extra_spaces`**: Clean up extra spaces after removal (default: enabled)
|
||||
|
||||
### String Strip Example Usage:
|
||||

|
||||
## String Replace
|
||||
Replaces text strings with new strings (replace/swap words etc.). Each line should contain a search and replace pair separated by the replacement_delimiter (default is double colon `::`). Example to replace dog with cat `dog::cat`. Supports mulitple string replacements, just add one replacement per line.
|
||||
|
||||
## String Replace Node
|
||||
Replaces text strings with new strings. Each line should contain a search and replace pair separated by the replacement_delimiter (default is double colon `::`).
|
||||
|
||||

|
||||

|
||||
|
||||
### Inputs
|
||||
- **`input_string`**: The string or text to process
|
||||
@@ -36,8 +47,15 @@ Replaces text strings with new strings. Each line should contain a search and re
|
||||
- **`match_whole_string`**: Ensure only exact matches are replaced (default: disabled)
|
||||
- **`remove_extra_spaces`**: Clean up extra spaces after replacement (default: enabled)
|
||||
|
||||
### String Replace Example Usage:
|
||||

|
||||
## String Preview
|
||||
Simply displays a string output. Can be used to view the results/changes to the input_string by the `String Strip` or `String Replace`.
|
||||
|
||||

|
||||
|
||||
## Example Usage
|
||||
|
||||

|
||||
|
||||
|
||||
## Installation
|
||||
1. Navigate to the `custom_nodes` directory in your ComfyUI installation path.
|
||||
@@ -46,4 +64,7 @@ Replaces text strings with new strings. Each line should contain a search and re
|
||||
git clone https://github.com/bradsec/ComfyUI_StringEssentials.git
|
||||
```
|
||||
3. Restart ComfyUI or refresh your nodes.
|
||||
4. Select node from the utils menu. `Add Node > utils >` `String Strip` or `String Replace`
|
||||
4. Select node from the `Add Node` > `utils` menu.
|
||||
|
||||
|
||||
### If you found these nodes useful please star the repo.
|
||||
@@ -1,16 +1,22 @@
|
||||
"""String manipulation nodes for ComfyUI"""
|
||||
|
||||
from .string_textbox_node import StringTextboxNode
|
||||
from .string_strip_node import StringStripNode
|
||||
from .string_replace_node import StringReplaceNode
|
||||
from .string_replace_node import StringReplaceNode
|
||||
from .string_preview_node import StringPreviewNode
|
||||
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"StringTextbox": StringTextboxNode,
|
||||
"StringStrip": StringStripNode,
|
||||
"StringReplace": StringReplaceNode
|
||||
"StringReplace": StringReplaceNode,
|
||||
"StringPreview": StringPreviewNode
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"StringTextbox": "String Textbox",
|
||||
"StringStrip": "String Strip",
|
||||
"StringReplace": "String Replace"
|
||||
"StringReplace": "String Replace",
|
||||
"StringPreview": "String Preview"
|
||||
}
|
||||
|
||||
WEB_DIRECTORY = "./js"
|
||||
|
||||
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -1,11 +1,11 @@
|
||||
import { app } from "../../../scripts/app.js";
|
||||
import { ComfyWidgets } from "../../../scripts/widgets.js";
|
||||
|
||||
app.registerExtension({
|
||||
name: "string.strip",
|
||||
async beforeRegisterNodeDef(nodeType) {
|
||||
if (nodeType.comfyClass === "StringStrip") {
|
||||
nodeType.prototype.onNodeCreated = function() {
|
||||
// Add an input port for `input_text`
|
||||
this.addInput("input_string", "STRING");
|
||||
};
|
||||
}
|
||||
@@ -17,9 +17,30 @@ app.registerExtension({
|
||||
async beforeRegisterNodeDef(nodeType) {
|
||||
if (nodeType.comfyClass === "StringReplace") {
|
||||
nodeType.prototype.onNodeCreated = function() {
|
||||
// Add an input port for `input_text`
|
||||
this.addInput("input_string", "STRING");
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
app.registerExtension({
|
||||
name: "string.preview",
|
||||
async beforeRegisterNodeDef(nodeType, nodeData) {
|
||||
if (nodeType.comfyClass === "StringPreview") {
|
||||
nodeType.prototype.onNodeCreated = function() {
|
||||
this.addInput("input_string", "STRING");
|
||||
this.showValueWidget = ComfyWidgets["STRING"](this, "preview", ["STRING", { multiline: true }], app).widget;
|
||||
this.showValueWidget.inputEl.readOnly = true;
|
||||
this.showValueWidget.inputEl.style.opacity = 0.6;
|
||||
};
|
||||
|
||||
const onExecuted = nodeType.prototype.onExecuted;
|
||||
nodeType.prototype.onExecuted = function(message) {
|
||||
onExecuted?.apply(this, arguments);
|
||||
if (message?.text?.[0] !== undefined) {
|
||||
this.showValueWidget.value = message.text[0];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1,7 +1,7 @@
|
||||
[project]
|
||||
name = "comfyui_stringessentials"
|
||||
description = "Easy to use string manipulation nodes for ComfyUI (strip/remove text strings or search and replace text strings). Particularly useful for modifying text prompts or results from LLM outputs. Nodes will be located under standard Add Node > utils menu. Node names: String Strip and String Replace"
|
||||
version = "1.0.2"
|
||||
description = "Simple string manipulation nodes for ComfyUI (strip/remove text strings, search and replace text strings, preview modified string outputs). Useful for modifying text prompts or results from LLM outputs. Nodes will be located under standard Add Node > utils menu. Node names: String Textbox, String Strip, String Replace, and String Preview."
|
||||
version = "1.0.3"
|
||||
license = {file = "LICENSE"}
|
||||
|
||||
[project.urls]
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
class StringPreviewNode:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("STRING",)
|
||||
RETURN_NAMES = ("output_string",)
|
||||
FUNCTION = "preview_string"
|
||||
CATEGORY = "utils"
|
||||
OUTPUT_NODE = True
|
||||
|
||||
def preview_string(self, input_string=""):
|
||||
return {"ui": {"text": (input_string,)}, "result": (input_string,)}
|
||||
@@ -0,0 +1,20 @@
|
||||
class StringTextboxNode:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"input_string": ("STRING", {
|
||||
"multiline": True,
|
||||
"default": "",
|
||||
"tooltip": "Enter text here"
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("STRING",)
|
||||
RETURN_NAMES = ("output_string",)
|
||||
FUNCTION = "pass_string"
|
||||
CATEGORY = "utils"
|
||||
|
||||
def pass_string(self, input_string):
|
||||
return (input_string,)
|
||||
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 29 KiB |