xuanshang-canvas
This server lets AI tools operate a locally running 玄上无限画布 (Xuanshang Canvas) via its logged-in account — managing projects, certified asset groups, uploads, Seedance video nodes, and generation tasks.
Inspect canvas state:
canvas_status(running program, port, version compatibility, project count),list_projects,get_graph_summary(per-node params, attached assets, latest task status, generated videos),list_certified_groups(live certification status), andget_task(task progress/output on demand only).Create projects:
create_projectmakes an empty project, rejecting duplicate names.Create certification groups:
create_certified_groupmakes a group for uploads (cannot be deleted, so names need confirmation).Upload assets for certification:
upload_certified_image(JPG/PNG/WEBP/BMP/GIF, original quality, size/dimension verified, confirms before >6000px compression) andupload_certified_video(MP4/MOV, no transcoding).Place assets on canvas:
add_certified_asset_nodearranges certified image/video assets into a column (only certified assets allowed; duplicate guard available).Build Seedance video nodes:
create_video_nodewires up images/videos in order, normalizes(图片N)/(视频N)references, validates references against attached assets, checks params, and reads back to verify — without submitting.Submit paid generation (explicit user confirmation required each time):
submit_generationstarts a task and returns a task ID;create_final_videoconverts a Seedance 2.5 draft into a 1080p final video (new node created beside the draft).Safety constraints: read-only tools are idempotent; write tools never modify/delete existing nodes; credits are spent only on explicit instruction, and jobs already running on a node are refused.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@xuanshang-canvas 新建一个项目叫「第09集-场12」,再建人物、场景、参考视频三个认证分组"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
本仓库已并入 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):下载插件文件夹并登记
下载插件到
%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"自检并提前装好依赖:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\xuanshang-canvas\scripts\start-mcp.ps1" --check把
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]这两小段,一起删掉。把
adapters/codex/skills/xuanshang-canvas整个文件夹复制到%USERPROFILE%\.agents\skills\(没有就新建)。这是给 Codex 的规则说明。告诉用户重启 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,旧的保留 |
引用写法跟画布一致 | 统一写成半角 |
每一处引用都带括号 | 正文里写「背景采用图片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
}配置项 | 意思 | 默认 |
| 新建视频节点时没指定的参数用这些 | 见上 |
| 写死画布端口(一般不用,插件会自己找) | 不写 |
| 上传后最多等认证多少秒 | 50 |
| 上传后大小差多少以内只提示不报错 | 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 toolsadd_certified_asset_nodeA
把已认证的素材(图片或视频)放到画布上,自动找空位,排成一列。只接受「已认证」的素材。
Inputs: project (required), asset_ids (required), display_names, allow_duplicate. Returns: object
canvas_statusARead-onlyIdempotent
查看画布是否在运行、是哪个程序(无限画布/内部版)、端口、版本是否兼容、项目数量。开始操作前先调一次。
Inputs: port. Returns: object
create_certified_groupA
在项目里新建一个认证分组(玄上那边也会同时建好),之后上传认证素材时选它。 注意:玄上没有删除分组的接口,建了就删不掉,名字要先和用户确认。同名分组已存在时会拒绝。
Inputs: name (required), project (required), description. Returns: object
create_final_videoADestructive
把 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_summaryBRead-onlyIdempotent
项目节点摘要:每个视频节点的名字、参数、按顺序列出的接入素材(图片1、视频1……)、最近任务状态、 是否已有生成好的视频(可以当参考);以及认证图片节点、认证视频节点的名字和 ID。
Inputs: project (required). Returns: object
get_taskARead-onlyIdempotent
查某个任务,或某个节点最近一次任务的状态、进度和输出文件。只在用户问进度时调用,不要反复轮询。
Inputs: project (required), node, task_id. Returns: object
list_certified_groupsCRead-onlyIdempotent
项目的认证分组,以及组内每个素材(图片、视频)的认证状态(向玄上实时查)、是否已经放到画布上。
Inputs: project (required). Returns: object
list_projectsARead-onlyIdempotent
列出画布里的项目(名称、ID、节点数)。
Inputs: no named parameters. Returns: object
submit_generationADestructive
提交生成任务(花积分)。每次都要用户单独确认:插件会弹确认框/确认窗口,用户点确认才提交。 同一节点已有任务在跑时直接拒绝。提交后只返回任务 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
Scored across 13 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for Hailuo (MiniMax) AI video generation
AI video generation MCP server for Kling, MiniMax, Luma & Hunyuan with prompt blueprints.
Plan, compare, price, generate, and recover AI video from compatible MCP clients.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceEnables video generation from text, images, and more through MCP-compatible apps like Claude and Cursor.55MIT- FlicenseAqualityDmaintenanceEnables video generation using the Seedance 2.0 model through MCP, supporting both OpenAI and Volcengine API formats with tools for creating, monitoring, and downloading videos.6-
- AlicenseAqualityBmaintenanceEnables 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.453 npmMIT
- AlicenseBqualityCmaintenanceEnables 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.2634MIT