跳转到正文
全部教程English

MCP 动画生成

如何用 MCP 生成透明角色动画:从图片到下载

用 AnimGen MCP 查询模型、上传角色 PNG、确认报价、生成透明动画,并下载带 JSON 元数据的精灵图。

AnimGen更新于 13 分钟阅读
AnimGen MCP 将透明女剑士 PNG 转换为 16 帧透明精灵图的真实工作流
本文目录

AI 助手告诉你“任务已进入队列”,或者贴出一个临时下载链接,都不等于动画已经交付。一次真正可用的 MCP 工作流,需要传输真实图片字节、生成前确认费用、等待任务进入终态、保存全部目标文件,并检查下载后的像素和元数据。

这篇文章记录了 2026 年 9 月 11 日由 Codex 完成的一次 AnimGen 生产环境 MCP 实测:从一张透明角色 PNG 开始,拿到源视频、Sprite Sheet 和 JSON 元数据。视觉复核随后发现第一版精灵图的宽高比有误,因此公开样例改为使用同一份下载 MP4 重新导出的正确版本,没有再次调用生成模型,也没有额外消耗积分。你可以直接下载完整实测包,检查最终文件。

本次实测结果

项目 本次实际结果
MCP 客户端 Codex 桌面端,通过 OAuth 连接 AnimGen 生产远程服务
输入 1073 × 1466 RGBA PNG,875,625 字节
模型 先实时调用 list_models,再选择 Seedance 2.0 Fast
视频请求 4 秒、480p、自适应比例、自动 Alpha Key 工作流
导出请求 16 帧透明动画,每帧 256 × 256,Sprite Sheet PNG + JSON
报价 36 AnimGen 积分:视频生成 36,本次导出 0
最终计费 扣除 36,占用 0,退回 0
任务结果 2 分 23 秒后进入 succeeded,没有自动付费重试
生产任务产物 MP4 源视频、1024 × 1024 RGBA 精灵图、16 帧 JSON 元数据
复核后的最终样例 保留同一份源 MP4 和 JSON,并从该 MP4 等比重新导出 1024 × 1024 精灵图

36 积分只是这次具体请求当时的真实报价,不是永久价格。模型和费用都以当前账户返回为准,每次新生成都应重新查询和报价。

从真正带 Alpha 的图片开始

本次输入是公开的像素女剑士 PNG。它确实是 RGBA 文件:Alpha 范围为 0–255,四角完全透明,画布中大约 27% 的像素属于可见角色。

本次 MCP 实测实际上传的透明像素女剑士图片

远程 MCP 服务无法读取你电脑上的 ./character.png。客户端必须先调用 prepare_image_upload,再按照返回的 HTTP 方法和 Headers 传输准确的文件字节,最后调用 complete_image_upload。只有完成上传后得到的 file_id 才能放进生成请求。

这次完成上传后,服务端返回的 875,625 字节和 SHA-256 都与本地原图一致。临时上传地址和账户所属的文件 ID 没有进入公开文章或下载包。

给 MCP 客户端一条边界清楚的任务

比较实用的做法,是在动作要求之外,把消费和文件交付边界也写进提示词:

text
使用 AnimGen MCP,把 ./character.png 做成可用于 2D 游戏的透明原地行走动画。

先调用 list_models,确认 Seedance 2.0 Fast 当前支持首帧输入、4 秒和 480p。
上传 PNG 的真实字节,不能把本地路径当成已经上传的图片。

使用自动 Alpha Key 模式,导出 16 帧透明 Sprite Sheet 和对应 JSON,
每帧尺寸为 256 × 256。

调用 generate_animation 之前,先向我展示完整请求和当前积分报价,等我明确批准;
不得超过我批准的金额。保存一个固定的幂等键,只轮询同一个任务直到终态,
然后下载并检查全部产物,不要暴露临时签名地址。

它能避免三种常见的“假完成”:只提到本地路径却没有传文件、把 OAuth 授权误当成消费批准,以及拿到签名 URL 却没有真正保存文件。

