NodeFlow 列表语法
大约 4 分钟
NodeFlow 列表语法
介绍,一种基于Markdown列表的便于输入的节点描述语法
新增一种能手写的格式,说真的有时设计语法比开发成就感还强……大家讨论讨论语法,看有没有什么可以优化的地方
- 该语法可以和AnyBlock插件配合,从列表进行声明
- 参考了:JSON、JSONL、YAML、Mermaid/Mehrmaid 流程图语法
示例
语法示例
Plugin effect (插件效果)
md source code (md源码)
```nodeflow-list
- nodes
- NodeTitle
- only name, i
- i2, i, *i2
- i3, i, mul line
i3-2
i3-3
- i4, i, *i4
- only name, o
- o2, o, *o2
- o3, o, *o3
- o4, o, mul line
o4-2
o4-3
- v2, v, *v2
- v4, , mul line
v4-2
v4-3
- v3, , *v3
- only name,
- v5:, , only value
v5-1
v5-2
- edges
```
实际用例
Plugin effect (插件效果)
md source code (md源码)
```nodeflow-list
- nodes
- node1:KSample
- Latent, o
- model, i
- positive, i
- negative, i
- Latent, i
- seed,
- control_after_generate,, randomize
- steps,, 20
- CFG,, 8.0
- sampler_name,, euler
- scheduler,, normal
- denoise,, 1.00
- io defaultTest, i , test
- io defaultTest, o, test
- t1:noValueTest,
- t2:,, noKeyTest
mul lines test
- node2:KSample
- 潜空间, o
- 模型, i
- 正面条件, i
- 负面条件, i
- 潜空间, i
- 种子,
- 运行后操作,
- 步数,
- CFG,
- 采样器/采样方法,
- 调度器,
- 降噪,
- translate
- edges
- node1,Latent, translate,l
- translate,r, node2, 潜空间
```
超简化
语法规则
通用规则
- 一行一个项,“项” 有四种:节点、节点上I/O Socket或属性项、线、节点组,他们的声明方式:
- 节点/组
id(:name)?, ()="node"
不写冒号表示id和节点名是一样的,type可以不写,默认为 "node" - 接口
id(:name), (i|o|v|""), (value)=""
type为input
/output
表述输入或输出接口,value
表示并非这两种之一属性 - 线条
from, from socket, to, to socket, (name)?
从哪个节点id,的哪个socket id,到哪个节点id,的哪个socket id
- 节点/组
- 缩进关系表示包含关系。例如节点组可以包含节点,节点可以包含节点组
特殊规则 (进阶)
- 最外层是两个特殊组,nodes和edges,固定的。
- 当然,有一个写法变形可以去掉最外层,用如果该项有四个参数就是edges组,否则则为nodes组,但我觉得虽然能写少了,但可能更容易造成混乱?待定
- 当不声明节点socket时,会默认声明四个隐藏节点:left、right、top、bottom
语法设计亮点
- 隐藏key值设计
- 传统k-v语法,必须声明key-value对,而省略key可以大幅简化语法。例如nodeflow listGrammer的key、name、type、value键都是隐藏的。 这一设计参考了:变量命名中的可选变量、for语句中的三个位置、函数的形参设计
- 缩进表示包含关系
- 这一设计参考了:python流程控制语句、yaml语法
- 一项一行
- 这一设计参考了:JSONL
- 列表式声明
- 对一项一行设计的补充,允许了一项包含多行文本的情况 这一设计参考了:Markdown语法、Obsidian AnyBlock的list选择器用法
命名规则
- value可以是任意内容
- id、name、socket传参类型、socket参值类型:不可以包含逗号
类型表
- item类型
- 主动声明:node、socket、edge
- 自动声明:node可以有group类型
- socket类型
- 传参类型 (TransType):i、o、fi、fo、v(默认为v,通过什么方式获取参数,获取参数的时机是什么,引用还是拷贝)
- 参值类型 (ValueType):int、float、boolean、color、enum等(任意声明,默认使用id/name作为类型)
- node类型
运行socket
链接到当前文件 0
没有文件链接到当前文件