透過一張清晰的產品圖片、Claude Code 和 AIHubMix API,您可以在 Seedream 中生成角色參考,將其註冊為虛擬人物資產,並使用 Seedance 創建 AI 產品廣告。
本教程基於一個真實的蘆薈噴霧活動,包含項目結構、配置、命令和完整的視頻提示。目標輸出是一個 20 秒、720p、9:16 垂直廣告 ,內含 AI 生成的人物和場景。
Claude Code 和 AIHubMix 支持整個工作流程。Claude Code 讀取項目簡報、修訂提示並組織執行。AIHubMix 提供一個模型入口點,使得圖像和視頻生成可以在同一項目內運行。
模型 ID、參數和錯誤處理來自於 2026 年 9 月 16 日的項目快照。在重用它們之前,請檢查當前的 API。命令使用包含的 flow.py ,並必須從項目根目錄運行。下載完整的啟動包
下載代碼、提示、配置和示例圖片
解壓後,進入 seedance-starter 目錄。該包包括 flow.py、兩個模式快照、五個提示文件、產品圖片和三個參考圖片。Python 腳本僅使用標準庫。
- 從視頻階段開始: 使用三個包含的參考,配置您的密鑰,並從第 4 步開始。
- 從您自己的產品開始: 替換產品圖片和提示細節,將包含的參考圖片移出
assets/,並從第 3 步開始。
將 .env.example 複製到 .env 並添加您自己的 API 密鑰。您的帳戶需要訪問相關模型、任何所需的異步任務權限和足夠的配額。API 生成會產生使用費用。
1. 準備產品圖片和項目
示例產品為 Nature Republic 蘆薈噴霧。在調整工作流程時,請更新圖片、產品描述和使用動作。
| 文件 | 用途 |
|---|---|
assets/product.png | 原始產品圖片 |
prompts/prompt-a.txt | 主要角色肖像提示 |
prompts/prompt-b.txt | 角色持有產品的提示 |
prompts/prompt-c.txt | 產品使用提示 |
prompts/prompt-video.txt | 視頻時間線、相機和音頻要求 |
prompts.json | 尺寸、持續時間、參考依賴和提示路徑 |
flow.py | API 請求、資產註冊、輪詢和下載 |
seedream.schema.json, seedance.schema.json | 緩存的 API 模式快照 |
Claude Code 幫助讀取項目簡報並修訂配置和提示。 flow.py 通過 AIHubMix 發送實際請求。
為什麼 AIHubMix 適合這個工作流程
AI 產品廣告工作流程通常需要不止一個模型。一個圖像模型創建人物和產品參考;一個視頻模型創建運動和相機行為。AIHubMix 覆蓋大多數主流模型,因此您可以通過一個 API 服務按任務選擇模型,而無需為每個提供者維護單獨的帳戶、身份驗證和請求入口。
AIHubMix 還連接到多個供應商,並自動選擇可用的低延遲路徑。這可以減少單一供應商的不穩定性對必須按順序完成圖像生成、資產處理和視頻生成的工作流程的影響。模型的可用性、路由和響應時間仍然取決於當前的服務條件。
在項目根目錄中創建 .env ,或在您的環境中提供相同的變量:
AIHUBMIX_API_KEY=replace_with_your_api_key
該項目通過 .gitignore 排除了 .env 。僅分享變量名稱和示例,切勿分享真實密鑰。

