Mit einem klaren Produktbild, Claude Code und der AIHubMix-API kannst du Charakterreferenzen in Seedream erzeugen, sie als virtuelle Personen-Assets registrieren und mit Seedance eine KI-Produktanzeige erstellen.
Dieses Tutorial basiert auf einer echten Kampagne für ein Aloe-Spray und enthält die Projektstruktur, Konfiguration, Befehle und den vollständigen Video-Prompt. Ziel ist eine 20-Sekunden-Anzeige im 720p-Format, 9:16 vertikal mit einer KI-generierten Person und Umgebung.
Claude Code und AIHubMix treiben den gesamten Workflow an. Claude Code liest das Projekt-Briefing, überarbeitet die Prompts und organisiert die Ausführung. AIHubMix stellt einen einzigen Modell-Einstiegspunkt bereit, sodass Bild- und Videogenerierung im selben Projekt laufen können.
Modell-IDs, Parameter und Fehlerbehandlung stammen von einem Projekt-Snapshot vom 16. September 2026. Prüfe die aktuelle API, bevor du sie wiederverwendest. Die Befehle verwenden das enthaltene flow.py und müssen aus dem Projektstamm ausgeführt werden.Die vollständige Starter-Vorlage herunterladen
Lade den Code, die Prompts, die Konfiguration und die Beispielbilder herunter:
https://drive.google.com/uc?export=download&id=1nXcj26Fq3daHeTd0SynS7_QEXgH8z4u_
Wechsle nach dem Entpacken in das Verzeichnis seedance-starter. Das Paket enthält flow.py, zwei Schema-Snapshots, fünf Prompt-Dateien, das Produktbild und drei Referenzbilder. Das Python-Skript verwendet nur die Standardbibliothek.
- Mit der Videophase beginnen: Verwende die drei mitgelieferten Referenzen, hinterlege deinen Schlüssel und beginne mit Schritt 4.
- Mit eigenem Produkt beginnen: Ersetze das Produktbild und die Prompt-Details, verschiebe die mitgelieferten Referenzbilder aus
assets/heraus und beginne mit Schritt 3.
Kopiere .env.example nach .env und trage deinen eigenen API-Schlüssel ein. Dein Konto benötigt Zugriff auf die relevanten Modelle, eventuell die erforderliche Berechtigung für asynchrone Aufgaben und ausreichendes Kontingent. API-Generierungen verursachen nutzungsabhängige Kosten.
1. Produktbild und Projekt vorbereiten
Das Beispielprodukt ist Nature Republic Aloe Vera Mist. Wenn du den Workflow anpasst, aktualisiere Bild, Produktbeschreibung und Nutzungsaktion gemeinsam.
| Datei | Zweck |
|---|---|
assets/product.png | Originales Produktbild |
prompts/prompt-a.txt | Prompt für das Hauptporträt der Figur |
prompts/prompt-b.txt | Prompt für die Figur mit dem Produkt |
prompts/prompt-c.txt | Prompt für die Produktnutzung |
prompts/prompt-video.txt | Zeitablauf des Videos sowie Anforderungen an Kamera und Audio |
prompts.json | Abmessungen, Dauer, Referenzabhängigkeiten und Prompt-Pfade |
flow.py | API-Anfragen, Asset-Registrierung, Polling und Downloads |
seedream.schema.json, seedance.schema.json | Zwischengespeicherte API-Schema-Snapshots |
Claude Code hilft beim Lesen des Projekt-Briefings und beim Überarbeiten von Konfiguration und Prompts. flow.py sendet die eigentlichen Anfragen über AIHubMix.
Warum AIHubMix für diesen Workflow passt
Ein Workflow für KI-Produktanzeigen benötigt in der Regel mehr als ein Modell. Ein Bildmodell erzeugt die Referenzen für Person und Produkt, ein Videomodell erzeugt Bewegung und Kameraverhalten. AIHubMix deckt die meisten gängigen Modelle ab, sodass du Modelle je nach Aufgabe über einen einzigen API-Dienst auswählen kannst, statt für jeden Anbieter eigene Konten, Authentifizierungen und Request-Endpunkte zu verwalten.
AIHubMix ist außerdem mit mehreren Anbietern verbunden und wählt automatisch eine verfügbare Route mit niedriger Latenz. Das kann die Auswirkungen der Instabilität eines einzelnen Anbieters auf einen Workflow verringern, der Bildgenerierung, Asset-Verarbeitung und Videogenerierung nacheinander abschließen muss. Verfügbarkeit der Modelle, Routing und Antwortzeiten hängen weiterhin von den aktuellen Dienstbedingungen ab.
Erstelle .env im Projektstamm oder stelle dieselbe Variable in deiner Umgebung bereit:
AIHUBMIX_API_KEY=replace_with_your_api_key
Das Projekt schließt .env über .gitignore aus. Teile nur den Variablennamen und das Beispiel, niemals den echten Schlüssel.

