我手上只有一張產品照片——一個霧面黑色精華液瓶,背景是純白色——但我需要在週末前為 TikTok 測試製作 10 支能讓人停下滑動的 UGC 廣告。拍攝 10 位創作者的成本約為 1,500–3,000 美元,且需要大約一週。我花了一個下午完成,API 呼叫費用約為 $25,而且每支影片中的瓶子都完全一致。
這套流程串接了兩個 ByteDance 模型:先使用 Seedream 5.0 Pro 將產品照片轉換成精緻的主視覺靜圖,再使用 Seedance 2.0 將靜圖製作成包含原生音訊的影片。我寫下這篇文章,是因為我找到的幾乎所有「Seedance UGC」指南都只介紹網頁遊樂場,然後就到此為止——沒有任何指南展示真正能讓你擴展規模的部分:以程式碼串接兩個模型的 API,從一張來源照片產出 10 種變體。以下所有操作都透過 GPTProto 執行;它以同一個金鑰和同一個餘額託管兩個模型,因此你不必在流程中途管理兩家供應商。
為什麼要使用兩個模型,而不是一個?
Seedance 2.0 可以直接從文字生成影片,那為什麼要先製作圖片?因為廣告成效取決於產品是否準確,而文字提示無法可靠地重現你的實際瓶子、標籤和包裝。解決方法是先將真實產品鎖定在一張靜圖中,再讓這張完全相同的靜圖動起來。
Seedream 5.0 Pro 負責圖片部分。它是文字生成圖片及圖片編輯模型,會在渲染前規劃版面,能以 14 種語言在圖片上正確呈現文字,並接受最多 10 張參考圖片,因此會將真實包裝視為基準。Seedance 2.0 負責影片部分——這是 ByteDance 的文字/圖片/參考素材生成影片模型,可在同一次生成中產生同步音訊,而不是事後再拼接旁白(架構與原生音訊的說明收錄於 arXiv 論文)。只有 Seedance 2.0 的參考素材生成影片模式,能讓你交給它 Seedream 靜圖並說:「保留這個產品,圍繞它建立場景。」
一張照片輸入,十支影片輸出,而且產品在每支影片中都保持一致。這就是整個概念。

