Как создать рекламное объявление AI-продукта с помощью Claude Code и AIHubMix

AIHubMix9 мин чтения
Как создать рекламное объявление AI-продукта с помощью Claude Code и AIHubMix

С одним четким изображением продукта, Claude Code и API AIHubMix вы можете генерировать ссылки на персонажей в Seedream, регистрировать их как активы виртуальных персонажей и использовать Seedance для создания рекламного объявления AI-продукта.

Этот учебник основан на реальной кампании по продаже алоэ-спрея и включает структуру проекта, конфигурацию, команды и полный видеопромпт. Целевой результат — это 20-секундное вертикальное объявление 720p с AI-сгенерированным человеком и окружением.

Claude Code и AIHubMix обеспечивают полный рабочий процесс. Claude Code читает бриф проекта, пересматривает промпты и организует выполнение. AIHubMix предоставляет одну точку входа для модели, чтобы генерация изображений и видео могла работать в рамках одного проекта.

Идентификаторы моделей, параметры и обработка ошибок берутся из снимка проекта от 16 сентября 2026 года. Проверьте текущий API перед повторным использованием. Команды используют включенный flow.py и должны выполняться из корня проекта.
0:00
/0:20

Скачать полный стартовый пакет

Скачайте код, промпты, конфигурацию и образцы изображений

После извлечения перейдите в директорию 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.pyAPI-запросы, регистрация активов, опрос и загрузки
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_ratiodurationresolution и 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.jpgframe-02.jpg и frame-03.jpg. Проверьте согласованность персонажа, точность упаковки и реализм действия использования.

Скрипт пропускает существующие файлы. Если вы измените промпт, создайте резервную копию и переместите соответствующий вывод перед повторным запуском. Изменение A также может потребовать регенерации B и C.

A: Портрет персонажа
Портрет персонажа, сгенерированный AI
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 не требует регенерации эталонных изображений; регенерируйте и регистрируйте их только тогда, когда визуальные ссылки должны измениться.

0:00
/0:10

Часто задаваемые вопросы

Почему название модели, которое выглядит правильным, возвращает 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: модели могут меняться в зависимости от задачи, в то время как рабочий процесс остается повторно используемым.