Der gesamte Workflow beginnt mit einem klaren Produktbild.
2. Ausgabeziel festlegen und Bild- von Videoparametern trennen
Der relevante Teil von prompts.json sieht so aus. Behalte beim Bearbeiten der echten Datei das bestehende stills-Array und die anderen Felder bei.
{
"size": "1080x1920",
"aspect_ratio": "9:16",
"duration": 20,
"resolution": "720p",
"generate_audio": true,
"video_prompt_file": "prompts/prompt-video.txt"
}
size gehört zur Bildgenerierung. aspect_ratio, duration, resolution und generate_audio gehören zur Videogenerierung. Das Skript erstellt getrennte Anfragen, anstatt das gesamte Konfigurationsobjekt an beide Endpunkte zu senden.
Das Projekt verwendet folgende Modell-IDs:
- Seedream:
doubao-seedream-5-0-pro-260628 - Seedance:
doubao-seedance-2-5-260628
Die mitgelieferten Schema-Snapshots zeigen, dass der Bild-Endpunkt size akzeptiert, während der Video-Endpunkt aspect_ratio akzeptiert. Werden sie vermischt, wird die Anfrage abgelehnt. flow.py prüft zwischengespeicherte Schema-Eigenschaften, bevor eine Anfrage gesendet wird, das ist jedoch keine vollständige Parametervalidierung.
3. Die drei Charakterreferenzen der Reihe nach generieren
Jedes Bild hat eine andere Funktion, und spätere Bilder hängen von früheren ab:
| Referenz | Inhalt | Eingaben |
|---|---|---|
| A: Porträt der Figur | Gesicht, Haare, Kleidung, Raum und Beleuchtung festlegen | In diesem Beispiel nur Text-Prompt |
| B: Mit dem Produkt | Dieselbe Person hält die Flasche mit dem Etikett zur Kamera | Produktbild + A |
| C: Produkt in Verwendung | Dieselbe Person drückt die Sprühpumpe | Produktbild + B |
Die Prompts wiederholen die Figurendetails und beschreiben Form, Farben und Etikettenlayout des Produkts sowie den natürlichen Umgang damit.
Ausführen:
python3 flow.py stills
Die Ergebnisse werden als assets/frame-01.jpg, frame-02.jpg und frame-03.jpg gespeichert. Prüfe die Konsistenz der Figur, die Treue der Verpackung und die Glaubwürdigkeit der Nutzungsaktion.
Das Skript überspringt vorhandene Dateien. Wenn du einen Prompt änderst, sichere die entsprechende Ausgabe und verschiebe sie, bevor du neu startest. Eine Änderung von A kann auch eine Neugenerierung von B und C erfordern.

Die Referenzen legen die Identität der Figur, die Produktdarstellung und die Produktnutzung fest.
4. Bilder hosten und virtuelle Porträt-Assets registrieren
Der Starter enthält keine Asset-ID aus dem Konto des Autors. Registriere die Referenzen in deinem eigenen Konto.
Dieses Projekt verwendet öffentliche Bild-URLs für die Registrierung. Der ursprüngliche Workflow nutzte GitHub-Raw-URLs, die an einen Commit-SHA gebunden sind, aber jeder Hosting-Dienst, der das Bild ohne Authentifizierung direkt ausliefert, funktioniert.
Eine GitHub-/blob/-URL liefert eine HTML-Seite zurück und kann nicht als Bild-URL verwendet werden.
Ersetze diesen Platzhalter-Host durch den tatsächlichen Speicherort deiner hochgeladenen Dateien:
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 prüft HTTP 200 und einen Bild-Content-Type. assets erstellt oder verwendet eine virtual_portrait-Asset-Gruppe erneut, registriert jedes Bild, wartet, bis es active ist, und schreibt die Asset-IDs in state.json.
Dieser Schritt beruht auf einem tatsächlichen Fehler im Projekt: Wurden fotorealistische Figur-URLs direkt an den Video-Endpunkt übergeben, kam doubao_real_person_required zurück. Die Person in dieser Kampagne war KI-generiert, daher war virtual_portrait die richtige Einordnung. Eine Fotografie einer echten Person muss das entsprechende Verifizierungsverfahren durchlaufen und darf nicht als virtuell gekennzeichnet werden.
Alle Assets, die in einer Videoanfrage verwendet werden, sollten zur selben Gruppe gehören.