雙模型流程:Seedream 5.0 Pro 製作靜圖,Seedance 2.0 讓它動起來。
決定這套方法是否值得採用的成本計算
我先把數字並排列出,因為這正是合理化建立這套流程的關鍵數據。
| 10 支完成的 15 秒直式廣告 |
這套流程(API) |
10 支真人創作者影片 |
| 主視覺圖片 |
$0.081(一張 2K Seedream 靜圖,可重複使用) |
每次拍攝已包含 |
| 10 支影片 |
約 $24.95(10 × 720p、15 秒 Seedance) |
— |
| 10 支廣告總計 |
約 $25 |
$1,500–3,000 |
| 付費廣告使用權 |
已包含 |
+25–30% |
| 製作時間 |
一個下午 |
約一週 |
換算下來,每支完成的 15 秒廣告約為 $2.58。價格取自 GPT Proto 自有的 Seedream 5.0 Pro 與 Seedance 2.0 頁面(比 ByteDance 牌價低 10%);真人創作者的費用範圍則來自 2026 年 UGC 費率調查。我的看法——這是判斷,不是經測量的結論——是省錢甚至不是最大的優勢。真正的優勢是製作變體變得免費:讓一張產品照片搭配 10 個提示詞執行,就能取得 10 個角度進行 A/B 測試,而不是只有一個。
你需要準備的事項
一個附有 API 金鑰的 GPT Proto 帳戶(以電子郵件註冊,不需要電話或企業驗證)、安裝 requests 的 Python 3、一張託管於公開 URL 的產品照片,以及約 30 美元的餘額,用來完整執行十支廣告批次幾次。從控制面板取得金鑰——格式看起來像 sk-...——並按照文件所示,將它原樣貼入 Authorization 標頭值,不要加上 Bearer 前綴。
步驟 1 — 將產品照片轉成主視覺靜圖
兩個模型都是非同步執行:你先 POST 工作,取得預測 id,接著輪詢 GET /api/v3/predictions/{id}/result,直到 status 變成 succeeded。以下是可在兩個步驟中重複使用的小型輪詢器。
import requests, json, time
API_KEY = "sk-xxxxx" # paste your key directly, no "Bearer"
HEADERS = {"Authorization": API_KEY, "Content-Type": "application/json"}
BASE = "https://gptproto.com/api/v3"
def submit(path, payload):
r = requests.post(f"{BASE}/{path}", headers=HEADERS, data=json.dumps(payload))
r.raise_for_status()
return r.json()["data"]["id"]
def wait(pred_id, every=5, timeout=600):
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(f"{BASE}/predictions/{pred_id}/result", headers=HEADERS)
data = r.json()["data"]
if data["status"] == "succeeded":
return data["outputs"][0]
if data["status"] in ("failed", "expired"):
raise RuntimeError(f"job {data['status']}: {data.get('error')}")
time.sleep(every)
raise TimeoutError("polling timed out")
現在,使用 image-edit 任務,將這張產品照片放入場景中。請像撰寫設計簡報一樣撰寫提示詞,而不是圖說——先寫構圖規則,最後再寫風格形容詞,並直接指定光線,因為這正是 Seedream 寫實感的來源。控制在約 30–80 個字,並使用直式 2K 尺寸,讓靜圖符合 9:16 影片畫面。
product_photo = "https://your-cdn.com/serum-bottle.png" # the one photo you start with
edit_prompt = (
"Place this matte-black serum bottle on a wet bathroom counter, "
"soft window light from the left, water droplets on the glass, "
"shallow depth of field, photoreal product photography, keep the label exactly as shown"
)
img_id = submit(
"bytedance/dola-seedream-5-0-pro-260628/image-edit",
{"prompt": edit_prompt, "images": [product_photo], "size": "1600*2848"},
)
hero_image_url = wait(img_id)["url"] # feed this into Seedance next
print(hero_image_url)
如果你先在 Shell 中測試,同一個呼叫也可以寫成 cURL:
curl --location 'https://gptproto.com/api/v3/bytedance/dola-seedream-5-0-pro-260628/image-edit' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"Place this matte-black serum bottle...","images":["https://your-cdn.com/serum-bottle.png"],"size":"1600*2848"}'
請注意,size 格式使用星號(1600*2848),而不是 x。一張 2K 圖片的費用為 $0.081;如果只是進行概念測試,同一張圖片使用 1K(832*1248)則降至 $0.0405。第一張參考圖片免費;額外參考圖片每張 $0.0027,最多 10 張。
步驟 1:同一個瓶子,從簡單棚拍移入適合 UGC 的場景。
步驟 2 — 撰寫 UGC 提示詞(大多數廣告在這裡失敗)
Seedance 廣告提示詞應該是鏡頭簡報,而不是描述,因為模型會在同一次生成中同時製作畫面與聲音。請分成四個層次:主體與場景(至少描述三個具體視覺細節)、前 0–3 秒的開場鉤子、4–10 秒的產品展示時刻,以及乾淨的結尾畫面。口語台詞請放在雙引號中並保持簡短——冗長獨白容易造成口型同步偏移。
幾乎所有人都會遇到的陷阱是過度精緻化。人們直覺會提示電影感燈光和戲劇化鏡頭移動;但在 UGC 動態消息中,這會顯得很假。可信的影片應該像真人用手機在浴室拍攝的內容——略帶手持感、自然窗光、沒有棚拍般的光澤。也不要在同一個提示詞中塞入兩個概念:每次生成只使用一種格式。

