С една ясна продуктова снимка, Claude Code и API на AIHubMix, можете да генерирате референции за персонажи в Seedream, да ги регистрирате като активи на виртуални личности и да използвате Seedance, за да създадете реклама на AI продукт.
Този урок е базиран на реална кампания за алое-мист и включва структура на проекта, конфигурация, команди и пълен видео подтик. Целевият изход е реклама с продължителност 20 секунди, 720p, 9:16 вертикален формат с AI генериран човек и обстановка.
Claude Code и AIHubMix управляват целия работен процес. Claude Code прочита брифинга на проекта, преработва подтиките и организира изпълнението. AIHubMix предоставя една точка за вход на модела, така че генерирането на изображения и видео да може да работи в рамките на един и същи проект.
ID на моделите, параметри и обработка на грешки идват от моментна снимка на проекта, датирана на 16 септември 2026 г. Проверете текущия API преди да ги използвате отново. Командите използват включения flow.py и трябва да се изпълняват от корена на проекта.Изтеглете пълния стартов пакет
Изтеглете кода, подтиките, конфигурацията и примерните изображения
След като го извлечете, влезте в директорията seedance-starter. Пакетът включва flow.py, две моментни снимки на схемата, пет файла с подтици, продуктовото изображение и три референтни изображения. Python скриптът използва само стандартната библиотека.
- Започнете с видео етапа: използвайте трите включени референции, конфигурирайте ключа си и започнете с Стъпка 4.
- Започнете с вашия собствен продукт: заменете продуктовото изображение и детайлите на подтика, преместете включените референтни изображения извън
assets/, и започнете с Стъпка 3.
Копирайте .env.example в .env и добавете вашия собствен API ключ. Вашият акаунт трябва да има достъп до съответните модели, всякакви необходими разрешения за асинхронни задачи и достатъчен квота. Генерирането на API носи такси за ползване.
1. Подгответе продуктовото изображение и проекта
Примерният продукт е Nature Republic Aloe Vera Mist. Когато адаптирате работния процес, актуализирайте изображението, описанието на продукта и действието за употреба.
| Файл | Цел |
|---|---|
assets/product.png | Оригинално продуктово изображение |
prompts/prompt-a.txt | Подтик за портрет на главния герой |
prompts/prompt-b.txt | Подтик за персонаж, държащ продукта |
prompts/prompt-c.txt | Подтик за употреба на продукта |
prompts/prompt-video.txt | Таймлайн на видеото, камера и аудио изисквания |
prompts.json | Размери, продължителност, зависимости от референции и пътища на подтиките |
flow.py | API заявки, регистрация на активи, опрашване и изтегляния |
seedream.schema.json, seedance.schema.json | Кеширани моментни снимки на API схемата |
Claude Code помага за прочитането на брифинга на проекта и преработването на конфигурацията и подтиките. flow.py изпраща действителните заявки чрез AIHubMix.
Защо AIHubMix е подходящ за този работен процес
Работният процес на реклама на AI продукт обикновено изисква повече от един модел. Модел за изображения създава референции за хора и продукти; модел за видео създава движение и поведение на камерата. AIHubMix покрива повечето основни модели, така че можете да избирате модели по задача чрез една API услуга, вместо да поддържате отделни акаунти, удостоверяване и точки за вход за всяка услуга.
AIHubMix също така се свързва с множество доставчици и автоматично избира наличен маршрут с ниска латентност. Това може да намали влиянието на нестабилността на един доставчик върху работния процес, който трябва да завърши генерирането на изображения, обработката на активи и генерирането на видео последователно. Наличността на моделите, маршрутизацията и времето за отговор все още зависят от текущите условия на услугата.
Създайте .env в корена на проекта или предоставете същата променлива в средата си:
AIHUBMIX_API_KEY=replace_with_your_api_key
Проектът изключва .env чрез .gitignore. Споделяйте само името на променливата и пример, никога реалния ключ.

Целият работен процес започва с една ясна продуктова снимка.
2. Задайте целевия изход и отделете параметрите на изображението от видеото
Съответната част от prompts.json изглежда така. Запазете съществуващия stills масив и другите полета, когато редактирате реалния файл.
{
"size": "1080x1920",
"aspect_ratio": "9:16",
"duration": 20,
"resolution": "720p",
"generate_audio": true,
"video_prompt_file": "prompts/prompt-video.txt"
}
size принадлежи на генерирането на изображения. aspect_ratio, duration, resolution и generate_audio принадлежат на генерирането на видео. Скриптът изгражда отделни заявки, вместо да изпраща целия конфигурационен обект до двата крайни точки.
Проектът използва тези ID на модели:
- Seedream:
doubao-seedream-5-0-pro-260628 - Seedance:
doubao-seedance-2-5-260628
Включените моментни снимки на схемата показват, че крайният точка за изображения приема size, докато крайният точка за видео приема aspect_ratio. Смесването им води до отхвърляне. flow.py проверява кешираните свойства на схемата преди да изпрати заявка, но това не е пълна валидация на параметрите.
3. Генерирайте трите референции на персонажи в ред
Всяко изображение има различна роля, а по-късните изображения зависят от по-раншните:
| Референция | Съдържание | Входове |
|---|---|---|
| A: Портрет на персонажа | Установете лице, коса, облекло, стая и осветление | Текстов подтик само в този пример |
| B: Държи продукта | Същият човек държи бутилката с етикета, обърнат към камерата | Продуктово изображение + A |
| C: Използва продукта | Същият човек натиска помпата за спрей | Продуктово изображение + B |
Подтиките повтарят детайлите на персонажа и описват формата на продукта, цветовете, разположението на етикета и естественото боравене.
Изпълнете:
python3 flow.py stills
Резултатите се запазват като assets/frame-01.jpg, frame-02.jpg и frame-03.jpg. Прегледайте последователността на персонажите, точността на опаковката и реализъм на действието на употреба.
Скриптът пропуска съществуващи файлове. Ако промените подтик, архивирайте и преместете съответния изход, преди да повторите. Промяната на A може също да изисква регенериране на B и C.
Референциите установяват идентичността на персонажа, представянето на продукта и употребата на продукта.
4. Хоствайте изображенията и регистрирайте активи на виртуални портрети
Стартовият пакет не съдържа ID на активи от акаунта на автора. Регистрирайте референциите в собствения си акаунт.
Този проект използва публични URL адреси на изображения за регистрация. Изходният работен процес използваше GitHub raw URL адреси, прикрепени към SHA на комит, но всяко хостване, което връща изображението директно без удостоверяване, може да работи.
GitHub /blob/ URL адрес връща HTML страница и не може да се използва като URL адрес на изображение.
Заменете този запълващ хост с реалното местоположение на вашите качени файлове:
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 проверява HTTP 200 и тип съдържание на изображение. assets създава или повторно използва група активи virtual_portrait, регистрира всяко изображение, изчаква да стане active, и записва ID на активите в state.json.
Тази стъпка идва от действителен провал в проекта: предаването на фотореалистични URL адреси на персонажи директно на крайния точка за видео върна doubao_real_person_required. Човекът в тази кампания беше AI генериран, така че virtual_portrait беше правилната класификация. Снимка на реален човек трябва да следва съответния процес на проверка и не трябва да бъде обозначавана като виртуална.
Всички активи, използвани в една видео заявка, трябва да принадлежат на същата група.

Референциите бяха генерирани и трите активи бяха активни; задачата за видео все още работеше, когато този екранен кадър беше заснет.
5. Напишете видео подтика като таймлайн с ограничения на камерата
Крайната подтик на проекта разделя един непрекъснат 20-секунден кадър на четири фази:
| Време | Действие на персонажа | Позиция на продукта |
|---|---|---|
| 0–5 секунди | Гледа към камерата и представя бутилката | До лицето й, етикетът обърнат към камерата |
| 5–10 секунди | Повдига бутилката и натиска помпата | Остава в рамките на кадъра |
| 10–15 секунди | Затваря очи и усеща как мъглата се установява | Долна трета част на кадъра |
| 15–20 секунди | Отваря очи и отново представя продукта | Обратно до лицето й, етикетът обърнат към камерата |
По-ранен резултат приближи камерата твърде много и загуби продукта. Следователно, финалният подтик ограничава движението до средно близък кадър, изисква продуктът да остане видим и иска четлив етикет през първите и последните три секунди.
Ето пълния prompts/prompt-video.txt. За друг продукт актуализирайте марката, описанието на опаковката и действието за употреба. Тези инструкции са цели за генериране и все още изискват преглед на изхода.
Един непрекъснат 20-секунден вертикален козметичен рекламен кадър, без прекъсвания, в слънчев минималистичен ъгъл на тоалетката.
0-5с: същата 24-годишна източноазиатска жена в свръхразмерна риза от лен в салвия зелено над бял рибен топ слага прозрачния светлозелен Nature Republic Aloe Vera 92% Soothing Gel Mist до бузата си, етикетът е обърнат към камерата и напълно четлив. Тя гледа към камерата с топла, лесна усмивка и завърта бутилката леко, така че етикетът да улавя утринната светлина.
5-10с: тя повдига бутилката малко над нивото на очите и натиска помпата за фина мъгла. Мека конусна струя от алое мъгла пръска по лицето й и улавя светлината като слабо искрящи микродропчета.
10-15с: очите й се затварят и брадичката й се повдига в малка удовлетворена усмивка, докато мъглата се установява, малки капчици почиват на скула и чело. Бутилката остава видима в долната трета част на кадъра през цялото време на този момент.
15-20с: тя отваря очи, връща бутилката обратно до бузата си с етикета квадратен към камерата и задържа последен спокоен поглед към обектива.
Камера: едно бавно, гладко приближаване от кадриране от гърдите до средно близко кадриране САМО. Не приближавайте извън средно близък кадър. Продуктът трябва да остане в рамките на кадъра през цялото време на заснемането, а етикетът трябва да бъде ясно четлив както в първите три секунди, така и в последните три секунди.
Визия: мека разсеяна утринна слънчева светлина отляво на камерата, фотореалистична текстура на кожата с реална влага на кожата, мъглата е представена като наистина заснета струя, а не цифрови частици, премиум K-красота реклама. Запазете опаковката на продукта, цветовете, материалите, разположението на етикета и текста на етикета точно както в референтните изображения; не преработвайте или пренаписвайте продукта. Няма текстови налепи, няма надписи, няма водни знаци.
Аудио: тихо ярко помещение, един мек кратък звук от помпата за спрей, нежно дишане. Няма музика, няма гласово озвучаване.
Генерирането на аудио е активирано, но подтикът изисква само тон на помещението, един звук от спрей и нежно дишане—без музика или гласово озвучаване.
6. Генерирайте и запазете видеото
След регистрацията на активите, подайте asset:// референции. Тази команда прочита запазените ID и предава всяко от тях като отделен аргумент:
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
Използването на списък от аргументи също избягва проблем с zsh от изходния проект, където няколко ID, съхранявани в една обикновена низ, могат да достигнат скрипта като един невалиден аргумент.
Скриптът запазва ID на задачата за видео, опрашва до completed, и изтегля изхода в out/video.mp4. Друго изтегляне може да презапише този път, така че архивирайте версиите, които искате да сравните.
Възобновете съществуваща задача или изтеглете отново нейния резултат с:
python3 flow.py status
Ако отговорът за създаване е загубен, изброявайте последните задачи и възобновете съответното ID:
python3 flow.py tasks
python3 flow.py status VIDEO_TASK_ID
Търсенето на съществуваща задача преди създаването на друга предотвратява случайно дублирано генериране.
7. Прегледайте изхода и итерации
Изходният проект запазва video-v1-10s.mp4 и финалното video.mp4. Първата версия продължи само 10 секунди и не показа достатъчно употреба на продукта, така че работният процес премина през втора итерация на подтика.
Прегледайте всеки резултат спрямо този контролен списък:
- [ ] Продължителността, резолюцията и съотношението на страните съвпадат с целта.
- [ ] Лицето на персонажа, облеклото и обстановката остават последователни.
- [ ] Продуктът остава видим и етикетът може да бъде прочетен в началото и в края.
- [ ] Действията на боравене и пръскане съвпадат с реалната употреба на продукта.
- [ ] Формата на бутилката, опаковката и текстът не се променят забележимо.
- [ ] Камерата не се приближава твърде много, а аудиото съвпада с искането.
Ако продължителността е грешна, инспектирайте както конфигурацията, така и действителната заявка. Ако продуктът напусне кадъра, укрепете ограниченията на камерата. Ако действието за употреба е твърде кратко, разпределете времето и поведението по-ясно. Редактирането само на prompts/prompt-video.txt не изисква регенериране на референтни изображения; регенерирайте и регистрирайте ги само когато визуалните референции трябва да се променят.
Често задавани въпроси
Защо името на модел, което изглежда правилно, връща 404?
Съкратеното име на Seedream върна model_not_found в изходния проект. Използвайте пълния API ID на модела, приет от текущия крайна точка, вместо да предполагате, че маркетинговото име на дисплея също е API идентификатор.
Защо мога да отворя изображение в браузъра си, но все пак не успявам да го регистрирам?
Потвърдете, че URL адресът връща самото изображение, а не HTML, страница за споделяне или страница за вход. Използвайте python3 flow.py check URL... преди регистрация.
Защо промяната на подтик не промени референтното изображение?
stills пропуска съществуващи файлове. Архивирайте и преместете всяко изображение, което трябва да бъде регенерирано, след което проверете дали долните референции също трябва да бъдат регенерирани.
Дали HTTP 200 означава, че видеото е завършено?
Не. Скриптът разклонява на status на задачата и изтегля само след като задачата достигне completed.
Започнете вашата първа версия
Подгответе едно продуктовo изображение, конфигурирайте достъпа до AIHubMix и изберете моделите за изображения и видео. След това оставете Claude Code да адаптира описанието на продукта и подтиките. Генерирайте трите референции, прегледайте и регистрирайте ги, създайте видеото и използвайте контролния списък, за да решите следващата итерация.
Когато бъдещ проект изисква друг модел, запазете същата структура на файловете и работния процес, след което актуализирайте избора на модел на AIHubMix и специфичните параметри на модела. Това е практическата стойност на обединената API услуга за екип за съдържание, използващ няколко AI модела: моделите могат да се променят по задача, докато работният процес остава повторно използваем.