Die Referenzen wurden generiert und alle drei Assets waren aktiv; die Videoaufgabe lief noch, als dieser Screenshot aufgenommen wurde.
5. Den Video-Prompt als Zeitablauf mit Kameragrenzen schreiben
Der endgültige Projekt-Prompt teilt eine durchgehende 20-Sekunden-Einstellung in vier Phasen auf:
| Zeit | Aktion der Figur | Position des Produkts |
|---|---|---|
| 0–5 Sekunden | Blickt in die Kamera und präsentiert die Flasche | Neben ihrem Gesicht, Etikett zur Kamera |
| 5–10 Sekunden | Hebt die Flasche und drückt die Pumpe | Bleibt im Bildausschnitt |
| 10–15 Sekunden | Schließt die Augen und spürt, wie sich der Nebel legt | Unteres Drittel des Bildes |
| 15–20 Sekunden | Öffnet die Augen und präsentiert das Produkt erneut | Wieder neben ihrem Gesicht, Etikett zur Kamera |
Ein früheres Ergebnis hat die Kamera zu nah herangeführt und das Produkt verloren. Der endgültige Prompt begrenzt die Bewegung daher auf eine halbnahe Einstellung, verlangt, dass das Produkt sichtbar bleibt, und fordert ein lesbares Etikett in den ersten und letzten drei Sekunden.
Hier ist die vollständige prompts/prompt-video.txt. Für ein anderes Produkt aktualisiere Marke, Verpackungsbeschreibung und Nutzungsaktion. Diese Anweisungen sind Generierungsziele und erfordern trotzdem eine Prüfung der Ausgabe.
One continuous 20-second vertical beauty commercial take, no cuts, in a sunlit minimalist vanity corner.
0-5s: the same 24-year-old East Asian woman in an oversized sage-green linen shirt over a white ribbed tank top stands at the vanity holding the translucent light-green Nature Republic Aloe Vera 92% Soothing Gel Mist beside her cheek, the label facing camera and fully legible. She looks to camera with a warm, easy smile and turns the bottle slightly so the label catches the morning light.
5-10s: she lifts the bottle just above eye level and presses the fine-mist pump. A soft cone of aloe mist sprays across her face and catches the light as a faint sparkle of micro-droplets.
10-15s: her eyes close and her chin lifts into a small contented smile as the mist settles, tiny droplets resting on her cheekbone and brow. The bottle stays visible in the lower third of the frame throughout this beat.
15-20s: she opens her eyes, brings the bottle back up beside her cheek with the label square to camera, and holds a final calm look at the lens.
Camera: one slow, smooth push-in from a chest-up framing to a mid-close framing ONLY. Do not push past a mid-close shot. The product must stay inside the frame for the entire take, and the label must be clearly legible in both the first three seconds and the last three seconds.
Look: soft diffused morning sunlight from camera left, photorealistic skin texture with real moisture on the skin, mist rendered as genuinely photographed spray rather than digital particles, premium K-beauty advertising. Keep the product packaging, colours, materials, label layout and label text exactly as in the reference images; do not redesign or re-letter the product. No text overlays, no captions, no watermarks.
Audio: a quiet bright room, one soft short pump-spray hiss, a gentle breath. No music, no voiceover.
Die Audiogenerierung ist aktiviert, der Prompt fordert jedoch nur Raumton, ein Sprühgeräusch und sanftes Atmen an, keine Musik und keinen Voice-over.
6. Video generieren und speichern
Reiche nach der Asset-Registrierung asset://-Referenzen ein. Dieser Befehl liest die gespeicherten IDs und übergibt jede als eigenes Argument:
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
Die Verwendung einer Argumentliste vermeidet außerdem ein zsh-Problem aus dem Ursprungsprojekt, bei dem mehrere IDs in einer einfachen Zeichenkette als ein einziges ungültiges Argument an das Skript gelangen konnten.
Das Skript speichert die Video-Task-ID, fragt wiederholt ab, bis completed erreicht ist, und lädt die Ausgabe nach out/video.mp4 herunter. Ein weiterer Download kann diesen Pfad überschreiben, sichere daher Versionen, die du vergleichen möchtest.
Eine vorhandene Aufgabe fortsetzen oder ihr Ergebnis erneut herunterladen mit:
python3 flow.py status
Wenn die Antwort auf die Erstellung verloren gegangen ist, liste die letzten Aufgaben auf und setze die relevante ID fort:
python3 flow.py tasks
python3 flow.py status VIDEO_TASK_ID
Wenn du vor einer neuen Generierung nach einer bestehenden Aufgabe suchst, verhinderst du versehentliche Doppelgenerierungen.
7. Ergebnis prüfen und iterieren
Das Ursprungsprojekt behält video-v1-10s.mp4 und das endgültige video.mp4. Die erste Version dauerte nur 10 Sekunden und zeigte die Produktnutzung nicht ausreichend, daher durchlief der Workflow eine zweite Prompt-Iteration.
Prüfe jedes Ergebnis anhand dieser Checkliste:
- [ ] Dauer, Auflösung und Seitenverhältnis entsprechen dem Ziel.
- [ ] Gesicht, Kleidung und Umgebung der Figur bleiben konsistent.
- [ ] Das Produkt bleibt sichtbar, und sein Etikett ist am Anfang und Ende lesbar.
- [ ] Handhabung und Sprühaktionen entsprechen der tatsächlichen Nutzung des Produkts.
- [ ] Flaschenform, Verpackung und Text verändern sich nicht merklich.
- [ ] Die Kamera kommt nicht zu nah heran, und das Audio entspricht der Anforderung.
Wenn die Dauer nicht stimmt, prüfen Sie sowohl die Konfiguration als auch die tatsächliche Anfrage. Verlässt das Produkt das Bild, verschärfen Sie die Kameragrenzen. Ist die Nutzungsaktion zu kurz, planen Sie Zeit und Verhalten expliziter ein. Wenn Sie nur prompts/prompt-video.txt bearbeiten, müssen die Referenzbilder nicht neu generiert werden; generieren und registrieren Sie sie nur dann neu, wenn sich die visuellen Referenzen ändern müssen.
Häufig gestellte Fragen
Warum gibt ein Modellname, der korrekt aussieht, einen 404-Fehler zurück?
Der verkürzte Seedream-Name hat im Quellprojekt model_not_found zurückgegeben. Verwenden Sie die vollständige API-Modell-ID, die der aktuelle Endpunkt akzeptiert, statt anzunehmen, dass der Marketing-Anzeigename auch der API-Bezeichner ist.
Warum kann ich ein Bild in meinem Browser öffnen, die Registrierung schlägt aber trotzdem fehl?
Vergewissern Sie sich, dass die URL das Bild selbst zurückgibt und nicht HTML, eine Freigabeseite oder eine Anmeldeseite. Verwenden Sie vor der Registrierung python3 flow.py check URL... .
Warum hat die Änderung eines Prompts das Referenzbild nicht verändert?
stills überspringt vorhandene Dateien. Sichern und verschieben Sie jedes Bild, das neu generiert werden muss, und prüfen Sie anschließend, ob abhängige Referenzen ebenfalls neu generiert werden sollten.
Bedeutet HTTP 200, dass das Video fertig ist?
Nein. Das Skript verzweigt anhand desstatus der Aufgabe und lädt erst herunter, wenn die Aufgabe den Status completed erreicht hat.
Ihre erste Version starten
Bereiten Sie ein Produktbild vor, konfigurieren Sie den AIHubMix-Zugang und wählen Sie die Bild- und Videomodelle aus. Lassen Sie dann Claude Code die Produktbeschreibung und die Prompts anpassen. Generieren Sie die drei Referenzen, prüfen und registrieren Sie sie, erstellen Sie das Video und nutzen Sie die Checkliste, um über die nächste Iteration zu entscheiden.
Wenn ein künftiges Projekt ein anderes Modell benötigt, behalten Sie dieselbe Dateistruktur und denselben Workflow bei und aktualisieren Sie anschließend die Modellauswahl bei AIHubMix sowie die modellspezifischen Parameter. Darin liegt der praktische Nutzen eines einheitlichen API-Dienstes für ein Content-Team, das mehrere KI-Modelle einsetzt: Die Modelle lassen sich je nach Aufgabe austauschen, während der Workflow wiederverwendbar bleibt.



