Skip to main content
Glama

本仓库已并入 shanggu-film-pipeline-fqllg(上古影视工作流-FQLLG),不再单独更新。 新的安装和更新方法见新仓库的 README。这里保留旧版本供查阅,已设为只读归档。

玄上画布插件(xuanshang-canvas)

让 Claude Code、Codex 等 AI 工具,用同一套规则操作你电脑上正在运行的「玄上无限画布」(也支持玄上内部版):新建项目和认证分组、查项目、上传认证图片和参考视频、把素材放到画布上、建 Seedance 视频节点、提交生成、样片转成片、查进度。

  • 不用每次启动:在 AI 工具里装一次,以后打开 AI 工具就会在后台自动启动插件,插件再自己去找开着的画布。

  • 不碰你的密钥:插件不读取、不保存任何 API Key。所有请求都经过你本机的画布,用的是画布里登录的账号和积分。

  • 只在你下指令时花积分:提交生成、转成片只在你明确说要生成时才执行,不会自己主动提交。


一、安装:让 AI 帮你装

准备:Windows 电脑,装好并能正常打开「玄上无限画布」,在画布里登录自己的账号;装好 Claude Code 或 Codex。

把下面这段话原样发给 Claude Code 或 Codex,它会自己把插件装好:

请帮我安装玄上画布插件:按 https://github.com/pencil102411-cell/xuanshang-canvas 这个仓库 README 里「给 AI 的安装步骤」操作,装完运行自检,把结果告诉我。

安装过程中 AI 可能会请你批准运行命令,点允许就行。装好以后:

  • Claude Code:新开一个会话;

  • Codex:重启 Codex。

然后说一句「用 canvas_status 看看画布连上了没有」,看到「已连接」和画布名字,就装好了。


Related MCP server: Seedance MCP

二、给 AI 的安装步骤

这一节是写给 AI 看的,使用者不用自己操作。所有命令都在普通权限的 PowerShell 里运行。插件仓库:https://github.com/pencil102411-cell/xuanshang-canvas

第 1 步:确认电脑上有 uv

插件靠 uv(Python 环境管理工具)运行。先检查:

@((Get-Command uv.exe -ErrorAction SilentlyContinue).Source, "$env:USERPROFILE\.local\bin\uv.exe", "$env:LOCALAPPDATA\Microsoft\WinGet\Links\uv.exe") | Where-Object { $_ -and (Test-Path $_) }

什么都没输出就是没装,运行 winget install --id=astral-sh.uv -e 安装;winget 不可用时改用 powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"。装完不用重启:插件的启动脚本会自己去这些位置找 uv。

第 2 步(Claude Code):用插件市场安装

claude plugin marketplace add https://github.com/pencil102411-cell/xuanshang-canvas
claude plugin install xuanshang-canvas@xuanshang-tools

然后运行自检,顺便把依赖提前装到插件的数据目录(第一次要一两分钟):