每個 Seedance 2.0 UGC 提示詞都需要的四個層次。
步驟 3 — 使用 Seedance 2.0 讓主視覺靜圖動起來
這就是網頁遊樂場指南會跳過的步驟。使用 reference-to-video,並將 Seedream URL 傳入 images——這能讓畫面中的產品保持完全一致。讓 duration 符合提示詞中的時間安排,TikTok 和 Reels 設定為 9:16,並保持 generate_audio 開啟,讓對話以原生方式生成。
video_prompt = (
"UGC-style phone video, vertical, a woman in her late twenties in a bright bathroom "
"holding the serum bottle to camera with easy creator energy, slightly handheld, "
"natural window light. She says: \"Okay this one actually cleared my skin in a week.\" "
"Cut to a macro close-up of the dropper. Ends on the bottle held up, label facing camera."
)
vid_id = submit(
"bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{
"prompt": video_prompt,
"images": [hero_image_url], # product consistency comes from here
"aspect_ratio": "9:16",
"duration": 15,
"resolution": "720p",
"generate_audio": True,
"seed": -1,
},
)
print(wait(vid_id, every=10)["url"]) # video takes longer -- poll less often
curl --location 'https://gptproto.com/api/v3/bytedance/dreamina-seedance-2-0-260128/reference-to-video' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"UGC-style phone video...","images":["HERO_IMAGE_URL"],"aspect_ratio":"9:16","duration":15,"resolution":"720p","generate_audio":true}'
如果你想在沒有完整參考系統的情況下,讓單一開場畫面動起來,image-to-video 只需使用一個 image 欄位,而不是 images 陣列,其他行為相同。
步驟 4 — 批次產生 10 種變體
使用程式碼的回報就在這裡:製作 10 個角度與製作 1 個角度所需的工作量相同。針對同一張主視覺靜圖,以 10 個不同提示詞重複呼叫影片 API,全部提交後再收集 URL。
angles = [
"...opens on a splash of water, energetic hook, 'wait for it'...",
"...opens mid-sentence, skeptical creator tone, 'I did not expect this'...",
"...opens on the product already in hand, calm morning-routine demo...",
"...street-style, walking and talking, quick to-camera line...",
"...close friend recommendation, sitting on the bathroom floor...",
# ...ten total, one format each
]
jobs = [
submit("bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{"prompt": p, "images": [hero_image_url], "aspect_ratio": "9:16",
"duration": 15, "resolution": "720p", "generate_audio": True})
for p in angles
]
clips = [wait(j, every=10)["url"] for j in jobs]
for i, url in enumerate(clips, 1):
print(f"ad {i}: {url}")

一張主視覺靜圖,十個廣告角度——這就是步驟 4 的批次成果。
Seedance 2.0 輸出規格與價格
| 解析度 |
比例 |
時長 |
每次執行價格 |
| 480p |
16:9 |
4 秒 |
$0.3094 |
| 720p |
16:9 |
15 秒 |
$2.4948 |
| 1080p |
16:9 |
15 秒 |
$6.1746 |
| 4K |
16:9 |
15 秒 |
$12.83 |
解析度包含 480p/720p/1080p/4K,時長為 4–15 秒,支援六種畫面比例(9:16、1:1、16:9、4:3、3:4、21:9)。720p 的 16:9 輸出為 1280×720,1080p 則為 1920×1088。若用於付費社群廣告,我會選擇 720p 9:16——這是成本與品質的最佳平衡點,而且動態消息壓縮通常會吃掉大部分 1080p 的差異。完整表格請參閱 Seedance 2.0 模型頁面 和 模型頁面。
真正容易造成問題的錯誤
時長不匹配是最容易被忽略的問題:如果提示詞按照 15 秒安排,但你讓 duration 保持預設值 5,模型就會加速或截斷場景。請讓兩者一致。API 回傳的 503 代表內容政策拒絕(會以 400 回傳)——請重新措辭並提交,而不是盲目重試。403 通常表示餘額不足,而不是金鑰錯誤。如果影片看起來像高級奢華商業廣告,對 UGC 版位來說也不算成功——請將提示詞調整回「用手機拍攝」的方向。
發布前檢查
請將每個輸出視為廣告草稿,而不是完成品。在投入廣告預算前,檢查產品聲稱、你上傳照片的影像權利、平台廣告政策,以及適用於你所在市場的 AI 揭露規範。AI 能消除製作成本,但不能免除你對廣告內容負責。
本文中的每張圖片——包括封面和四張插圖——都是使用 Seedream 5.0 Pro 生成的,總成本約為 $0.24。相同流程,相同金鑰。