Warum zwei Modelle statt einem?
Seedance 2.0 kann Videos direkt aus Text generieren. Warum also zuerst ein Bild erstellen? Weil die Leistung einer Anzeige von der Produktgenauigkeit abhängt und ein Text-Prompt deine tatsächliche Flasche, dein Etikett und deine Verpackung nicht zuverlässig reproduzieren kann. Die Lösung besteht darin, das echte Produkt zuerst in einem Standbild zu fixieren und anschließend genau dieses Bild zu animieren.
Seedream 5.0 Pro übernimmt den Bildteil. Es ist ein Text-zu-Bild- und Bildbearbeitungsmodell, das vor dem Rendern ein Layout plant, Text im Bild in 14 Sprachen mit korrekten Schriftzeichen schreibt und bis zu 10 Referenzbilder akzeptiert. Dadurch behandelt es deine echte Verpackung als Referenzgrundlage. Seedance 2.0 übernimmt den Videoteil — ByteDances Text-/Bild-/Referenz-zu-Video-Modell, das synchronisiertes Audio im selben Durchlauf generiert, statt nachträglich ein Voice-over darüberzulegen. Die Architektur und die Aussage zum nativen Audio findest du im arXiv-Paper. Nur der Referenz-zu-Video-Modus von Seedance 2.0 ermöglicht es, das Seedream-Standbild zu übergeben und zu sagen: „Behalte dieses Produkt bei und baue eine Szene darum herum.“
Ein Foto hinein, zehn Videos heraus – und das Produkt bleibt in allen konsistent. Das ist die ganze Idee.

Die Kette aus zwei Modellen: Seedream 5.0 Pro erstellt das Standbild, Seedance 2.0 animiert es.
Die Kostenrechnung, die entscheidet, ob es sich lohnt
Ich habe die Zahlen zuerst direkt gegenübergestellt, denn genau diese Kennzahl rechtfertigt den Aufbau der Pipeline.
| Zehn fertige vertikale 15-Sekunden-Anzeigen |
Dieser Workflow (API) |
Zehn Videos mit menschlichen Creatorn |
| Hero-Bild |
$0.081 (ein 2K-Seedream-Standbild, wiederverwendet) |
pro Dreh enthalten |
| 10 Videos |
~$24.95 (10 × 720p, 15 s Seedance) |
— |
| Gesamtkosten für 10 Anzeigen |
≈ $25 |
$1,500–3,000 |
| Nutzungsrechte für bezahlte Anzeigen |
enthalten |
+25–30% |
| Bearbeitungszeit |
ein Nachmittag |
~eine Woche |
Das entspricht etwa $2.58 pro fertiger 15-Sekunden-Anzeige. Die Preise stammen von GPT Protos eigenen Seiten zu Seedream 5.0 Pro und Seedance 2.0 (10 % unter der ByteDance-Preisliste); die Spanne für Menschen stammt aus UGC-Tarifumfragen von 2026. Meine Einschätzung – und das ist eine Bewertung, keine gemessene Aussage – lautet: Das Geld ist nicht einmal der größte Vorteil. Der eigentliche Gewinn besteht darin, dass Variationen kostenlos werden: Du lässt ein Produktfoto durch zehn Prompts laufen und erhältst zehn Blickwinkel zum A/B-Testen statt nur einen.
Was du brauchst
Ein GPT Proto-Konto mit API-Schlüssel (Anmeldung per E-Mail, keine Telefon- oder Unternehmensverifizierung), Python 3 mit requests, ein Produktfoto unter einer öffentlich erreichbaren URL und ungefähr 30 US-Dollar Guthaben, um den vollständigen Zehner-Batch ein paar Mal auszuführen. Hole den Schlüssel aus deinem Dashboard — er sieht etwa so aus: sk-... — und füge ihn genau wie in der Dokumentation gezeigt als reinen Wert des Authorization-Headers ein, ohne Bearer-Präfix.
Schritt 1 — Das Produktfoto in ein Hero-Standbild verwandeln
Beide Modelle arbeiten asynchron: Du sendest einen Job per POST, erhältst eine Prediction-id zurück und fragst anschließend mit GET /api/v3/predictions/{id}/result so lange ab, bis status den Wert succeeded hat. Hier ist ein kleiner Poller, den wir für beide Schritte wiederverwenden.
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")
Nimm nun das eine Produktfoto und platziere es mit dem image-edit-Task in einer Szene. Formuliere den Prompt wie ein Design-Briefing, nicht wie eine Bildunterschrift – nenne zuerst die Kompositionsregeln und zuletzt die Stiladjektive. Benenne die Lichtquelle direkt, denn darauf beruht Seedreams Realismus. Beschränke dich auf etwa 30–80 Wörter und verwende das Hochformat in 2K, damit das Standbild zu einem 9:16-Videoframe passt.
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)
Derselbe Aufruf in cURL, falls du zunächst in der Shell testen möchtest:
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"}'
Beachte, dass das size-Format ein Sternchen (1600*2848) und kein x verwendet. Ein 2K-Bild kostet 0,081 US-Dollar; derselbe Shot in 1K (832*1248) kostet bei schnellen Konzepttests nur 0,0405 US-Dollar. Das erste Referenzbild ist kostenlos; zusätzliche Referenzen kosten jeweils 0,0027 US-Dollar, bis zu 10.
Schritt 1: dieselbe Flasche, aus einer schlichten Studioaufnahme in eine UGC-taugliche Szene versetzt.
Schritt 2 — Den UGC-Prompt schreiben (hier scheitern die meisten Anzeigen)
Ein Seedance-Anzeigen-Prompt ist ein Shot-Briefing, keine Beschreibung, denn das Modell erzeugt Bild und Ton in einem Durchlauf. Strukturiere ihn in vier Ebenen: Motiv und Szene (beschreibe Creator oder Produkt mit mindestens drei konkreten visuellen Details), Hook in den ersten 0–3 Sekunden, Produktmoment bei 4–10 Sekunden und ein sauberes Schlussbild. Setze gesprochene Zeilen in doppelte Anführungszeichen und halte sie kurz – lange Monologe bringen die Lippen-Synchronität aus dem Takt.
Die Falle, in die fast alle geraten, ist übermäßige Perfektion. Der Impuls, nach filmischer Beleuchtung und einer dramatischen Kamerabewegung zu fragen, wirkt in einem UGC-Feed unecht. Ein glaubwürdiger Clip sollte aussehen, als hätte ihn eine echte Person mit dem Smartphone in ihrem Badezimmer aufgenommen – leicht aus der Hand, natürliches Fensterlicht, kein Studio-Glanz. Packe außerdem nicht zwei Ideen in einen Prompt: pro Generierung ein Format.