$root = (Get-ChildItem "$env:USERPROFILE\.claude\plugins\cache\xuanshang-tools\xuanshang-canvas" -Directory | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName
$env:UV_PROJECT_ENVIRONMENT = "$env:USERPROFILE\.claude\plugins\data\xuanshang-canvas-xuanshang-tools\venv"
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\scripts\start-mcp.ps1" --check

画布开着时会显示「已连接」;画布没开会提示先打开画布,这也说明插件本身装好了。最后告诉用户新开一个会话。插件自带规则说明(技能 xuanshang-canvas),不用另外放规则文件。

可选:用户同意的话,把 adapters/claude-code/permissions.json 里 plugin 那组的 permissions 合并到 ~/.claude/settings.json(所有插件工具直接放行,不再逐个弹出批准)。

第 2 步(Codex):下载插件文件夹并登记

  1. 下载插件到 %USERPROFILE%\xuanshang-canvas(不需要 git)。升级时先删掉旧文件夹:

    $zip = "$env:TEMP\xuanshang-canvas.zip"; $tmp = "$env:TEMP\xuanshang-canvas-unzip"
    Invoke-WebRequest https://github.com/pencil102411-cell/xuanshang-canvas/archive/refs/heads/main.zip -OutFile $zip
    Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue; Expand-Archive $zip $tmp
    Move-Item "$tmp\xuanshang-canvas-main" "$env:USERPROFILE\xuanshang-canvas"
  2. 自检并提前装好依赖:

    powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\xuanshang-canvas\scripts\start-mcp.ps1" --check
  3. 把 adapters/codex/config.toml 的内容加到 %USERPROFILE%\.codex\config.toml 末尾,把里面的 C:/Users/你的用户名/xuanshang-canvas 换成实际路径(用正斜杠)。已经有 [mcp_servers.xuanshang-canvas] 这一段时,替换掉旧的。这段配置把等待时间调长了(Codex 默认启动只等 10 秒、每次调用只等 60 秒,不够用)。旧版配置里如果有 [mcp_servers.xuanshang-canvas.tools.submit_generation]、[mcp_servers.xuanshang-canvas.tools.create_final_video] 这两小段,一起删掉。

  4. 把 adapters/codex/skills/xuanshang-canvas 整个文件夹复制到 %USERPROFILE%\.agents\skills\(没有就新建)。这是给 Codex 的规则说明。

  5. 告诉用户重启 Codex。

第 2 步(其他 MCP 工具:Cursor、Claude Desktop、Gemini CLI、VS Code 等)

按 Codex 的第 1、2 步下载并自检,再照 adapters/generic/ 里的示例添加配置(VS Code 用 vscode-mcp.json,其他用 mcp.json),把路径换成实际位置。这些工具没有专门的规则文件,规则主要靠插件代码强制执行和工具说明。


三、日常怎么用

直接用中文跟 AI 说要做什么,例如:

  • 「新建一个项目,叫『第09集-场12』」

  • 「在第09集-场12 这个项目里建三个认证分组:人物、场景、参考视频」

  • 「看看 16-20 测试这个项目里有哪些视频节点」

  • 「把 D:\素材\司徒陌-面部.png 传到 16-20 测试项目的人物分组,认证完放到画布上」

  • 「把 D:\预演\镜127.mp4 作为参考视频上传认证,放到画布上」

  • 「新建一个视频节点,叫『镜127』,接司徒陌两张图和刚才的参考视频,提示词是……」

  • 「提交镜127」(直接提交,会花积分)

  • 「镜127 的样片好了没有?」「把这个样片转成片」

AI 会按插件的规则来做,做完会告诉你结果、核对情况和需要注意的地方。


四、插件会替你守住的规则(摘要)

完整规则见 rules/RULES.md,这里说最常碰到的几条:

规则

说明

只加不改不删

只新增节点和连线;要改就新建一个,重名自动加 -v2、-v3,旧的保留

引用写法跟画布一致

统一写成半角 (图片1)、(视频1),和画布界面保存后的样子一样;@图片1、全角 (图片1) 会自动转过来

每一处引用都带括号

正文里写「背景采用图片11」画布认不出,必须写 (图片11);「图片7、8」「图片1—8」这类省略写法也要展开。插件会逐处检查,指出第几行哪一处

引用和素材对得上

编号不能超过接入的素材数,接入的每个素材都要被引用,否则拒绝创建

原质量上传

按原文件上传并核对大小和尺寸;长边超过 6000px 的图照样上传,画布会自动缩到长边 5800px,结果里会写清楚缩到了多大

参考视频要认证

本地参考视频先上传认证;画布上已经生成好的视频可以直接当参考

只在你下指令时花积分

提交生成、转成片只在你明确要求时执行;同一节点已有任务在跑时拒绝,避免重复扣积分

提交后不盯进度

你问进度时才去查


五、配置项(可选)

不配置也能用。要改默认参数,新建 C:\Users\你的用户名\AppData\Roaming\xuanshang-canvas\config.json,只写要改的项:

{
  "video_defaults": {
    "model": "Doubao-Seedance-2.5",
    "seedanceMode": "multimodal",
    "resolution": "draft",
    "ratio": "21:9",
    "seed": 1,
    "outputFormat": "mp4",
    "webSearch": false,
    "duration": 5
  },
  "certify_wait_seconds": 50,
  "size_tolerance": 0.05
}

配置项

意思

默认

video_defaults

新建视频节点时没指定的参数用这些

见上

canvas_port

写死画布端口(一般不用,插件会自己找)

不写

certify_wait_seconds

上传后最多等认证多少秒

50

size_tolerance

上传后大小差多少以内只提示不报错

0.05(5%)

也可以用环境变量:CANVAS_PORT、XUANSHANG_CERTIFY_WAIT_SECONDS;配置文件位置可用 XUANSHANG_CANVAS_CONFIG 指定。

等待时间要比 AI 工具自己的等待上限短。Codex 按上面的配置是 300 秒;如果你把 Codex 的 tool_timeout_sec 调得更长,这里也可以跟着调长。


六、常见问题

提示「请先打开玄上无限画布」:画布没开,或者刚开还没启动完。打开画布、等界面出来后再试。

提示「同时开着 2 个画布」:比如无限画布和内部版都开着。告诉 AI 用哪个,它会带上端口号选定;只开一个就不会问。

上传后说「认证中」:玄上那边认证慢,插件最多等 50 秒就先返回。过一会儿让 AI 用 list_certified_groups 查,变成「已认证」后再放到画布上。

结果里写着「公共图床」:玄上存储上传失败时,画布会自动改传到公共图床,文件会在公网上。是否继续用这个素材由你决定。

参考视频上传或生成时报错:Seedance 对参考视频有格式、时长、大小、分辨率限制,具体数值还没查清。插件会把画布的原始报错原样给你,照着报错改视频即可。

提示「画布版本和插件不兼容」:画布升级后内部接口变了。把报错发给插件维护者。

Claude Code / Codex 说插件启动失败(比如 Connection closed):跟 AI 说「按玄上画布插件 README 里给 AI 的安装步骤,重新检查 uv 并运行自检」。自检会把依赖装好并显示具体报错。第一次启动要下载依赖,网络慢时可能超时,自检通过后再新开会话试一次。


七、已验证的画布版本

程序

构建号

状态

玄上内部版

20260923203739

已实测:读取、建项目、上传认证、放节点、建视频节点

玄上无限画布

20260923203516

和内部版同一套接口,待实测

canvas_status 会显示当前画布的构建号和是否实测过。


八、给维护者

xuanshang-canvas/
├── .claude-plugin/          # Claude Code 插件清单和插件市场清单(仓库根目录就是插件)
├── .mcp.json                # Claude Code 插件启动 MCP 服务的配置
├── skills/xuanshang-canvas/ # Claude Code 规则文件(自动生成)
├── src/xuanshang_canvas/
│   ├── core/                # 核心库:连接画布 + 统一规则,所有写入都经过这里
│   └── mcp_server/          # MCP 服务(所有 AI 工具共用)
├── rules/RULES.md           # 规则源文件(唯一来源)
├── docs/api-notes.md        # 画布内部接口记录
├── adapters/
│   ├── claude-code/         # 权限建议
│   ├── codex/               # config.toml 片段、规则文件(自动生成)
│   └── generic/             # 其他 MCP 工具的配置示例
├── scripts/                 # start-mcp.ps1 启动插件;build_adapters.py 生成规则文件
├── pyproject.toml           # 直接依赖,固定版本
└── uv.lock                  # 全部间接依赖的固定版本
  • 改规则只改 rules/RULES.md,然后运行 python scripts/build_adapters.py 重新生成各家的规则文件;--check 只检查是否一致。MCP 服务的使用说明直接读 RULES.md。

  • 所有 AI 工具都通过 scripts/start-mcp.ps1 启动插件。它自己去 uv 的常见安装位置找 uv,再运行 uv run --frozen --quiet --no-editable --project <插件目录> python -m xuanshang_canvas.mcp_server.server。不直接写 uv,是因为 Windows 上刚装好 uv 时,已经开着的程序(包括 Claude 应用)看不到新的 PATH,会报 Connection closed。

  • 为什么 Claude Code 插件放在仓库根目录而不是 adapters/claude-code/:启动脚本要从插件自己的文件夹运行,插件目录里必须有 Python 源码。

  • 依赖目录按版本分开:Claude Code 给的基础位置是 ${CLAUDE_PLUGIN_DATA}/venv,启动脚本实际用 venv-<版本号>。升级时旧版本的会话可能还开着、占用着旧目录里的文件(Windows 会报「另一个程序正在使用此文件」),分开后互不影响。旧版本目录由启动脚本自动删除,但只删「没有任何正在运行的程序来自这个目录」的(用进程列表判断;改名试探不可靠,Windows 上正在用的目录也可能改名成功)。比较路径前先统一格式,因为 Claude Code 传进来的是正斜杠路径。服务用 python -m 启动,而不是 venv 里的 exe,同样是为了不锁住需要更新的文件。

  • 为什么用 uv run --frozen --project 而不是 uvx --from:在开着 Windows Defender 的电脑上实测,uvx 在临时目录里装依赖时会被 Defender 锁住 pywin32 的文件而失败(os error 32);装到固定目录(uv run、uv tool install)没有这个问题。--frozen 按 uv.lock 装,所有间接依赖的版本也是固定的。

  • start-mcp.ps1 要保存成带 BOM 的 UTF-8,否则 Windows PowerShell 5.1 读中文会乱码。

  • 用 --no-editable 把插件代码复制进依赖目录:默认的「可编辑安装」靠一个 .pth 文件记源码路径,中文版 Windows 上的 Python 3.12 及更早版本用 GBK 读这个文件,路径里有中文就读成乱码、找不到代码。pyproject.toml 里的 [tool.uv] cache-keys 让源码一改就重新打包。

  • 依赖升级:改 pyproject.toml 后运行 uv lock,测完再发布。

  • 本地调试:powershell -NoProfile -ExecutionPolicy Bypass -File scripts\start-mcp.ps1 --check;或在 Claude Code 里 claude --plugin-dir . 临时加载。

  • 发新版:改 .claude-plugin/plugin.json、pyproject.toml、src/xuanshang_canvas/__init__.py 里的版本号,运行 uv lock,推到 GitHub。已安装的用户运行 claude plugin marketplace update xuanshang-tools 再 claude plugin update xuanshang-canvas@xuanshang-tools。

  • 画布接口细节见 docs/api-notes.md。画布升级后先跑 canvas_status 看兼容性检查。

Available Tools

13 tools
add_certified_asset_nodeA

把已认证的素材(图片或视频)放到画布上,自动找空位,排成一列。只接受「已认证」的素材。

Inputs: project (required), asset_ids (required), display_names, allow_duplicate. Returns: object

canvas_statusA
Read-onlyIdempotent

查看画布是否在运行、是哪个程序(无限画布/内部版)、端口、版本是否兼容、项目数量。开始操作前先调一次。

Inputs: port. Returns: object

create_certified_groupA

在项目里新建一个认证分组(玄上那边也会同时建好),之后上传认证素材时选它。 注意:玄上没有删除分组的接口,建了就删不掉,名字要先和用户确认。同名分组已存在时会拒绝。

Inputs: name (required), project (required), description. Returns: object

create_final_videoA
Destructive

把 Seedance 2.5 样片转成 1080p 成片(花积分),每次都要用户单独确认。画布会在样片节点旁边新建「成片生成」节点。

Inputs: project (required), node, task_id, confirm_code. Returns: object

create_projectA

在画布里新建一个空项目。已经有同名项目时会拒绝(避免以后选错项目),请换个名字或直接用原来的项目。

Inputs: name (required), description. Returns: object

create_video_nodeA

新建 Seedance 视频生成节点并连好素材。会检查:引用格式(自动统一成画布的 (图片N) 写法)、引用编号和接入素材是否对得上、 素材是否已认证/已生成、参数是否合规;建完马上读回核对。不会提交生成。

Inputs: name (required), prompt (required), project (required), seed, +9 more. Returns: object

get_graph_summaryB
Read-onlyIdempotent

项目节点摘要:每个视频节点的名字、参数、按顺序列出的接入素材(图片1、视频1……)、最近任务状态、 是否已有生成好的视频(可以当参考);以及认证图片节点、认证视频节点的名字和 ID。

Inputs: project (required). Returns: object

get_taskA
Read-onlyIdempotent

查某个任务,或某个节点最近一次任务的状态、进度和输出文件。只在用户问进度时调用,不要反复轮询。

Inputs: project (required), node, task_id. Returns: object

list_certified_groupsC
Read-onlyIdempotent

项目的认证分组,以及组内每个素材(图片、视频)的认证状态(向玄上实时查)、是否已经放到画布上。

Inputs: project (required). Returns: object

list_projectsA
Read-onlyIdempotent

列出画布里的项目(名称、ID、节点数)。

Inputs: no named parameters. Returns: object

submit_generationA
Destructive

提交生成任务(花积分)。每次都要用户单独确认:插件会弹确认框/确认窗口,用户点确认才提交。 同一节点已有任务在跑时直接拒绝。提交后只返回任务 ID,不会自动盯进度。

Inputs: node (required), project (required), confirm_code. Returns: object

upload_certified_imageA

本地图片按原质量上传并认证(JPG/PNG/WEBP/BMP/GIF)。返回素材 ID、存储去向、上传核对结果、认证状态。 长边超过 6000px 的图会被画布压缩,插件会先请用户确认。上传后要再用 add_certified_asset_node 放到画布上。

Inputs: group (required), project (required), file_path (required), confirm_code, +1 more. Returns: object

upload_certified_videoA

本地参考视频按原文件上传并认证(不转码、不剪辑)。返回素材 ID、存储去向、大小核对结果、认证状态。 本地参考视频必须先认证才能接到视频节点上;画布上已生成的视频不用这一步。认证完再用 add_certified_asset_node 放到画布上。

Inputs: group (required), project (required), file_path (required), display_name. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 13 tools

    Disambiguation4/5

    Each tool targets a fairly distinct resource and action: status vs. project listing vs. project detail, image vs. video upload, sample-video node vs. final-video node. The main potential confusion is among the read/status tools (canvas_status, list_projects, get_graph_summary, list_certified_groups), but their granularity differs enough to keep selection clear.

    Naming Consistency4/5

    Almost all tools follow a verb_noun snake_case pattern (create_project, list_projects, get_task, upload_certified_image, add_certified_asset_node, create_video_node, submit_generation). The one deviation is canvas_status, which uses a noun_status form instead of a verb, but it remains readable and unambiguous.

    Tool Count5/5

    13 tools sit squarely in the well-scoped range and each maps to a real step in the canvas workflow. No redundant or filler tools are present.

    Completeness3/5

    The core workflow is covered end to end: status, project/group creation, asset upload, node creation, submission, and final render. However, there are notable gaps: no delete/remove for projects, groups, nodes, or assets (the group deletion gap is explicitly acknowledged), and no bulk task listing or node-parameter update.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables any MCP client such as Claude, Cursor, Cline or Gemini CLI to generate Seedance 2.5, Seedance 2.0, MiniMax H3 and Veo 3.1 videos and still images from text or a reference image using your own account. It also exposes run-status polling and remaining-credit checks, with configurable duration, resolution, aspect ratio and audio.
      4
      53 npm
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      Enables any MCP-compatible AI agent to generate videos and images from text or reference frames, chain scenes into seamless multi-scene films with sound and speech, and download finished media with manifests and previews. It also exposes account status, plan limits, history and library management through confirm-gated, safe-by-default operations.
      26
      34
      MIT