Mając jedno wyraźne zdjęcie produktu, Claude Code oraz API AIHubMix, możesz wygenerować referencje postaci w Seedream, zarejestrować je jako zasoby wirtualnych osób i użyć Seedance do stworzenia reklamy produktu AI.
Ten poradnik opiera się na prawdziwej kampanii mgiełki aloesowej i zawiera strukturę projektu, konfigurację, polecenia oraz kompletny prompt wideo. Docelowym wynikiem jest reklama pionowa 9:16, 720p, trwająca 20 sekund z postacią i otoczeniem wygenerowanymi przez AI.
Claude Code i AIHubMix napędzają cały proces. Claude Code odczytuje opis projektu, poprawia prompty i organizuje wykonanie. AIHubMix zapewnia jeden punkt wejścia do modeli, dzięki czemu generowanie obrazów i wideo może działać w ramach tego samego projektu.
Identyfikatory modeli, parametry i obsługa błędów pochodzą z migawki projektu z 16 września 2026 roku. Przed ponownym użyciem sprawdź aktualne API. Polecenia korzystają z dołączonego pliku flow.py i muszą być uruchamiane z katalogu głównego projektu.Pobierz gotowy zestaw startowy
Pobierz kod, prompty, konfigurację i przykładowe obrazy:
https://drive.google.com/uc?export=download&id=1nXcj26Fq3daHeTd0SynS7_QEXgH8z4u_
Po rozpakowaniu wejdź do katalogu seedance-starter. Pakiet zawiera flow.py, dwie migawki schematów, pięć plików z promptami, zdjęcie produktu oraz trzy obrazy referencyjne. Skrypt w Pythonie korzysta wyłącznie z biblioteki standardowej.
- Zacznij od etapu wideo: użyj trzech dołączonych referencji, skonfiguruj klucz i zacznij od Kroku 4.
- Zacznij od własnego produktu: zastąp zdjęcie produktu i szczegóły promptów, przenieś dołączone obrazy referencyjne poza katalog
assets/i zacznij od Kroku 3.
Skopiuj .env.example do .env i dodaj własny klucz API. Twoje konto musi mieć dostęp do odpowiednich modeli, wymagane uprawnienie do zadań asynchronicznych oraz wystarczający limit. Generowanie przez API wiąże się z opłatami za użycie.
1. Przygotuj zdjęcie produktu i projekt
Przykładowym produktem jest Nature Republic Aloe Vera Mist. Dostosowując ten proces, zaktualizuj jednocześnie zdjęcie, opis produktu i czynność użycia.
| Plik | Przeznaczenie |
|---|---|
assets/product.png | Oryginalne zdjęcie produktu |
prompts/prompt-a.txt | Prompt głównego portretu postaci |
prompts/prompt-b.txt | Prompt postaci trzymającej produkt |
prompts/prompt-c.txt | Prompt użycia produktu |
prompts/prompt-video.txt | Oś czasu wideo, kamera i wymagania dotyczące audio |
prompts.json | Wymiary, czas trwania, zależności od referencji i ścieżki do promptów |
flow.py | Żądania API, rejestracja zasobów, odpytywanie i pobieranie |
seedream.schema.json, seedance.schema.json | Zbuforowane migawki schematów API |
Claude Code pomaga odczytać opis projektu oraz poprawić konfigurację i prompty. flow.py wysyła właściwe żądania przez AIHubMix.
Dlaczego AIHubMix pasuje do tego procesu
Przepływ pracy przy reklamie produktu AI zwykle wymaga więcej niż jednego modelu. Model obrazów tworzy osobę i referencje produktu, a model wideo odpowiada za ruch i zachowanie kamery. AIHubMix obejmuje większość popularnych modeli, więc możesz wybierać model zależnie od zadania przez jedną usługę API, zamiast prowadzić osobne konta, uwierzytelnianie i punkty wejścia dla każdego dostawcy.
AIHubMix łączy się także z wieloma dostawcami i automatycznie wybiera dostępną trasę o niskim opóźnieniu. Może to ograniczyć wpływ niestabilności pojedynczego dostawcy na przepływ, który musi kolejno wykonać generowanie obrazów, przetwarzanie zasobów i generowanie wideo. Dostępność modeli, routing i czas odpowiedzi nadal zależą od bieżącej sytuacji w usłudze.
Utwórz .env w katalogu głównym projektu lub podaj tę samą zmienną w środowisku:
AIHUBMIX_API_KEY=replace_with_your_api_key
Projekt wyklucza .env za pośrednictwem .gitignore. Udostępniaj tylko nazwę zmiennej i przykład, nigdy prawdziwy klucz.

