文本的操作

在 ComfyUI 中,文本主要作为提示词来使用。 通过自动化一些操作,如替换部分字符串,或将触发词附加到 LLM 创建的提示词中,可以使 工作流 更加便捷。
什么是 string?
在编程世界中,为了区分文本和数字等,将文本称为 string(字符串)。
apple→ 5 个字符的 string123→ 看起来是数字,但实际上是作为字符处理的 string" "(空白) → 虽然看不见,但是是 1 个字符的 string
基本操作节点
String 节点 (文字输入)

输入字符串的基本节点。 使用 String (Multiline) 节点,可以输入包含换行符的文本。
Concatenate 节点 (文字结合)

将多个 string 连接成一个。
(例:apple + pen → applepen)
delimiter是指分隔符。可以使用喜欢的字符(逗号或换行符等)。
Format Text 节点

{
"id": "e7ac41a3-a6f4-4793-b5e9-ff15f104192c",
"revision": 0,
"last_node_id": 4,
"last_link_id": 5,
"nodes": [
{
"id": 3,
"type": "PrimitiveString",
"pos": [
1120.168561094031,
268.47862109943014
],
"size": [
270,
58
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "STRING",
"type": "STRING",
"links": [
4
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.22.0",
"Node name for S&R": "PrimitiveString"
},
"widgets_values": [
"apple"
]
},
{
"id": 2,
"type": "PrimitiveString",
"pos": [
1120.168561094031,
140.8191716363399
],
"size": [
270,
58
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "STRING",
"type": "STRING",
"links": [
2
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.22.0",
"Node name for S&R": "PrimitiveString"
},
"widgets_values": [
"pineapple"
]
},
{
"id": 4,
"type": "PreviewAny",
"pos": [
1787.9218052801998,
140.8191716363399
],
"size": [
271.4220745373427,
189.4176425797109
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "source",
"type": "*",
"link": 5
}
],
"outputs": [
{
"name": "STRING",
"type": "STRING",
"links": null
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.22.0",
"Node name for S&R": "PreviewAny"
},
"widgets_values": [
null,
null,
null
]
},
{
"id": 1,
"type": "StringFormat",
"pos": [
1432.1886403621404,
140.8191716363399
],
"size": [
313.71308564995,
189.4176425797109
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"label": "a",
"name": "values.a",
"shape": 7,
"type": "*",
"link": 2
},
{
"label": "b",
"name": "values.b",
"shape": 7,
"type": "*",
"link": 4
},
{
"label": "c",
"name": "values.c",
"shape": 7,
"type": "*",
"link": null
}
],
"outputs": [
{
"name": "STRING",
"type": "STRING",
"links": [
5
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.22.0",
"Node name for S&R": "StringFormat"
},
"widgets_values": [
"pen {a}, {b} pen"
],
"color": "#232",
"bgcolor": "#353"
}
],
"links": [
[
2,
2,
0,
1,
0,
"STRING"
],
[
4,
3,
0,
1,
1,
"STRING"
],
[
5,
1,
0,
4,
0,
"STRING"
]
],
"groups": [],
"config": {},
"extra": {
"ds": {
"scale": 1.228459735736726,
"offset": [
-842.0589322707493,
177.57736449068497
]
},
"frontendVersion": "1.44.19"
},
"version": 0.4
}
这个节点可以先写好文章的模板,再把其他 string 插入进去。
相比 Concatenate,它可以更灵活地组合文本。
例如,将 apple 连接到 a,将 red 连接到 b,然后在 format 中写入 {a} is {b}.,就可以生成类似 apple is red. 的字符串。
Replace 节点 (文字替换)

将指定的字符替换为其他字符。
(例:apple pen → orange pen)
Substring 节点 (文字提取)

提取指定范围的字符。
(例:apple → ppl)
- 截取从
start到end的字符串。
Trim 节点 (删除空白)

删除字符串前后的空格。
(例:apple → apple)
- 由于可以防止因用户输入等导致意外混入空白而报错,虽然不起眼但很重要。
Length 节点 (计算字符数)

计算字符的长度。
(例:apple → 5)
- 空格和换行符也被算作 1 个字符。
- 输出将是 int 类型(数值)。
高级操作(正则表达式)
使用“正则表达式(Regex)”这一描述规则,进行复杂的搜索或替换。
Regex Extract 节点

使用正则表达式,提取符合条件的字符串。
Regex Replace 节点

使用正则表达式,替换符合条件的字符串。
Power Puter (rgthree)
在 简单计算 中使用的 rgthree-comfy 的 Power Puter 也可以输入输出 string,因此可以灵活地操作字符串,包括上述的文本处理。

{
"id": "dc1f9613-0a4c-46fb-ae08-9962d0e06147",
"revision": 0,
"last_node_id": 15,
"last_link_id": 13,
"nodes": [
{
"id": 3,
"type": "PreviewAny",
"pos": [
2010.7783203125,
740.6680297851562
],
"size": [
210,
122.44491577148438
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "source",
"type": "*",
"link": 10
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.59",
"Node name for S&R": "PreviewAny"
},
"widgets_values": []
},
{
"id": 13,
"type": "PrimitiveString",
"pos": [
1447.3487548828125,
924.7716674804688
],
"size": [
210,
58
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "STRING",
"type": "STRING",
"links": [
11
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.59",
"Node name for S&R": "PrimitiveString"
},
"widgets_values": [
"apple"
]
},
{
"id": 15,
"type": "PrimitiveStringMultiline",
"pos": [
1382.8033447265625,
740.6680297851562
],
"size": [
274.5454406738281,
121.81818389892578
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "STRING",
"type": "STRING",
"links": [
13
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.59",
"Node name for S&R": "PrimitiveStringMultiline"
},
"widgets_values": [
"apple pen"
]
},
{
"id": 14,
"type": "PrimitiveString",
"pos": [
1447.3487548828125,
1045.05712890625
],
"size": [
210,
58
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "STRING",
"type": "STRING",
"links": [
12
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.59",
"Node name for S&R": "PrimitiveString"
},
"widgets_values": [
"pineapple"
]
},
{
"id": 11,
"type": "Power Puter (rgthree)",
"pos": [
1703.1837158203125,
740.6680297851562
],
"size": [
261.7596435546875,
176
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "a",
"type": "*",
"link": 13
},
{
"name": "b",
"type": "*",
"link": 11
},
{
"name": "c",
"type": "*",
"link": 12
},
{
"name": "d",
"type": "*",
"link": null
}
],
"outputs": [
{
"label": "STRING",
"name": "*",
"shape": 3,
"type": "STRING",
"links": [
10
]
}
],
"properties": {
"cnr_id": "rgthree-comfy",
"ver": "0fb1e239a903e93ef626a8c20589b38f46e39dff"
},
"widgets_values": [
{
"outputs": [
"STRING"
]
},
"return a.replace(b, c)"
],
"color": "#232",
"bgcolor": "#353"
}
],
"links": [
[
10,
11,
0,
3,
0,
"*"
],
[
11,
13,
0,
11,
1,
"*"
],
[
12,
14,
0,
11,
2,
"*"
],
[
13,
15,
0,
11,
0,
"*"
]
],
"groups": [],
"config": {},
"extra": {
"ds": {
"scale": 1.4641000000000008,
"offset": [
-1282.8033447265625,
-640.6680297851562
]
},
"frontendVersion": "1.27.5",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
}