先连接并做只读验证

AnimGen 的生产 MCP 地址是 https://api.animgen.com/mcp,使用 Streamable HTTP 和 OAuth。这里不应该填写 AnimGen API Key。

Codex CLI 可以这样连接:

bash
codex mcp add animgen --url https://api.animgen.com/mcp
codex mcp login animgen

Codex 官方 MCP 文档说明了远程 HTTP 服务和 OAuth 登录;AnimGen 的客户端接入指南还列出了当前端点及其他兼容客户端。

OAuth 完成后,先用空参数调用 list_models。只要能返回结构化模型列表,就说明只读连接可用,而且不会消耗生成积分。本次实时结果显示,Seedance 2.0 Fast 支持首帧输入、最短 4 秒、480p,以及下方使用的 adaptive 比例。

构造一份不再偷偷变化的请求

上传后的 file_id 属于账户数据,因此下面使用占位符;其他参数与本次成功任务一致:

json
{
  "input": {
    "first_frame": {
      "type": "file",
      "file_id": "YOUR_COMPLETED_UPLOAD_FILE_ID"
    }
  },
  "prompt": "Static camera. The pixel-art swordswoman faces right and walks in place. Alternate the legs clearly, swing the arms naturally, and let the hair and scarf move slightly. Keep the original character design, pixel-art style, full-body framing, scale, and screen position. Do not move the camera or let the character leave the frame.",
  "video": {
    "model": "volcengine_seedance:doubao-seedance-2-0-fast-260128",
    "duration_seconds": 4,
    "resolution": "480p",
    "ratio": "adaptive",
    "transparency": {
      "mode": "alpha_key",
      "key_selection": "auto"
    }
  },
  "selection": {"mode": "full"},
  "export": {
    "frame_count": 16,
    "output_width": 256,
    "output_height": 256,
    "output_formats": ["spritesheet", "spritesheet_json"],
    "transparent": {"enabled": true}
  }
}

两个透明设置都不能漏:video.transparency.mode 要求视频阶段使用 Alpha Key 工作流,export.transparent.enabled 则要求导出阶段产生 RGBA 资产。少写一个,表达的就不是同一项任务。

这里保留模型 ID,是为了准确记录本次测试。新任务应使用当前 list_models 实际返回的 ID,不能假定模型目录永远不变。

先报价,再批准付费生成

我们先把上述请求交给 quote_animation。实际报价为 36 积分:4 秒视频生成占 36,本次选择的 16 帧透明导出增加 0 积分。

完整请求和金额展示给用户、获得 36 积分上限的明确批准后,客户端再次报价,确认价格没有上涨,再调用 generate_animation

json
{
  "idempotency_key": "ONE_PERSISTED_LOGICAL_OPERATION_KEY",
  "quote_id": "FRESH_QUOTE_ID",
  "max_credits": 36,
  "request": {"...": "与上方完全相同的请求"}
}

不要把本文的 36 直接复制成另一个任务的预算,应使用用户真正看过并批准的当时报价。创建之前要保存请求和幂等键;如果响应不确定,恢复原任务,而不是偷偷换一个 Key 再创建一次付费操作。MCP 支出保护详细说明了这条边界。

轮询到终态,再下载真实字节

generate_animation 返回的是异步任务,不是成品文件。我们持续查询同一个任务,它依次经过 video_generationanimation_export,最终进入 succeeded。在两个导出文件完成之前,先出现了一份中间 MP4。

客户端随后对每项产物调用 download_asset,使用临时地址保存文件,但没有向下载请求转发 OAuth 或 API 凭据。任何签名 URL 都没有复制到文章和压缩包中。

保存文件 实际检测结果
source-video.mp4 1,950,417 字节;H.264、560 × 752、24 FPS、97 帧、4.041667 秒
第一版 spritesheet.png 1,005,811 字节;1024 × 1024 RGBA PNG;视觉复核发现帧画面变形后废弃
最终 spritesheet.png 809,336 字节;1024 × 1024 RGBA PNG;从同一份源 MP4 等比缩放并透明补边后重新导出
spritesheet.json 6,790 字节;16 条帧记录,每帧 256 × 256、持续 253 ms

