AI图像生成平台

一个集成了RunPod GPU配置、ComfyUI编排和模型管理的AI原生图像生成平台。

  • by ynishi
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 ynishi/vdsl-mcp

使用说明

vdsl-mcp

MCP服务器 超高速数字用户线路 --AI原生图像生成平台。

RunPod GPU配置、ComfyUI编排和模型管理——所有这些都可以通过以下方式访问 主控程序 工具。

特性

  • RunPod Pod管理 --创建、启动、停止、删除GPU Pod。使用ComfyUI模板自动设置。
  • ComfyUI集成 --连接、查询模型、提交工作流、投票结果、下载图像。
  • 型号下载 --拥抱的脸(hf:)CivitAI(cv:)通过自动令牌注入或直接URL。
  • B2冷库 --通过rclone在Pod和Backblaze B2之间列出、拉取和推送模型。
  • 项目同步 — $VDSL_WORK_DIR/projects/<name>/ (笔记、参考、扫一扫、决赛等)在以下时间同步到B2 vdsl/projects/ 独立于输出位置;不需要pod连接。
  • 图像批量下载 --将ComfyUI历史记录中的所有输出图像下载到本地目录。
  • 多镜头生成 — vdsl_generate 接受 n (重复计数)或 seed_sweep (种子列表)在单个调用中生成N个图像;归还公寓 saved_paths 列表,便于子代理使用。 save_dir 如果不存在,则自动创建。
  • 批量生成 --提交多个工作流,轮询所有作业,下载所有输出。支持 n / seed_sweep 作为每个工作流的笛卡尔积。
  • VDSL脚本执行 --运行编译成ComfyUI工作流的Lua脚本。
  • RunPod CLI直通 --执行任何 runpod-cli 命令与自动API密钥注入。
  • 用户界面 API -具有自动身份验证的通用REST API访问。

MCP工具

