Mit einem klaren Produktbild, Claude Code und der AIHubMix-API können Sie Charakterreferenzen in Seedream generieren, diese als virtuelle Personenassets registrieren und Seedance verwenden, um eine KI-Produktanzeige zu erstellen.
Dieses Tutorial basiert auf einer realen Aloe-Mist-Kampagne und umfasst die Projektstruktur, Konfiguration, Befehle und das vollständige Video-Prompt. Das Ziel ist eine 20-sekündige, 720p, 9:16 Hochformatanzeige mit einer KI-generierten Person und Umgebung.
Claude Code und AIHubMix steuern den gesamten Workflow. Claude Code liest das Projektbriefing, überarbeitet die Prompts und organisiert die Ausführung. AIHubMix bietet einen Modellzugangspunkt, sodass die Bild- und Videoerzeugung im selben Projekt erfolgen kann.
Modell-IDs, Parameter und Fehlerbehandlung stammen aus einem Projekt-Snapshot vom 16. September 2026. Überprüfen Sie die aktuelle API, bevor Sie sie wiederverwenden. Die Befehle verwenden das enthaltene flow.py und müssen vom Projektstammverzeichnis aus ausgeführt werden.Laden Sie den vollständigen Starter herunter
Laden Sie den Code, die Prompts, die Konfiguration und die Beispielbilder herunter
Nach dem Entpacken betreten Sie das seedance-starter Verzeichnis. 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.
- Beginnen Sie mit der Video-Phase: verwenden Sie die drei enthaltenen Referenzen, konfigurieren Sie Ihren Schlüssel und beginnen Sie mit Schritt 4.
- Beginnen Sie mit Ihrem eigenen Produkt: ersetzen Sie das Produktbild und die Prompt-Details, verschieben Sie die enthaltenen Referenzbilder aus
assets/und beginnen Sie mit Schritt 3.
Kopieren Sie .env.example nach .env und fügen Sie Ihren eigenen API-Schlüssel hinzu. Ihr Konto benötigt Zugriff auf die relevanten Modelle, alle erforderlichen Berechtigungen für asynchrone Aufgaben und ausreichend Kontingent. Die API-Generierung verursacht Nutzungskosten.
1. Bereiten Sie das Produktbild und das Projekt vor
Das Beispielprodukt ist Nature Republic Aloe Vera Mist. Bei der Anpassung des Workflows aktualisieren Sie das Bild, die Produktbeschreibung und die Verwendung.
| Datei | Zweck |
|---|---|
assets/product.png | Originalproduktbild |
prompts/prompt-a.txt | Prompt für das Porträt der Hauptfigur |
prompts/prompt-b.txt | Prompt für die Figur, die das Produkt hält |
prompts/prompt-c.txt | Prompt für die Verwendung des Produkts |
prompts/prompt-video.txt | Video-Zeitleiste, Kamera- und Audioanforderungen |
prompts.json | Dimensionen, 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 dabei, das Projektbriefing zu lesen und die Konfiguration sowie die Prompts zu überarbeiten. flow.py sendet die tatsächlichen Anfragen über AIHubMix.
Warum AIHubMix zu diesem Workflow passt
Ein KI-Produktanzeigen-Workflow benötigt in der Regel mehr als ein Modell. Ein Bildmodell erstellt die Personen- und Produktreferenzen; ein Videomodell erzeugt Bewegung und Kameraverhalten. AIHubMix deckt die meisten gängigen Modelle ab, sodass Sie Modelle nach Aufgabe über einen API-Dienst auswählen können, anstatt separate Konten, Authentifizierung und Anfragezugangspunkte für jeden Anbieter zu verwalten.
AIHubMix verbindet sich auch mit mehreren Anbietern und wählt automatisch eine verfügbare, latenzarme Route aus. Dies kann die Auswirkungen der Instabilität eines einzelnen Anbieters auf einen Workflow verringern, der die Bildgenerierung, die Asset-Verarbeitung und die Videoerzeugung in Folge abschließen muss. Die Verfügbarkeit von Modellen, das Routing und die Reaktionszeit hängen weiterhin von den aktuellen Dienstbedingungen ab.
Erstellen Sie .env im Projektstammverzeichnis oder geben Sie dieselbe Variable in Ihrer Umgebung an:
AIHUBMIX_API_KEY=replace_with_your_api_key
Das Projekt schließt .env über .gitignore aus. Teilen Sie nur den Variablennamen und ein Beispiel, niemals den echten Schlüssel.

Der gesamte Workflow beginnt mit einem klaren Produktbild.
2. Legen Sie das Ausgabeziel fest und trennen Sie Bild- von Video-Parametern
Der relevante Teil von prompts.json sieht so aus. Behalten Sie das vorhandene stills Array und andere Felder bei, wenn Sie die echte Datei bearbeiten.
{
"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 Videoerzeugung. Das Skript erstellt separate Anfragen, anstatt das gesamte Konfigurationsobjekt an beide Endpunkte zu senden.
Das Projekt verwendet diese Modell-IDs:
- Seedream:
doubao-seedream-5-0-pro-260628 - Seedance:
doubao-seedance-2-5-260628
Die gebündelten Schema-Snapshots zeigen, dass der Bildendpunkt size akzeptiert, während der Videoendpunkt aspect_ratio akzeptiert. Das Mischen führt zu einer Ablehnung. flow.py überprüft die zwischengespeicherten Schema-Eigenschaften, bevor eine Anfrage gesendet wird, aber dies ist keine vollständige Parametervalidierung.
3. Generieren Sie die drei Charakterreferenzen in der richtigen Reihenfolge
Jedes Bild hat eine andere Rolle, und spätere Bilder hängen von früheren ab:
| Referenz | Inhalt | Eingaben |
|---|---|---|
| A: Charakterporträt | Gesicht, Haare, Kleidung, Raum und Beleuchtung festlegen | Textprompt nur in diesem Beispiel |
| B: Produkt halten | Die gleiche Person hält die Flasche mit dem Etikett zur Kamera | Produktbild + A |
| C: Produkt verwenden | Die gleiche Person drückt die Sprühpumpe | Produktbild + B |
Die Prompts wiederholen die Charakterdetails und beschreiben die Form, Farben, das Layout des Etiketts und die natürliche Handhabung des Produkts.
Führen Sie aus:
python3 flow.py stills
Die Ergebnisse werden als assets/frame-01.jpg, frame-02.jpg und frame-03.jpg gespeichert. Überprüfen Sie die Konsistenz der Charaktere, die Treue der Verpackung und den Realismus der Verwendung.
Das Skript überspringt vorhandene Dateien. Wenn Sie einen Prompt ändern, sichern Sie die entsprechenden Ausgaben und verschieben Sie sie, bevor Sie erneut ausführen. Eine Änderung von A kann auch eine Regenerierung von B und C erfordern.
Die Referenzen stellen die Identität des Charakters, die Präsentation des Produkts und die Verwendung des Produkts dar.
4. Hosten Sie die Bilder und registrieren Sie virtuelle Porträt-Assets
Der Starter enthält keine Asset-ID aus dem Konto des Autors. Registrieren Sie die Referenzen in Ihrem eigenen Konto.
Dieses Projekt verwendet öffentliche Bild-URLs zur Registrierung. Der Quell-Workflow verwendete GitHub-Roh-URLs, die an einen Commit-SHA gebunden sind, aber jedes Hosting, das das Bild direkt ohne Authentifizierung zurückgibt, kann funktionieren.
Eine GitHub /blob/ URL gibt eine HTML-Seite zurück und kann nicht als Bild-URL verwendet werden.
Ersetzen Sie diesen Platzhalter-Host durch den tatsächlichen Speicherort Ihrer 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 überprüft HTTP 200 und einen Bild-Content-Type. assets erstellt oder verwendet eine virtual_portrait Asset-Gruppe, registriert jedes Bild, wartet, bis es aktiv wird, und schreibt die Asset-IDs in state.json.
Dieser Schritt stammt aus einem tatsächlichen Fehler im Projekt: Das direkte Übergeben von fotorealistischen Charakter-URLs an den Videoendpunkt führte zu doubao_real_person_required. Die Person in dieser Kampagne wurde KI-generiert, daher war virtual_portrait die korrekte Klassifizierung. Ein Foto einer realen Person muss den entsprechenden Verifizierungsprozess 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. Schreiben Sie das Video-Prompt als Zeitleiste mit Kamera-Limits
Das endgültige Projekt-Prompt unterteilt einen kontinuierlichen 20-sekündigen Shot in vier Phasen:
| Zeit | Charakteraktion | Produktposition |
|---|---|---|
| 0–5 Sekunden | Schaut 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 Rahmen |
| 10–15 Sekunden | Schließt die Augen und spürt, wie der Nebel sich setzt | Unteres Drittel des Rahmens |
| 15–20 Sekunden | Öffnet die Augen und präsentiert das Produkt erneut | Zurück neben ihrem Gesicht, Etikett zur Kamera |
Ein früheres Ergebnis brachte die Kamera zu nah heran und verlor das Produkt. Das endgültige Prompt begrenzt daher die Bewegung auf eine mittlere Nahaufnahme, verlangt, dass das Produkt sichtbar bleibt, und fordert ein leserliches Etikett während der ersten und letzten drei Sekunden.
Hier ist das vollständige prompts/prompt-video.txt. Für ein anderes Produkt aktualisieren Sie die Marke, die Verpackungsbeschreibung und die Verwendung. Diese Anweisungen sind Zielvorgaben für die Generierung und erfordern dennoch eine Überprüfung der Ausgaben.
Eine kontinuierliche 20-sekündige vertikale Schönheitswerbung, keine Schnitte, in einer sonnenbeschienenen minimalistischen Schminkecke.
0-5s: die gleiche 24-jährige ostasiatische Frau in einem übergroßen, salbeigrünen Leinenhemd über einem weißen, gerippten Tanktop steht am Schminktisch und hält das durchsichtige, hellgrüne Nature Republic Aloe Vera 92% Soothing Gel Mist neben ihrer Wange, das Etikett zur Kamera und vollständig lesbar. Sie schaut mit einem warmen, entspannten Lächeln in die Kamera und dreht die Flasche leicht, sodass das Etikett das Morgenlicht einfängt.
5-10s: Sie hebt die Flasche etwas über Augenhöhe und drückt die feine Sprühpumpe. Ein sanfter Kegel aus Aloe-Nebel sprüht über ihr Gesicht und fängt das Licht als schwaches Funkeln von Mikrotropfen ein.
10-15s: Ihre Augen schließen sich und ihr Kinn hebt sich zu einem kleinen zufriedenen Lächeln, während sich der Nebel setzt, winzige Tropfen auf ihrem Wangenknochen und ihrer Stirn ruhen. Die Flasche bleibt während dieses Beats im unteren Drittel des Rahmens sichtbar.
15-20s: Sie öffnet die Augen, bringt die Flasche wieder neben ihre Wange mit dem Etikett quadratisch zur Kamera und hält einen letzten ruhigen Blick in die Linse.
Kamera: ein langsames, sanftes Hineinschieben von einer Brust-aufwärts-Einstellung zu einer mittleren Nahaufnahme NUR. Nicht über eine mittlere Nahaufnahme hinaus schieben. Das Produkt muss während der gesamten Aufnahme im Rahmen bleiben, und das Etikett muss sowohl in den ersten drei Sekunden als auch in den letzten drei Sekunden deutlich lesbar sein.
Look: sanft diffuses Morgenlicht von links, fotorealistische Hauttextur mit echtem Feuchtigkeitsgehalt auf der Haut, Nebel, der als echt fotografierter Spray und nicht als digitale Partikel dargestellt wird, Premium K-Beauty-Werbung. Halten Sie die Produktverpackung, Farben, Materialien, das Layout des Etiketts und den Text des Etiketts genau wie in den Referenzbildern; gestalten Sie das Produkt nicht neu oder ändern Sie die Schrift. Keine Textüberlagerungen, keine Untertitel, keine Wasserzeichen.
Audio: ein ruhiger heller Raum, ein sanfter kurzer Pumpensprühgeräusch, ein sanfter Atem. Keine Musik, kein Voiceover.
Die Audioerzeugung ist aktiviert, aber das Prompt fordert nur Raumton, ein Sprühgeräusch und einen sanften Atem—keine Musik oder Voice-over.
6. Generieren und speichern Sie das Video
Nach der Asset-Registrierung übermitteln Sie asset:// Referenzen. Dieser Befehl liest die gespeicherten IDs und übergibt jede als separates 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 auch ein zsh-Problem aus dem Quellprojekt, bei dem mehrere IDs, die in einem einfachen String gespeichert sind, als ein ungültiges Argument an das Skript gelangen könnten.
Das Skript speichert die Videoaufgaben-ID, pollt, bis sie completed ist, und lädt das Ergebnis nach out/video.mp4 herunter. Ein weiterer Download kann diesen Pfad überschreiben, also sichern Sie die Versionen, die Sie vergleichen möchten.
Setzen Sie eine bestehende Aufgabe fort oder laden Sie ihr Ergebnis erneut herunter mit:
python3 flow.py status
Wenn die Antwort zum Erstellen verloren ging, listen Sie die letzten Aufgaben auf und setzen Sie die relevante ID fort:
python3 flow.py tasks
python3 flow.py status VIDEO_TASK_ID
Das Suchen nach einer bestehenden Aufgabe, bevor eine weitere erstellt wird, verhindert versehentliche doppelte Generierungen.
7. Überprüfen Sie die Ausgabe und iterieren Sie
Das Quellprojekt behält video-v1-10s.mp4 und das endgültige video.mp4 bei. Die erste Version dauerte nur 10 Sekunden und zeigte nicht genug Produktverwendung, sodass der Workflow eine zweite Prompt-Iteration durchlief.
Überprüfen Sie jedes Ergebnis anhand dieser Checkliste:
- [ ] Dauer, Auflösung und Seitenverhältnis stimmen mit dem Ziel überein.
- [ ] Das Gesicht, die Kleidung und die Umgebung des Charakters bleiben konsistent.
- [ ] Das Produkt bleibt sichtbar und sein Etikett kann am Anfang und Ende gelesen werden.
- [ ] Handhabung und Sprühaktionen entsprechen der tatsächlichen Verwendung des Produkts.
- [ ] Flaschenform, Verpackung und Text ändern sich nicht merklich.
- [ ] Die Kamera bewegt sich nicht zu nah, und das Audio entspricht der Anfrage.
Wenn die Dauer falsch ist, überprüfen Sie sowohl die Konfiguration als auch die tatsächliche Anfrage. Wenn das Produkt den Rahmen verlässt, verstärken Sie die Kamera-Limits. Wenn die Verwendung zu kurz ist, weisen Sie Zeit und Verhalten expliziter zu. Das Bearbeiten nur von prompts/prompt-video.txt erfordert keine Regenerierung von Referenzbildern; regenerieren und registrieren Sie sie nur, wenn die visuellen Referenzen geändert werden müssen.
Häufig gestellte Fragen
Warum gibt ein Modellname, der korrekt aussieht, 404 zurück?
Der verkürzte Seedream-Name gab im Quellprojekt model_not_found zurück. Verwenden Sie die vollständige API-Modell-ID, die vom aktuellen Endpunkt akzeptiert wird, anstatt anzunehmen, dass der Marketing-Anzeigename auch der API-Identifikator ist.
Warum kann ich ein Bild in meinem Browser öffnen, aber es trotzdem nicht registrieren?
Bestätigen Sie, dass die URL das Bild selbst zurückgibt und nicht HTML, eine Share-Seite oder eine Anmeldeseite. Verwenden Sie python3 flow.py check URL... vor der Registrierung.
Warum hat sich das Ändern eines Prompts nicht auf das Referenzbild ausgewirkt?
stills überspringt vorhandene Dateien. Sichern Sie alle Bilder, die regeneriert werden müssen, und verschieben Sie sie, und überprüfen Sie dann, ob nachgelagerte Referenzen ebenfalls regeneriert werden sollten.
Bedeutet HTTP 200, dass das Video fertig ist?
Nein. Das Skript verzweigt sich je nach status der Aufgabe und lädt nur herunter, nachdem die Aufgabe completed erreicht hat.
Starten Sie Ihre erste Version
Bereiten Sie ein Produktbild vor, konfigurieren Sie den Zugriff auf AIHubMix 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, überprüfen und registrieren Sie sie, erstellen Sie das Video und verwenden Sie die Checkliste, um die nächste Iteration zu entscheiden.
Wenn ein zukünftiges Projekt ein anderes Modell benötigt, behalten Sie die gleiche Dateistruktur und den Workflow bei, und aktualisieren Sie dann die AIHubMix-Modellauswahl und die modell-spezifischen Parameter. Das ist der praktische Wert eines einheitlichen API-Dienstes für ein Content-Team, das mehrere KI-Modelle verwendet: Modelle können je nach Aufgabe wechseln, während der Workflow wiederverwendbar bleibt.



