
本文目錄
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 服務無法讀取你電腦上的 ./character.png。客戶端必須先呼叫 prepare_image_upload,再按照返回的 HTTP 方法和 Headers 傳輸準確的檔案位元組,最後呼叫 complete_image_upload。只有完成上傳後得到的 file_id 才能放進產生請求。
這次完成上傳後,服務端返回的 875,625 位元組和 SHA-256 都與本地原圖一致。臨時上傳地址和帳戶所屬的檔案 ID 沒有進入公開文章或下載包。
給 MCP 客戶端一條邊界清楚的任務
比較實用的做法,是在動作要求之外,把消費和檔案交付邊界也寫進提示詞:
使用 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 可以這樣連線:
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 屬於帳戶資料,因此下面使用佔位符;其他參數與本次成功任務一致:
{
"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:
{
"idempotency_key": "ONE_PERSISTED_LOGICAL_OPERATION_KEY",
"quote_id": "FRESH_QUOTE_ID",
"max_credits": 36,
"request": {"...": "與上方完全相同的請求"}
}
不要把本文的 36 直接複製成另一個任務的預算,應使用使用者真正看過並批准的當時報價。建立之前要儲存請求和冪等鍵;如果響應不確定,恢復原任務,而不是偷偷換一個 Key 再建立一次付費操作。MCP 支出保護詳細說明了這條邊界。
輪詢到終態,再下載真實位元組
generate_animation 返回的是非同步任務,不是成品檔案。我們持續查詢同一個任務,它依次經過 video_generation 和 animation_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 影格中:
開啟動態棋盤格預覽,可以連續檢視全部 16 個最終影格。
把 Sprite Sheet 和 JSON 放在一起驗收
最終精靈圖是一個 4 × 4 網格。JSON 記錄了每一格的矩形、源尺寸和持續時間,因此遊戲或構建工具不需要只憑圖片猜測切片佈局。
實際檔案檢查結果如下:
- 三份原始下載檔案的位元組數都與 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_id 或 max_credits 提供支出保護;API 使用 API Key 和自己文件中的預檢查流程,兩套鑑權與消費模型不要混用。
需要接入 Agent 工作流時,繼續檢視完整的 MCP 標準產生流程。如果想先在介面中製作和檢查自己的角色動畫,可以開啟 AnimGen 工作台。

