С одним четким изображением продукта, Claude Code и API AIHubMix вы можете генерировать ссылки на персонажей в Seedream, регистрировать их как активы виртуальных персонажей и использовать Seedance для создания рекламного объявления AI-продукта.
Этот учебник основан на реальной кампании по продаже алоэ-спрея и включает структуру проекта, конфигурацию, команды и полный видеопромпт. Целевой результат — это 20-секундное вертикальное объявление 720p с 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. При адаптации рабочего процесса обновите изображение, описание продукта и используемое действие.
| Файл | Назначение |
|---|---|
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=замените_на_ваш_api_ключ
Проект исключает .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. Сохраняйте упаковку продукта, цвета, материалы, макет этикетки и текст этикетки точно такими же, как на эталонных изображениях; не redesign или не переписывайте продукт. Без текстовых наложений, без подписей, без водяных знаков.
Аудио: тихая яркая комната, один мягкий короткий звук распыления, нежный вдох. Без музыки, без озвучивания.
Генерация аудио включена, но промпт запрашивает только тон комнаты, один звук распыления и нежный вдох — без музыки или озвучивания.
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-сервиса для команды контента, использующей несколько моделей AI: модели могут меняться в зависимости от задачи, в то время как рабочий процесс остается повторно используемым.