整個工作流程始於一張清晰的產品圖片。
2. 設定輸出目標並將圖像與視頻參數分開
相關的 prompts.json 部分如下。在編輯實際文件時,請保留現有的 stills 數組和其他字段。
{
"size": "1080x1920",
"aspect_ratio": "9:16",
"duration": 20,
"resolution": "720p",
"generate_audio": true,
"video_prompt_file": "prompts/prompt-video.txt"
}
size 屬於圖像生成。 aspect_ratio、 duration、 resolution 和 generate_audio 屬於視頻生成。該腳本構建單獨的請求,而不是將整個配置對象發送到兩個端點。
該項目使用這些模型 ID:
- Seedream:
doubao-seedream-5-0-pro-260628 - Seedance:
doubao-seedance-2-5-260628
捆綁的模式快照顯示圖像端點接受 size,而視頻端點接受 aspect_ratio。混合它們會導致拒絕。 flow.py 在發送請求之前檢查緩存的模式屬性,但這不是完整的參數驗證。
3. 按順序生成三個角色參考
每個圖像有不同的角色,後面的圖像依賴於前面的圖像:
| 參考 | 內容 | 輸入 |
|---|---|---|
| A: 角色肖像 | 建立面部、頭髮、服裝、房間和燈光 | 僅在此示例中的文本提示 |
| B: 持有產品 | 同一個人持著瓶子,標籤面向相機 | 產品圖片 + A |
| C: 使用產品 | 同一個人按下噴霧泵 | 產品圖片 + B |
這些提示重複角色細節並描述產品的形狀、顏色、標籤佈局和自然處理。
運行:
python3 flow.py stills
結果保存為 assets/frame-01.jpg 、 frame-02.jpg 和 frame-03.jpg。檢查角色一致性、包裝真實性和使用動作的真實性。
該腳本會跳過現有文件。 如果您更改了提示,請備份並移動相應的輸出,然後再運行。更改 A 可能還需要重新生成 B 和 C。
這些參考確立了角色身份、產品展示和產品使用。
4. 托管圖片並註冊虛擬肖像資產
啟動包中不包含作者帳戶的資產 ID。請在您自己的帳戶中註冊參考。
本項目使用公共圖像 URL 進行註冊。源工作流程使用 GitHub 原始 URL 鎖定到提交 SHA,但任何直接返回圖像而不需要身份驗證的託管都可以使用。
GitHub /blob/ URL 返回一個 HTML 頁面,無法用作圖像 URL。
用您上傳文件的實際位置替換此佔位符主機:
IMAGE_BASE='https://your-public-image-host.example/campaign'
python3 flow.py check "$IMAGE_BASE/frame-01.jpg" "$IMAGE_BASE/frame-02.jpg" "$IMAGE_BASE/frame-03.jpg"
python3 flow.py assets "$IMAGE_BASE/frame-01.jpg" "$IMAGE_BASE/frame-02.jpg" "$IMAGE_BASE/frame-03.jpg"
check 驗證 HTTP 200 和圖像 Content-Type。 assets 創建或重用一個 virtual_portrait 資產組,註冊每個圖像,等待其變為 active ,並將資產 ID 寫入 state.json。
這一步來自於項目中的實際失敗:將寫實角色 URL 直接傳遞給視頻端點返回了 doubao_real_person_required。本次活動中的人物是 AI 生成的,因此 virtual_portrait 是正確的分類。真實人物照片必須遵循相應的驗證過程,並且不得標記為虛擬。
所有在一次視頻請求中使用的資產應屬於同一組。

