NodeFlow 列表语法
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语句中的三个位置、函数的形参设计 
 - 传统k-v语法,必须声明key-value对,而省略key可以大幅简化语法。例如nodeflow listGrammer的key、name、type、value键都是隐藏的。
 - 缩进表示包含关系 
- 这一设计参考了: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
没有文件链接到当前文件