feat: 新增多行文本框(原样输出)节点,修复 Markdown 标题被上游节点吞掉的问题

用户实测发现标题行缺失,根因并非渲染:WAS Node Suite 的「Text Multiline」
会把 "#" 开头的行当注释删除(WAS_Node_Suite.py text_multiline),Markdown
的 #/## 标题在进入本套件节点前就已被丢弃。

- 新增 RuiTextBox 节点:多行文本一字不动透传,关闭 dynamicPrompts,
  专门配合 Markdown转图片 使用
- README 在 Markdown 节点文档加警示,说明勿用 WAS Text Multiline 喂 Markdown

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
rui40000
2026-07-24 13:54:08 +08:00
co-authored by Claude Fable 5
parent d419f9262c
commit eff089c771
3 changed files with 71 additions and 0 deletions
+23
View File
@@ -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🐶
+5
View File
@@ -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']
+43
View File
@@ -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)",
}