Cały proces zaczyna się od jednego wyraźnego zdjęcia produktu.
2. Ustal cel wyjściowy i rozdziel parametry obrazu od parametrów wideo
Odpowiednia część pliku prompts.json wygląda tak. Przy edycji prawdziwego pliku zachowaj istniejącą tablicę stills oraz pozostałe pola.
{
"size": "1080x1920",
"aspect_ratio": "9:16",
"duration": 20,
"resolution": "720p",
"generate_audio": true,
"video_prompt_file": "prompts/prompt-video.txt"
}
size należy do generowania obrazów. aspect_ratio, duration, resolution i generate_audio należą do generowania wideo. Skrypt buduje osobne żądania zamiast wysyłać cały obiekt konfiguracji do obu endpointów.
Projekt korzysta z następujących identyfikatorów modeli:
- Seedream:
doubao-seedream-5-0-pro-260628 - Seedance:
doubao-seedance-2-5-260628
Dołączone migawki schematów pokazują, że endpoint obrazów przyjmuje size, a endpoint wideo przyjmuje aspect_ratio. Mieszanie ich powoduje odrzucenie żądania. flow.py sprawdza zbuforowane właściwości schematu przed wysłaniem żądania, ale nie jest to pełna walidacja parametrów.
3. Wygeneruj trzy referencje postaci po kolei
Każdy obraz ma inną rolę, a późniejsze obrazy zależą od wcześniejszych:
| Referencja | Treść | Dane wejściowe |
|---|---|---|
| A: Portret postaci | Ustala twarz, włosy, strój, pomieszczenie i oświetlenie | W tym przykładzie wyłącznie prompt tekstowy |
| B: Trzymanie produktu | Ta sama osoba trzyma butelkę etykietą do kamery | Zdjęcie produktu + A |
| C: Użycie produktu | Ta sama osoba naciska pompkę spryskiwacza | Zdjęcie produktu + B |
Prompty powtarzają szczegóły dotyczące postaci i opisują kształt produktu, kolory, układ etykiety oraz naturalny sposób trzymania.
Uruchom:
python3 flow.py stills
Wyniki zapisywane są jako assets/frame-01.jpg, frame-02.jpg i frame-03.jpg. Sprawdź spójność postaci, wierność opakowania oraz realizm czynności użycia.
Skrypt pomija istniejące pliki. Jeśli zmienisz prompt, zrób kopię zapasową odpowiedniego wyniku i przenieś go przed ponownym uruchomieniem. Zmiana A może też wymagać ponownego wygenerowania B i C.

Referencje ustalają tożsamość postaci, prezentację produktu i sposób jego użycia.
4. Udostępnij obrazy i zarejestruj zasoby wirtualnego portretu
Zestaw startowy nie zawiera identyfikatorów zasobów z konta autora. Zarejestruj referencje na swoim koncie.
Ten projekt używa publicznych adresów URL obrazów do rejestracji. Oryginalny proces korzystał z surowych adresów GitHub przypiętych do SHA commita, ale może zadziałać dowolny hosting, który zwraca obraz bezpośrednio, bez uwierzytelniania.
Adres GitHub z /blob/ zwraca stronę HTML i nie może być użyty jako adres obrazu.
Zastąp ten symboliczny host rzeczywistą lokalizacją przesłanych plików:
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 weryfikuje odpowiedź HTTP 200 oraz typ Content-Type obrazu. assets tworzy lub ponownie używa grupy zasobów virtual_portrait, rejestruje każdy obraz, czeka, aż przejdzie w stan active, i zapisuje identyfikatory zasobów do pliku state.json.
Ten krok wynika z rzeczywistego błędu w projekcie: przekazanie adresów URL fotorealistycznych postaci bezpośrednio do endpointu wideo zwróciło doubao_real_person_required. Osoba w tej kampanii została wygenerowana przez AI, więc klasyfikacja virtual_portrait była właściwa. Zdjęcie prawdziwej osoby musi przejść odpowiednią procedurę weryfikacji i nie może być oznaczone jako wirtualne.
Wszystkie zasoby użyte w jednym żądaniu wideo powinny należeć do tej samej grupy.