參考已生成,所有三個資產均為活動狀態;當截取此屏幕截圖時,視頻任務仍在運行。
5. 將視頻提示寫成帶有相機限制的時間線
最終項目提示將一個連續的 20 秒鏡頭分為四個階段:
| 時間 | 角色動作 | 產品位置 |
|---|---|---|
| 0–5 秒 | 看著相機並展示瓶子 | 在她的臉旁,標籤面向相機 |
| 5–10 秒 | 舉起瓶子並按下噴霧泵 | 保持在畫面內 |
| 10–15 秒 | 閉上眼睛,感受噴霧落下 | 畫面的下三分之一 |
| 15–20 秒 | 睜開眼睛,再次展示產品 | 回到她的臉旁,標籤面向相機 |
早期的結果將相機推得太近,導致產品消失。因此,最終提示限制了移動到中近距離拍攝,要求產品保持可見,並要求在前後三秒內標籤清晰可讀。
以下是完整的 prompts/prompt-video.txt。對於其他產品,請更新品牌、包裝描述和使用動作。這些指示是生成目標,仍需進行輸出審查。
一個連續的 20 秒垂直美容廣告鏡頭,沒有剪接,在陽光明媚的極簡化梳妝台角落。
0-5s: 同一位 24 歲的東亞女性穿著一件超大號的鼠尾草綠亞麻襯衫,裡面是白色的肋紋背心,站在梳妝台旁,將透明的淺綠色 Nature Republic 蘆薈 92% 舒緩噴霧放在她的臉頰旁,標籤面向相機且完全清晰可見。她面帶溫暖、輕鬆的微笑看著相機,並稍微轉動瓶子,讓標籤捕捉到晨光。
5-10s: 她將瓶子舉到眼睛水平以上,按下細霧噴霧泵。一道柔和的蘆薈霧噴灑在她的臉上,隨著微小水滴的閃爍而捕捉到光線。
10-15s: 她閉上眼睛,微微抬起下巴,露出滿足的微笑,隨著霧的落下,微小的水滴停留在她的顴骨和額頭上。整個過程中,瓶子保持在畫面的下三分之一。
15-20s: 她睜開眼睛,將瓶子再次放在臉旁,標籤正對相機,並保持最後一個平靜的目光看向鏡頭。
相機:從胸部以上的框架慢慢推進到中近距離的框架。不要推過中近距離拍攝。產品必須在整個拍攝過程中保持在畫面內,並且標籤必須在前後三秒內清晰可讀。
外觀:柔和的擴散晨光從相機左側照射,真實的皮膚質感,皮膚上有真實的水分,霧呈現為真實拍攝的噴霧,而不是數字顆粒,優質的 K-beauty 廣告。保持產品包裝、顏色、材料、標籤佈局和標籤文本與參考圖片完全一致;不要重新設計或重新標記產品。沒有文本覆蓋,沒有標題,沒有水印。
音頻:安靜明亮的房間,一聲柔和的短噴霧聲,一聲輕柔的呼吸。沒有音樂,沒有旁白。
音頻生成已啟用,但提示僅請求房間音調、一聲噴霧聲和一聲輕柔的呼吸——沒有音樂或旁白。
6. 生成並保存視頻
在資產註冊後,提交 asset:// 參考。此命令讀取保存的 ID,並將每個 ID 作為單獨的參數傳遞:
python3 - <<'PYCODE'
import json
import subprocess
import sys
from pathlib import Path
state = json.loads(Path("state.json").read_text())
refs = ["asset://" + asset_id for asset_id in state["asset_ids"]]
subprocess.run([sys.executable, "flow.py", "video", *refs], check=True)
PYCODE
使用參數列表還可以避免源項目中的 zsh 問題,其中多個 ID 存儲在一個普通字符串中,可能會作為一個無效參數傳遞給腳本。
該腳本保存視頻任務 ID,輪詢直到 completed ,並將輸出下載到 out/video.mp4。另一個下載可能會覆蓋該路徑,因此請備份您想要比較的版本。
使用以下命令恢復現有任務或重新下載其結果:
python3 flow.py status
如果創建響應丟失,列出最近的任務並恢復相關 ID:
python3 flow.py tasks
python3 flow.py status VIDEO_TASK_ID
在創建另一個任務之前尋找現有任務可以防止意外的重複生成。
7. 審查輸出並迭代
源項目保留 video-v1-10s.mp4 和最終的 video.mp4。第一個版本僅持續 10 秒,未能展示足夠的產品使用,因此工作流程經歷了第二次提示迭代。
根據以下檢查表審查每個結果:
- [ ] 持續時間、解析度和長寬比與目標匹配。
- [ ] 角色的面部、服裝和場景保持一致。
- [ ] 產品保持可見,並且在開始和結束時標籤可讀。
- [ ] 處理和噴霧動作與產品的實際使用相符。
- [ ] 瓶子的形狀、包裝和文本沒有明顯變化。
- [ ] 相機沒有移動得太近,音頻與請求相符。
如果持續時間不正確,請檢查配置和實際請求。如果產品離開畫面,請加強相機限制。如果使用動作太短,請更明確地分配時間和行為。僅編輯 prompts/prompt-video.txt 不需要重新生成參考圖像;僅在視覺參考必須更改時重新生成並註冊它們。
常見問題
為什麼看起來正確的模型名稱會返回 404?
縮短的 Seedream 名稱在源項目中返回了 model_not_found。請使用當前端點接受的完整 API 模型 ID,而不是假設市場展示名稱也是 API 標識符。
為什麼我可以在瀏覽器中打開一個圖像,但仍然無法註冊它?
確認 URL 返回的是圖像本身,而不是 HTML、分享頁面或登錄頁面。在註冊之前使用 python3 flow.py check URL... 。
為什麼更改提示不會改變參考圖像?
stills 會跳過現有文件。備份並移動任何需要重新生成的圖像,然後檢查下游參考是否也應重新生成。
HTTP 200 是否意味著視頻已完成?
不。該腳本根據任務的 status 分支,僅在任務達到 completed 後下載。
開始您的第一個版本
準備一張產品圖片,配置 AIHubMix 訪問,並選擇圖像和視頻模型。然後讓 Claude Code 調整產品描述和提示。生成三個參考,審查並註冊它們,創建視頻,並使用檢查表決定下一次迭代。
當未來的項目需要另一個模型時,保持相同的文件結構和工作流程,然後更新 AIHubMix 模型選擇和模型特定參數。這就是對於使用多個 AI 模型的內容團隊來說,統一 API 服務的實際價值:模型可以根據任務變化,而工作流程仍然可重用。



