Skip to content

qxryz/Workflow

Repository files navigation

Workflow Generator

Workflow Generator 是一款面向 macOS 的本地工作台,用无限画布组织模型节点、本地 Agent、媒体资产和自动化工作流。它适合用来搭建多模态生成链路、调试单个节点、沉淀一致性参考资料,并把本地命令行工具纳入同一个创作空间。

核心能力

  • 无限画布:自由放置模型节点、Agent 节点、资产、形状和逻辑箭头。
  • 节点聊天:每个节点都有独立对话框,可发送文本并附加图片、视频、音频或文件。
  • 模型与提供商:维护 API 账号,并把模型注册为可复用的对话或特殊接口配方。
  • 本地 Agent:扫描本机可用的命令行 Agent,并通过节点对话或工作流运行调用。
  • 工作流运行:按逻辑箭头计算执行层级,同一级节点可并行运行。
  • 逐级运行:可选择连续运行,也可每完成一层暂停一次,便于人工检查中间结果。
  • 资产传递:支持通过逻辑箭头传递文本、JSON 和资产,也支持扇形弹射命中接收区后传递资产。
  • 一致性资料库:将人物、风格、场景、品牌、镜头、语音、音乐和音效等参考资料集中管理。
  • 一致性节点:在画布上收纳上游资产,把它们整理进一致性资料库,供后续生成节点引用。

工作区

使用前需要先创建或打开工作区。工作区会记录当前画布、节点、工作流配置、资产列表和运行记录。工作区数据保存在项目文件夹中,便于备份和迁移。

生成资产会写入项目下的 .workflow-assets/<工作区>/generated/。它与 .workflow-工作区名称/ 元数据目录分开,因此不会被误识别成新的工作流。

节点类型

模型节点

模型节点用于调用设置中已经注册好的模型接口。节点只保留少量适合单次调整的参数和附件,并可以在聊天窗口中直接调试。

Agent 节点

Agent 节点用于调用本机可用的命令行 Agent。它适合处理项目文件、代码审查、文件生成和本地工具链任务。

一致性节点

一致性节点只收纳资料,不作为普通输出节点。它接收上游节点传来的文件、图片、视频、音频或文本,并写入一致性资料库。后续生成节点会从资料库中挑选相关参考,而不是把所有资料都塞入提示词。

逻辑箭头

逻辑箭头既表示执行顺序,也表示数据传递关系。

一条逻辑箭头可以配置:

  • 显示名称;
  • 说明;
  • 是否启用;
  • 运行策略;
  • 依赖策略;
  • 条件;
  • 传递内容;
  • 传递资产。

传递内容示例:

{
  "text": "summary",
  "json": {
    "title": "$.title",
    "scene": "$.scene"
  }
}

传递资产示例:

{
  "include": ["image", "video"],
  "extensions": ["png", "mp4"],
  "role": "reference"
}

资产传播方式

箭头传递

资产只按逻辑箭头传递。适合结构清晰、需要严格控制输入输出的工作流。

弹射接收

逻辑箭头仍然决定执行顺序,同时节点的扇形弹射区域如果命中另一个节点的接收区,就会在运行开始时固定为一条资产传递路径。适合媒体工作流和参考资料收集。

一致性资料库

一致性资料库按类别管理参考资料:

  • 主角 / 人物;
  • 视觉风格;
  • 场景 / 地点;
  • 品牌 / 产品;
  • 镜头 / 动作;
  • 语音 / 说话人;
  • 音乐;
  • 音效 / 环境声。

每个资料可以包含说明、标签、来源节点、来源运行、锁定状态、主参考状态和版本信息。

运行输入、变量和 Secret

工作流设置页提供运行输入表单。运行前填写的值会进入本次运行,并可在节点模板中引用。

常用引用格式:

{{input.name}}
{{runInput.name}}
{{var.name}}
{{secret.NAME}}

Secret 会在发送给模型或 Agent 前展开,请避免让节点把 Secret 值直接输出。

案例

实际工作流案例会跟着用户实操一起沉淀。当前版本(v0.1)暂不内置固定案例,字段说明与运行策略见 WorkflowGenerator 文档站/#troubleshooting/#run 页面(文档站代码在独立仓 qxryz/workflowgenerator)。

本地构建与运行

项目使用 Swift Package Manager。

构建:

swift build

测试:

swift test

重新构建并启动 macOS app bundle:

./script/build_and_run.sh --verify

应用会打包到:

dist/WorkflowGenerator.app

常用入口也可以用 Makefile:

make help      # 列出所有任务
make build     # swift build
make test      # swift test
make lint      # swiftlint + swiftformat(lint 模式)
make fmt       # 应用 swiftformat
make clean     # 清理 .build / dist

文档站代码已经迁出到独立仓库 qxryz/workflowgenerator,本仓不再管理 website/

项目结构

Sources/WorkflowGenerator/
  App/                 应用入口、外观适配
  Models/              数据结构、模型注册类型、端点预设、模板注册表
  Services/            模型调用、工作区、图计算、空间路由、一致性资料处理
  Stores/              应用状态与工作流编排(AppStore 暂时较重,拆分方案见 docs/)
  Views/               画布、设置、侧边栏、节点面板和聊天界面
Tests/                 路由、模型注册和工作流语义测试
script/                本地构建、清理、lint 脚本
docs/                  设计文档与注册接口参考

文档站(Vite + React)独立成仓:qxryz/workflowgenerator

当前边界

  • 一致性验证目前是基础评分,适合作为人工复核提醒。
  • 图像相似度、视频关键帧比对和更完整的多模态验证可在后续接入。
  • 复杂接口映射建议继续放在提供商和模型注册接口中,避免写死在节点里。

模型注册

供应商导入的模型只是“已发现模型”。模型在工作流节点中使用前,需要在 设置 -> 模型 中注册至少一个接口。一个模型可以注册多个接口,例如同一个供应商下的 Messages 对话接口、图片生成接口和异步视频任务接口。

Provider -> Model -> Registered Interface -> Node

提供商保存账号、默认 Base URL 和 API Key;模型保存模型 ID;已注册接口保存真正的 HTTP 调用方式;节点只选择一条已注册接口并传入本次运行的附件和少量参数。

注册按以下步骤完成:

  1. 确认是否沿用供应商 Base URL,或为该接口单独重写地址;
  2. 选择 ConversationSpecial。图片理解通常仍属于 Messages 对话;图片、视频、语音和 3D 生成使用特殊接口;
  3. 声明输入卡片,把提示词、图片、视频、音频或文件映射到供应商要求的字段;
  4. 选择附件序列化格式:automaticurldata_urlbase64textjson
  5. 配置输出卡片,从响应中提取文字、媒体 URL、Base64 或任务 ID;
  6. 选择同步、SSE、WebSocket 或异步任务。异步任务还要填写查询路径、状态字段、成功值和失败值;
  7. 预览最终 URL 和 JSON,保存为“未验证”,单节点聊天跑通后再登记为“已验证”。

系统模板是可恢复的起点,不会覆盖用户填写的内容。旧版模型路由在加载时只会迁移成草稿,不会静默参与节点运行。

模型节点只选择一个已经注册的具体接口。节点面板只展示模板允许在单个节点调整的常用参数,例如视频时长、尺寸、数量、音频开关和 seed。节点附件会按注册接口的输入卡片自动填入参数;地址、认证、响应解析和轮询规则仍留在设置中。

对话接口会把图片理解、视频理解等材料编译成 Messages 内容块。图片生成、视频生成、TTS、ASR、Embedding 和 3D 等任务使用各自的特殊接口,不会混入普通聊天请求。

附件序列化

本地桌面路径不能直接发送给云端。常用格式:

格式 用途
automatic 本地媒体转换为 data URL,远程 https 地址保留 URL
url 只发送供应商能够访问的公网 URL
data_url 发送 data:<mime>;base64,...
base64 只发送 Base64 正文
text 读取文本文件内容
json 把附件解析成 JSON 对象或数组

异步轮询

视频和部分图片接口会先创建任务,再查询结果。注册异步接口时至少要配置:

  • Task ID Path:从提交响应里取出任务 ID;
  • Polling Path:查询任务状态的路径,例如 /contents/generations/tasks/{task_id}
  • Status Path:状态字段所在位置;
  • Success ValuesFailure Values:停止轮询的状态集合;
  • IntervalMax Attempts:查询间隔和最大次数。

查询 URL 由注册接口的 Base URL 与 Polling Path 拼接。Base URL 中已有的 /v1/api/v3 等前缀不能丢。

更完整的字段说明、内容块模板和排障表见 WorkflowGenerator 文档站/docs 页面。

About

🌟WorkflowGenerator — macOS canvas for multi-modal model nodes, local agents, and workflow automation. Swift Package Manager; macOS 14+.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages