З однією чіткою зображенням продукту, Claude Code та API AIHubMix ви можете генерувати посилання на персонажів у Seedream, реєструвати їх як активи віртуальних персонажів і використовувати Seedance для створення реклами продукту з використанням штучного інтелекту.
Цей посібник базується на реальній кампанії з алое-спреєм і включає структуру проекту, конфігурацію, команди та повний відеопромт. Цільовий вихід - це 20-секундна, 720p, 9:16 вертикальна реклама з AI-генерованою особою та обстановкою.
Claude Code та AIHubMix забезпечують повний робочий процес. Claude Code читає проектне завдання, переглядає промти та організовує виконання. AIHubMix надає одну точку входу для моделі, щоб генерація зображень та відео могла працювати в одному проекті.
Ідентифікатори моделей, параметри та обробка помилок походять з моментального знімка проекту, датованого 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 підходить для цього робочого процесу
Робочий процес реклами продукту зазвичай потребує більше ніж одну модель. Модель зображення створює посилання на особу та продукт; модель відео створює рух і поведінку камери. 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 належать до генерації відео. Скрипт створює окремі запити, а не відправляє весь об'єкт конфігурації на обидва кінцеві пункти.
Проект використовує ці ідентифікатори моделей:
- 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. Хостинг зображень та реєстрація активів віртуального портрету
Стартовий пакет не містить ідентифікатора активу з облікового запису автора. Зареєструйте посилання у своєму обліковому записі.
Цей проект використовує публічні URL-адреси зображень для реєстрації. Джерельний робочий процес використовував сирі URL-адреси GitHub, закріплені за комітом SHA, але будь-який хостинг, який повертає зображення без аутентифікації, може працювати.
URL-адреса GitHub /blob/ повертає 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, і записує ідентифікатори активів у 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-beauty. Зберігайте упаковку продукту, кольори, матеріали, макет етикетки та текст етикетки точно такими ж, як на зображеннях посилання; не переробляйте або не змінюйте продукт. Ніяких текстових накладок, ніяких підписів, ніяких водяних знаків.
Аудіо: тихий яскравий простір, один м’який короткий звук спрею, ніжний подих. Ніякої музики, ніякого озвучення.
Генерація аудіо увімкнена, але промт запитує лише тон кімнати, один звук спрею та ніжний подих—без музики або озвучення.
6. Генеруйте та зберігайте відео
Після реєстрації активів подайте asset:// посилання. Ця команда читає збережені ідентифікатори та передає кожен з них як окремий аргумент:
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 з вихідного проекту, де кілька ідентифікаторів, збережених в одному простому рядку, можуть дійти до скрипту як один недійсний аргумент.
Скрипт зберігає ідентифікатор завдання відео, опитує, поки не досягне completed, і завантажує вихід до out/video.mp4. Інше завантаження може перезаписати цей шлях, тому зробіть резервні копії версій, які ви хочете порівняти.
Відновіть існуюче завдання або повторно завантажте його результат за допомогою:
python3 flow.py status
Якщо відповідь на створення була втрачена, перелікуйте останні завдання та відновіть відповідний ідентифікатор:
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, прийнятий поточним кінцевим пунктом, а не припускайте, що маркетингова назва також є ідентифікатором API.
Чому я можу відкрити зображення у своєму браузері, але все ще не можу його зареєструвати?
Переконайтеся, що URL-адреса повертає саме зображення, а не HTML, сторінку спільного доступу або сторінку входу. Використовуйте python3 flow.py check URL... перед реєстрацією.
Чому зміна промту не змінила зображення для посилання?
stills пропускає існуючі файли. Зробіть резервну копію та перемістіть будь-яке зображення, яке потрібно повторно згенерувати, а потім перевірте, чи потрібно також повторно генерувати нижчі посилання.
Чи означає HTTP 200, що відео завершено?
Ні. Скрипт розгалужується за status завдання і завантажує лише після того, як завдання досягає completed.
Почніть свою першу версію
Підготуйте одне зображення продукту, налаштуйте доступ до AIHubMix і виберіть моделі зображень та відео. Потім дозвольте Claude Code адаптувати опис продукту та промти. Генеруйте три посилання, перегляньте та зареєструйте їх, створіть відео та використовуйте контрольний список, щоб вирішити наступну ітерацію.
Коли майбутній проект потребує іншої моделі, зберігайте ту ж структуру файлів і робочий процес, а потім оновлюйте вибір моделі AIHubMix та специфічні параметри моделі. Це практична цінність єдиного API-сервісу для команди контенту, що використовує кілька моделей ШІ: моделі можуть змінюватися за завданням, тоді як робочий процес залишається повторно використовуваним.