Referencje zostały wygenerowane, a wszystkie trzy zasoby były aktywne; zadanie wideo nadal trwało, gdy wykonywano ten zrzut ekranu.
5. Napisz prompt wideo jako oś czasu z ograniczeniami kamery
Ostateczny prompt projektu dzieli jedno ciągłe 20-sekundowe ujęcie na cztery fazy:
| Czas | Działanie postaci | Położenie produktu |
|---|---|---|
| 0–5 sekund | Patrzy w kamerę i prezentuje butelkę | Obok twarzy, etykietą do kamery |
| 5–10 sekund | Unosi butelkę i naciska pompkę | Pozostaje w kadrze |
| 10–15 sekund | Zamyka oczy i czuje, jak mgiełka opada | Dolna jedna trzecia kadru |
| 15–20 sekund | Otwiera oczy i ponownie prezentuje produkt | Z powrotem obok twarzy, etykietą do kamery |
Wcześniejszy wynik przybliżał kamerę zbyt mocno i produkt został utracony. Ostateczny prompt dlatego ogranicza ruch do średniego zbliżenia, wymaga, aby produkt pozostawał widoczny, i prosi o czytelną etykietę w pierwszych i ostatnich trzech sekundach.
Oto kompletny plik prompts/prompt-video.txt. Dla innego produktu zaktualizuj markę, opis opakowania i czynność użycia. Te instrukcje są celami generowania i nadal wymagają sprawdzenia wyniku.
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.
Generowanie dźwięku jest włączone, ale prompt wymaga tylko ambientowego dźwięku pomieszczenia, jednego odgłosu spryskiwania i delikatnego oddechu — bez muzyki i lektora.
6. Wygeneruj i zapisz wideo
Po rejestracji zasobów prześlij referencje asset://. To polecenie odczytuje zapisane identyfikatory i przekazuje każdy z nich jako osobny 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
Użycie listy argumentów pozwala też uniknąć problemu z zsh z projektu źródłowego, w którym kilka identyfikatorów zapisanych w jednym zwykłym ciągu znaków mogło trafić do skryptu jako jeden nieprawidłowy argument.
Skrypt zapisuje identyfikator zadania wideo, odpytuje, aż status będzie completed, i pobiera wynik do out/video.mp4. Kolejne pobranie może nadpisać tę ścieżkę, dlatego zrób kopię zapasową wersji, które chcesz porównać.
Wznów istniejące zadanie lub ponownie pobierz jego wynik poleceniem:
python3 flow.py status
Jeśli odpowiedź na żądanie utworzenia została utracona, wyświetl listę ostatnich zadań i wznów odpowiedni identyfikator:
python3 flow.py tasks
python3 flow.py status VIDEO_TASK_ID
Sprawdzenie istniejącego zadania przed utworzeniem kolejnego zapobiega przypadkowemu duplikowaniu generacji.
7. Przejrzyj wynik i wprowadzaj poprawki
Projekt źródłowy zachowuje video-v1-10s.mp4 oraz końcowy video.mp4. Pierwsza wersja trwała tylko 10 sekund i nie pokazywała wystarczająco użycia produktu, dlatego proces przeszedł przez drugą iterację promptu.
Sprawdź każdy wynik według tej listy kontrolnej:
- [ ] Czas trwania, rozdzielczość i proporcje obrazu odpowiadają założeniom.
- [ ] Twarz, strój i otoczenie postaci pozostają spójne.
- [ ] Produkt pozostaje widoczny, a jego etykieta jest czytelna na początku i na końcu.
- [ ] Trzymanie i spryskiwanie odpowiadają rzeczywistemu sposobowi używania produktu.
- [ ] Kształt butelki, opakowanie i tekst nie zmieniają się w zauważalny sposób.
- [ ] Kamera nie zbliża się zbyt mocno, a dźwięk odpowiada założeniom.
Jeśli czas trwania jest niewłaściwy, sprawdź zarówno konfigurację, jak i rzeczywiste żądanie. Jeśli produkt wychodzi poza kadr, zaostrz ograniczenia kamery. Jeśli akcja użycia produktu jest zbyt krótka, dokładniej określ czas i zachowanie. Samo edytowanie prompts/prompt-video.txt nie wymaga ponownego generowania obrazów referencyjnych; generuj je ponownie i rejestruj tylko wtedy, gdy trzeba zmienić referencje wizualne.
Najczęściej zadawane pytania
Dlaczego nazwa modelu, która wygląda poprawnie, zwraca błąd 404?
Skrócona nazwa Seedream zwróciła model_not_found w projekcie źródłowym. Użyj pełnego identyfikatora modelu API, akceptowanego przez aktualny endpoint, zamiast zakładać, że nazwa marketingowa jest również identyfikatorem API.
Dlaczego mogę otworzyć obraz w przeglądarce, ale mimo to nie mogę go zarejestrować?
Upewnij się, że adres URL zwraca sam obraz, a nie HTML, stronę udostępniania ani stronę logowania. Przed rejestracją użyj python3 flow.py check URL....
Dlaczego zmiana promptu nie zmieniła obrazu referencyjnego?
stills pomija istniejące pliki. Wykonaj kopię zapasową i przenieś każdy obraz, który wymaga ponownego wygenerowania, a następnie sprawdź, czy powinny zostać ponownie wygenerowane także zależne od niego referencje.
Czy kod HTTP 200 oznacza, że wideo jest gotowe?
Nie. Skrypt sprawdza status zadania i pobiera plik dopiero wtedy, gdy zadanie osiągnie completed.
Rozpocznij pierwszą wersję
Przygotuj jedno zdjęcie produktu, skonfiguruj dostęp do AIHubMix i wybierz modele obrazów oraz wideo. Następnie pozwól Claude Code dostosować opis produktu i prompty. Wygeneruj trzy referencje, sprawdź je i zarejestruj, utwórz wideo, a listę kontrolną wykorzystaj, aby zdecydować o kolejnej iteracji.
Gdy przyszły projekt będzie wymagał innego modelu, zachowaj tę samą strukturę plików i przepływ pracy, a następnie zaktualizuj wybór modelu w AIHubMix oraz parametry specyficzne dla modelu. W tym właśnie praktyczna wartość zunifikowanej usługi API dla zespołu contentowego korzystającego z kilku modeli AI: modele mogą zmieniać się w zależności od zadania, a przepływ pracy pozostaje wielokrotnego użytku.