工具 说明
连接
vdsl_connect 连接到ComfyUI(本地URL或RunPod pod ID)
生成
vdsl_generate 将工作流程JSON排队并等待完成;支持 n (重复N次)和 seed_sweep (种子列表)用于多镜头生成——返回一个平面 saved_paths 列表; save_dir 如果缺失,则自动创建
vdsl_batch_generate 提交多个工作流,轮询所有工作流,下载输出;支持 n 和 seed_sweep 按每个工作流应用为笛卡尔积; save_dir 如果缺失,则自动创建
vdsl_healthsnap 使用最少的7节点SDXL工作流渲染一张图像作为烟雾测试;没有Lua DSL/目录/自定义节点;默认提示=“花瓶里的一朵花,简单的背景”;如果不 checkpoint 给定,第一个报告由 /object_info 使用。每一步结构化错误(SystemStatsFail, NoCheckpoint, WorkflowFail, GenerateTimeout, ...)--调用方不应重试/安装依赖项/在失败时更改pod状态
vdsl_run 编译Lua脚本→ ComfyUI工作流程→ 生成(支持管道、判断闸门);默认情况下在后台运行
vdsl_run_status 轮询背景的状态 vdsl_run 工作
vdsl_run_script 运行Lua脚本(无生成--仅执行脚本)
vdsl_interrupt 取消正在运行或挂起的ComfyUI作业
型号和目录
vdsl_models 列出可用的检查点、LoRA、VAE等。
vdsl_model_search 按范围搜索模型(remote=CivitAI, archive=B2铲斗, pod=连接的吊舱)、类型和底座;返回带获取提示的结构化JSON
vdsl_node_search 搜索已安装的ComfyUI自定义节点
vdsl_catalogs 浏览VDSL目录条目(相机、照明、人物、质量等)
简介与项目
vdsl_profile_apply 应用ProfileManifest(YAML/Lua)来配置pod环境;支持流式进度和内联Profile.lua
vdsl_profile_apply_status 轮询异步的状态 vdsl_profile_apply 工作
vdsl_project_init 在下面构建一个新的VDSL项目目录 $VDSL_WORK_DIR/projects/ 从模板
vdsl_profile_init 在以下位置构建一个新的Profile Lua DSL文件 <root>/profiles/<name>.lua;与共享根解析 vdsl_project_init; overwrite=false 默认情况下拒绝替换现有文件
vdsl_cam_lua_init 在以下网站构建一个具有人物意识的cam Lua脚本 <root>/<persona_id>_cam_<topic>.lua 这叫 vdsl.cam{...}基础主题要么是明确的 identity 规格(平面主题: base_text + traits + negative_traits,作为a发射 vdsl.subject(...) 链条→ base_source: identity)或者,如果省略,则通过三层人物角色基础回退来解决;自动创建目标目录;返回绝对值 script_file 路径和 base_source
批量编排
vdsl_batch_tools 通过BatchService提交和管理多作业批处理编排
RunPod基础设施
vdsl_pod_list 列出所有带有GPU名称、成本和 endpoints[] (路线: ssh-tunnel / cloudflare-proxy / direct)
vdsl_pod_start 启动一个pod
vdsl_pod_stop 停止吊舱
vdsl_pod_create 创建一个新的pod
vdsl_pod_delete 删除pod
vdsl_pod_setup 找到或创建一个pod,等待就绪,连接
vdsl_volume_list 列出网络卷
SSH隧道
vdsl_tunnel_open 打开到pod服务的SSH本地端口转发隧道;当SSH信息不可用时,自动回退到Cloudflare代理
vdsl_tunnel_close 关闭pod的SSH隧道(幂等)
vdsl_tunnel_list 列出内存注册表中的所有活动隧道(JSON快照)
远程操作(SSH)
vdsl_exec 在pod上执行shell命令
vdsl_task_run 在pod上启动后台作业
vdsl_task_status 检查后台作业状态
vdsl_task_list 列出所有后台作业
vdsl_task_log 查看后台作业日志输出
文件传输
vdsl_upload 将文件上传到ComfyUI输入/目录
vdsl_download 将模型下载到pod(HuggingFace、CivitAI、URL)
vdsl_image_download 从ComfyUI历史记录或输出目录下载输出图像
vdsl_image_search 按文件名模式搜索本地图像文件
冷库(B2)
vdsl_storage_list 列出B2中的文件
vdsl_storage_pull 将型号从B2拉到吊舱
vdsl_storage_push 将模型从pod推送到B2
vdsl_storage_archive 存档:推送→ 验证→ 从pod中删除
文件同步(vdsl同步)
vdsl_sync 同步 $VDSL_WORK_DIR/projects/<name>/ B2在 vdsl/projects/ (仅限云端;无需pod连接)
vdsl_sync_route 配置或显示同步路由(源↔ 目标URL方案)
vdsl_sync_status 获取位置或路线的当前同步状态
vdsl_sync_list 列出所有跟踪的同步位置和路线
vdsl_sync_get 获取特定跟踪文件或同步记录的详细信息
vdsl_sync_delete 从某个位置删除(软删除)跟踪的文件
vdsl_sync_restore 从存档中还原软删除的文件
vdsl_sync_errors 列出位置或路线的同步错误
vdsl_sync_poll 轮询挂起的同步操作和刷新队列
vdsl_sync_cancel 取消正在进行或排队的同步操作
vdsl_sync_logs 查看同步操作日志
低的
vdsl_queue_status 查询ComfyUI队列和历史记录
vdsl_comfy_api 通用ComfyUI REST API调用
vdsl_runpod_cli RunPod CLI直通(任何命令)

安装

# 1. Install the MCP server binary
cargo install vdsl-mcp

# 2. Clone VDSL runtime (Lua DSL modules — required for vdsl_run / vdsl_catalogs)
git clone https://github.com/ynishi/vdsl.git ~/vdsl

仅二进制文件就足以直接提交ComfyUI工作流(vdsl_generate). 使用Lua DSL(vdsl_run, vdsl_catalogs),需要VDSL运行时存储库-- 它提供了 lua/ 包含目录定义、编译器和管道逻辑的目录。

配置

环境变量

变量 必填 描述
VDSL_RUNPOD_API_KEY 对于RunPod操作 RunPod API键(runpod.io/console/user/settings)
VDSL_SSH_KEY 对于RunPod SSH操作 pod访问的SSH私钥路径(例如。 ~/.ssh/id_ed25519).回落到 ~/.ssh/id_ed25519 如果未设置
VDSL_COMFYUI_TOKEN 用于经过身份验证的ComfyUI 用于ComfyUI代理身份验证的承载令牌(RunPod代理使用此令牌)
VDSL_CIVITAI_TOKEN 对于CivitAI下载 CivitAI API令牌-自动插入 cv: 以及CivitAI URL下载
VDSL_B2_KEY_ID 用于B2存储 Backblaze B2应用程序密钥ID
VDSL_B2_KEY 用于B2存储 Backblaze B2应用程序密钥
VDSL_B2_BUCKET 对于B2存储(可选) 默认B2存储桶名称(也可以每次调用指定)
VDSL_COMFYUI_BASE 可选 覆盖pod上的ComfyUI安装路径(默认: /workspace/runpod-slim/ComfyUI).社区模板可以使用 /workspace/ComfyUI 等等
VDSL_INLINE_HISTORY_DIR 可选 覆盖用于保存内联Lua代码历史的目录
VDSL_ENV_FILE 可选 显式 .env 文件路径。最高优先级 .env 源代码(仍低于操作系统环境值)

