diff --git a/README.md b/README.md index 772456e..e724693 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Rui-Node🐶 是一个功能丰富的 ComfyUI 节点集合,提供图像处理 - [文本列表制作器 / Text List Creator](#8-文本列表制作器--text-list-creator) - [转化为utf-8编码 / Convert to UTF-8](#11-转化为utf-8编码--convert-to-utf-8) - [Markdown转图片 / Markdown To Image](#19-markdown转图片--markdown-to-image) +- [多行文本框(原样输出) / Text Box (Raw)](#20-多行文本框原样输出--text-box-raw) ### 🎭 遮罩处理类 - [遮罩筛选 / Mask Selector](#9-遮罩筛选--mask-selector) @@ -790,6 +791,28 @@ ComfyUI-SDMatte 传 `aux_input="trimap"`,把模型推到了没训练过的输 - 生成小红书 / 公众号风格的图文卡片、A4 打印稿 - 工作流内把结构化报告(含表格、代码)落成图像资产 +**⚠️ 重要:不要用 WAS 的「Text Multiline」节点喂 Markdown** +WAS Node Suite 的「Text Multiline」会把 `#` 开头的行**当注释删除**,标题行会凭空消失,还会做动态提示词替换。请改用本套件的 [多行文本框(原样输出)](#20-多行文本框原样输出--text-box-raw),或直接在本节点的 `markdown` 输入框里粘贴文本。 + +--- + +### 20. 多行文本框(原样输出) / Text Box (Raw) + +**分类**: `Rui-Node🐶/文本处理📝` + +**功能描述**: +把输入的多行文本**一字不动**输出为 STRING:不删注释行、不做动态提示词/通配符/token 替换。专门用来安全承载 Markdown、代码等格式敏感文本(WAS 的「Text Multiline」会把 `#` 开头的行当注释吃掉,喂 Markdown 时标题会消失)。 + +**输入参数**: +- `text` (STRING): 多行文本 + +**输出**: +- `text` (STRING): 与输入完全一致的文本 + +**使用场景**: +- 为 [Markdown转图片](#19-markdown转图片--markdown-to-image) 提供含 `#` 标题的原样文本 +- 存放任何不希望被上游文本节点"加工"的内容 + --- ## 🐕 关于 Rui-Node🐶 diff --git a/__init__.py b/__init__.py index 15d8e54..5ad098c 100644 --- a/__init__.py +++ b/__init__.py @@ -58,6 +58,9 @@ except Exception as _e: print(f"[Ruinode] Markdown转图片 节点未加载:{_e}") MDIMG_NODE_CLASS_MAPPINGS = {} MDIMG_NODE_DISPLAY_NAME_MAPPINGS = {} +# 新增:多行文本框(原样输出,规避 WAS Text Multiline 吞 "#" 行的问题) +from .text_box_node import NODE_CLASS_MAPPINGS as TEXTBOX_NODE_CLASS_MAPPINGS +from .text_box_node import NODE_DISPLAY_NAME_MAPPINGS as TEXTBOX_NODE_DISPLAY_NAME_MAPPINGS # 合并节点映射字典 NODE_CLASS_MAPPINGS = {} @@ -80,6 +83,7 @@ NODE_CLASS_MAPPINGS.update(IMAGESPLITTER_NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(SDMATTE_NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(ZENMUX_NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(MDIMG_NODE_CLASS_MAPPINGS) +NODE_CLASS_MAPPINGS.update(TEXTBOX_NODE_CLASS_MAPPINGS) # 合并节点显示名称映射 NODE_DISPLAY_NAME_MAPPINGS = {} @@ -102,5 +106,6 @@ NODE_DISPLAY_NAME_MAPPINGS.update(IMAGESPLITTER_NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(SDMATTE_NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(ZENMUX_NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(MDIMG_NODE_DISPLAY_NAME_MAPPINGS) +NODE_DISPLAY_NAME_MAPPINGS.update(TEXTBOX_NODE_DISPLAY_NAME_MAPPINGS) __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] diff --git a/text_box_node.py b/text_box_node.py new file mode 100644 index 0000000..eb9737b --- /dev/null +++ b/text_box_node.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +""" +多行文本框(原样输出)节点 +========================== +把输入的多行文本一字不动地输出为 STRING。 + +背景:WAS Node Suite 的「Text Multiline」节点会把 "#" 开头的行当注释删除, +还会做动态提示词/token 替换——喂 Markdown 文本时标题行(# 一级标题)会凭空 +消失。本节点纯透传、零处理,专门用来安全地承载 Markdown / 代码等原样文本。 +""" + + +class RuiTextBoxNode: + """多行文本原样透传。""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "text": ("STRING", { + "default": "", + "multiline": True, + # 关闭动态提示词处理,杜绝 {a|b}、通配符等被前端改写 + "dynamicPrompts": False, + }), + }, + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("text",) + FUNCTION = "passthrough" + CATEGORY = "Rui-Node🐶/文本处理📝" + + def passthrough(self, text): + return (text,) + + +NODE_CLASS_MAPPINGS = { + "RuiTextBox": RuiTextBoxNode, +} +NODE_DISPLAY_NAME_MAPPINGS = { + "RuiTextBox": "多行文本框(原样输出) / Text Box (Raw)", +}