源 MP4 带一层纯色键控背景,这是生成动画的中间素材,不是最终透明交付格式。

生成源视频中的一帧,展示透明导出前临时存在的纯色键控背景

真正的透明度位于最终导出的 PNG 帧中:

从修正后的 MCP 精灵图中抽取八个代表帧并显示在棋盘格背景上

打开动态棋盘格预览,可以连续查看全部 16 个最终帧。

把 Sprite Sheet 和 JSON 放在一起验收

最终精灵图是一个 4 × 4 网格。JSON 记录了每一格的矩形、源尺寸和持续时间,因此游戏或构建工具不需要只凭图片猜测切片布局。

从本次成功 MCP 任务源视频等比重新导出的 1024 × 1024 透明精灵图

实际文件检查结果如下:

  • 三份原始下载文件的字节数都与 MCP 资产信息一致;
  • 修正后的最终精灵图为 809,336 字节,并保持了源视频中的人物比例;
  • PNG 为 RGBA,所有帧的 Alpha 都同时包含 0 和 255;
  • 16 个帧图像彼此不同;
  • 每帧抽样的四角 Alpha 都为 0;
  • JSON 中 16 个矩形与 1024 × 1024 精灵图里的 256 × 256 单元格完全对应;
  • JSON 播放总长为 4.048 秒,与源视频相差不到 0.01 秒;
  • 任务只扣除一次已批准的 36 积分,没有遗留占用,也没有付费重试。

这些检查可以发现传输、打包和明显的透明度错误;最终是否可用,还是要把动作放进目标场景里看。

视觉复核发现并修正了宽高比问题

第一版导出通过了文件、Alpha、帧数和 JSON 布局检查,但画面看起来仍然不对:角色明显过宽、过矮。源视频尺寸是 560 × 752,而导出路径把每一帧直接压成了 256 × 256,人物的横向比例因此被放大了大约 34%。我们没有把这个“技术检查通过、视觉却不可信”的精灵图继续当作案例成品。

最终样例修正了透明导出路径,只对同一份真实下载 MP4 重新执行确定性的分帧和打包。每个视频帧先等比缩放为 191 × 256,再居中放进 256 × 256 的透明画布;左侧补 32 像素,右侧补 33 像素。修正后相对宽高比误差低于 0.2%,角色右侧的可见像素也至少保留了 33 像素安全空间。

修正后的 4 × 4 精灵图仍包含 16 个不同的 RGBA 帧,抽样四角全部透明,JSON 单元格布局和 4.048 秒播放总长都没有变化。因为复用了源视频,这次修正没有再次调用生成模型,最终费用仍然只有原先批准的 36 积分。

AnimGen 的输入画布仍然适合在生成阶段为角色留出更多活动空间;但它属于构图控制,不能代替导出阶段对宽高比的正确处理。

下载样例,或改用开放 API

MCP 实测下载包包含公开输入图、生产任务真实返回的源 MP4 和 JSON、修正后的最终精灵图、动态预览、分帧检查图、README,以及移除私密 ID 的请求模板。包内没有 OAuth Token、签名 URL、账户文件 ID、资产 ID、报价 ID、任务 ID 或幂等键。

如果生产架构里并不需要 AI 助手,也可以通过开放 API 完成类似流程,从图片到资产的 API 快速开始入手。MCP 使用 OAuth 工具,并能通过批准后的 quote_idmax_credits 提供支出保护;API 使用 API Key 和自己文档中的预检查流程,两套鉴权与消费模型不要混用。

需要接入 Agent 工作流时,继续查看完整的 MCP 标准生成流程。如果想先在界面中制作和检查自己的角色动画,可以打开 AnimGen 工作台

查看图片细节