.env 文件自动加载

vdsl-mcp 从以下位置加载变量 .env 启动时的文件,这样就不需要在其中嵌入机密 .mcp.json.搜索顺序(第一个写入者获胜;OS环境始终保留):

  1. 操作系统环境(已在shell/父进程中导出)
  2. $VDSL_ENV_FILE 如果设置
  3. ~/.config/vdsl-mcp/.env
  4. $CWD/.env

推荐布局:保持 .mcp.json env 没有秘密的块(仅 VDSL_WORK_DIR 以及类似的非秘密路径),并将令牌放置在 ~/.config/vdsl-mcp/.env 随着 chmod 600.包含文字的值 $ (例如bcrypt哈希)必须在 .env 文件因为 dotenvy 执行 $VAR 非上市价值的扩张。

MCP客户端配置

最小(仅限本地ComfyUI)

{
  "mcpServers": {
    "vdsl": {
      "command": "vdsl-mcp"
    }
  }
}

然后连接 vdsl_connect(url="http://localhost:8188").

已满(RunPod+B2存储)

{
  "mcpServers": {
    "vdsl": {
      "command": "vdsl-mcp",
      "env": {
        "VDSL_RUNPOD_API_KEY": "rpa_...",
        "VDSL_SSH_KEY": "~/.ssh/id_ed25519",
        "VDSL_COMFYUI_TOKEN": "your-comfyui-token",
        "VDSL_CIVITAI_TOKEN": "your-civitai-token",
        "VDSL_B2_KEY_ID": "your-b2-key-id",
        "VDSL_B2_KEY": "your-b2-key",
        "VDSL_B2_BUCKET": "your-bucket-name"
      }
    }
  }
}

用法

快速入门(本地ComfyUI)

  1. vdsl_connect(url="http://localhost:8188") --连接到ComfyUI
  2. vdsl_models --列出可用的检查点和LoRA
  3. vdsl_generate(workflow) --从JSON工作流生成图像

VDSL Lua DSL

将人类可读的Lua脚本编译到ComfyUI工作流中:

  1. vdsl_catalogs --浏览可用的目录条目(相机角度、照明、人物等)
  2. vdsl_run(script_file="~/vdsl/examples/mlua_verify_p1.lua") --编译+生成
  3. vdsl_run(code="...", working_dir="~/vdsl") --运行内联Lua代码

这 working_dir 必须指向克隆的VDSL存储库(包含 lua/ 用于模块分辨率)。 当 script_file 使用, working_dir 从脚本的父目录向上移动会自动检测到。

基础设施(RunPod)

  1. vdsl_pod_list --列出带有GPU信息的Pod
  2. vdsl_pod_setup --查找或创建GPU pod,等待准备就绪
  3. vdsl_exec(command="nvidia-smi") --通过SSH在pod上运行命令
  4. vdsl_task_run(command="...") --启动长时间运行的后台作业
  5. vdsl_download(source="hf:...", target="loras") --将模型下载到pod

SSH隧道(绕过Cloudflare代理)

打开一个稳定的本地端口转发隧道到pod,以避免Cloudflare代理不稳定:

  1. vdsl_tunnel_open(pod_id="...", service="comfyui", remote_port=8188) --开放式隧道;返回本地端口(例如。 7100)或者,如果SSH信息不可用,则自动回退到Cloudflare代理URL
  2. vdsl_tunnel_list --检查活动隧道(route: ssh-tunnel | cloudflare-proxy)
  3. vdsl_connect(url="http://127.0.0.1:7100") --通过隧道连接
  4. vdsl_tunnel_close(pod_id="...") --完成后关闭隧道

vdsl_pod_list 在其 endpoints[] 字段,以便您可以一目了然地验证路由。

冷库(B2)

  1. vdsl_storage_list --列出B2中的文件
  2. vdsl_storage_pull(source="models/loras/my.safetensors", target="loras") --从B2还原
  3. vdsl_storage_archive(source_target="loras", filename="old.safetensors") --存档到B2(推送→ 验证→ 删除)

模型来源

hf:user/repo/model.safetensors        # HuggingFace
cv:1595775                             # CivitAI (token auto-injected)
https://example.com/model.safetensors  # Direct URL
user/repo/model.safetensors            # Bare path (defaults to HuggingFace)

相关

许可证

根据以下任一方式获得许可:

由您选择。