Die vier Ebenen, die jeder Seedance-2.0-UGC-Prompt benötigt.
Schritt 3 — Das Hero-Standbild mit Seedance 2.0 animieren
Diesen Schritt überspringen die Playground-Anleitungen. Verwende reference-to-video und übergib die Seedream-URL in images – so bleibt dein exaktes Produkt im Bild. Stimme duration auf das Timing in deinem Prompt ab, setze für TikTok und Reels 9:16 und lasse generate_audio aktiviert, damit der Dialog nativ gerendert wird.
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}'
Wenn du lieber ein einzelnes Startbild ohne das vollständige Referenzsystem animieren möchtest, verwendet image-to-video statt des Arrays images ein einzelnes Feld image und funktioniert ansonsten gleich.
Schritt 4 — Die zehn Variationen als Batch ausführen
Das ist der Vorteil, wenn du den Prozess als Code ausführst: Zehn Blickwinkel erfordern genauso viel Aufwand wie einer. Schleife den Videoaufruf mit zehn verschiedenen Prompts über dasselbe Hero-Standbild, sende sie alle ab und sammle anschließend die URLs.
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}")

Ein Hero-Standbild, zehn Anzeigen-Winkel – der Batch aus Schritt 4.
Ausgabeformate und Preise von Seedance 2.0
| Auflösung |
Seitenverhältnis |
Dauer |
Preis / Durchlauf |
| 480p |
16:9 |
4 s |
$0.3094 |
| 720p |
16:9 |
15 s |
$2.4948 |
| 1080p |
16:9 |
15 s |
$6.1746 |
| 4K |
16:9 |
15 s |
$12.83 |
Die Auflösungen reichen von 480p/720p/1080p/4K, die Dauer von 4–15 Sekunden, und es gibt sechs Seitenverhältnisse (9:16, 1:1, 16:9, 4:3, 3:4, 21:9). Bei 720p wird 16:9 mit 1280×720 gerendert, bei 1080p mit 1920×1088. Für bezahlte Social-Anzeigen würde ich bei 720p und 9:16 bleiben – das ist der beste Kompromiss bei den Kosten, und die Feed-Komprimierung schluckt ohnehin den größten Teil des 1080p-Unterschieds. Die vollständigen Tabellen findest du auf der Seedance-2.0-Modellseite und der Modellseite.
Die Fehler, die wirklich Probleme verursachen
Ein nicht passendes Timing ist der unauffällige Fehler: Wenn dein Prompt auf 15 Sekunden ausgelegt ist, du duration aber beim Standardwert 5 belässt, hetzt das Modell durch die Szene oder schneidet sie ab. Passe beides aneinander an. Ein 503 der API bedeutet, dass der Inhalt abgelehnt wurde (die API gibt 400 zurück) – formuliere den Prompt um und sende ihn erneut, statt blind zu wiederholen. Ein 403 bedeutet normalerweise ein unzureichendes Guthaben, nicht einen falschen Schlüssel. Und wenn ein Clip wie ein Luxuswerbespot aussieht, ist das für eine UGC-Platzierung kein Erfolg – formuliere den Prompt wieder in Richtung „mit dem Smartphone gefilmt“.
Vor der Veröffentlichung
Betrachte jede Ausgabe als Entwurf einer Anzeige, nicht als fertiges Werbemittel. Prüfe Produktversprechen, Bildrechte an deinem hochgeladenen Foto, die Werberichtlinien der Plattform und alle in deinem Markt geltenden Regeln zur KI-Kennzeichnung, bevor du Geld hinter einen Clip stellst. KI entfernt die Produktionskosten, nicht die Verantwortung für den Inhalt der Anzeige.
Jedes Bild in diesem Beitrag – das Titelbild und vier Illustrationen – wurde mit Seedream 5.0 Pro für insgesamt etwa 0,24 US-Dollar erstellt. Derselbe Workflow, derselbe Schlüssel.