Зачем нужны две модели, а не одна
Seedance 2.0 умеет создавать видео непосредственно из текста, так зачем сначала делать изображение? Потому что успех рекламы зависит от точности отображения продукта, а текстовый промпт не может надёжно воспроизвести ваш настоящий флакон, этикетку и упаковку. Решение — сначала зафиксировать реальный продукт на статичном изображении, а затем анимировать именно его.
Seedream 5.0 Pro отвечает за изображение. Это модель генерации и редактирования изображений, которая планирует композицию до рендеринга, добавляет текст на изображение на 14 языках с корректными начертаниями букв и принимает до 10 референсных изображений, используя вашу настоящую упаковку как источник истины. Seedance 2.0 отвечает за видео — это модель ByteDance, преобразующая текст, изображения и референсы в видео и генерирующая синхронизированный звук за один проход, вместо того чтобы добавлять закадровую озвучку позже (описание архитектуры и утверждение о нативном звуке приведены в статье на arXiv). Только режим reference-to-video в Seedance 2.0 позволяет передать ей кадр Seedream и сказать: «сохрани этот продукт и создай вокруг него сцену».
Одна фотография на входе, десять видео на выходе, а продукт остаётся единообразным во всех роликах. В этом и заключается вся идея.

Цепочка из двух моделей: Seedream 5.0 Pro создаёт статичный кадр, а Seedance 2.0 его анимирует.
Математика затрат, которая определяет, стоит ли это делать
Сначала я сопоставил цифры, потому что именно они действительно оправдывают создание такого процесса.
| Десять готовых вертикальных рекламных роликов по 15 секунд |
Этот процесс (API) |
Десять роликов с участием людей |
| Главное изображение |
$0.081 (один кадр Seedream в разрешении 2K, используется повторно) |
включено в стоимость съёмки |
| 10 видео |
~$24.95 (10 × 720p, Seedance, 15 с) |
— |
| Итого за 10 рекламных роликов |
≈ $25 |
$1 500–3 000 |
| Права на использование в платной рекламе |
включены |
+25–30% |
| Срок выполнения |
один день |
~неделя |
Это примерно $2.58 за готовый 15-секундный рекламный ролик. Цены взяты со страниц GPT Proto, посвящённых Seedream 5.0 Pro и Seedance 2.0 (на 10% ниже прайс-листа ByteDance); диапазон стоимости работы людей взят из обзоров ставок UGC за 2026 год. Мой вывод — и это оценка, а не измеренное утверждение — деньги даже не являются главным преимуществом. Настоящая выгода в том, что вариативность становится бесплатной: пропустите одну фотографию продукта через десять промптов и получите десять вариантов для A/B-тестирования вместо одного.
Что вам понадобится
Аккаунт GPT Proto с API-ключом (регистрация по электронной почте, без подтверждения телефона или компании), Python 3 с библиотекой requests, одна фотография продукта, размещённая по публичному URL, и около $30 на балансе, чтобы пару раз запустить полную партию из десяти рекламных роликов. Возьмите ключ в панели управления — он выглядит как sk-... — и вставьте его как необработанное значение заголовка Authorization точно так, как показано в документации, без префикса Bearer .
Шаг 1 — Превратите фотографию продукта в ключевой кадр
Обе модели работают асинхронно: вы отправляете задание через POST, получаете обратно id предсказания, а затем опрашиваете GET /api/v3/predictions/{id}/result, пока значение status не станет равным succeeded. Ниже — небольшой опросчик, который мы повторно используем для обоих шагов.
import requests, json, time
API_KEY = "sk-xxxxx" # paste your key directly, no "Bearer"
HEADERS = {"Authorization": API_KEY, "Content-Type": "application/json"}
BASE = "https://gptproto.com/api/v3"
def submit(path, payload):
r = requests.post(f"{BASE}/{path}", headers=HEADERS, data=json.dumps(payload))
r.raise_for_status()
return r.json()["data"]["id"]
def wait(pred_id, every=5, timeout=600):
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(f"{BASE}/predictions/{pred_id}/result", headers=HEADERS)
data = r.json()["data"]
if data["status"] == "succeeded":
return data["outputs"][0]
if data["status"] in ("failed", "expired"):
raise RuntimeError(f"job {data['status']}: {data.get('error')}")
time.sleep(every)
raise TimeoutError("polling timed out")
Теперь возьмите единственную фотографию продукта и поместите её в сцену с помощью задачи image-edit. Формулируйте запрос как техническое задание для дизайнера, а не как подпись к изображению: сначала укажите правила композиции, а определения стиля оставьте в конце. Назовите тип освещения напрямую — именно от этого зависит реалистичность Seedream. Ограничьтесь примерно 30–80 словами и используйте портретный размер 2K, чтобы статичный кадр соответствовал формату видео 9:16.
product_photo = "https://your-cdn.com/serum-bottle.png" # the one photo you start with
edit_prompt = (
"Place this matte-black serum bottle on a wet bathroom counter, "
"soft window light from the left, water droplets on the glass, "
"shallow depth of field, photoreal product photography, keep the label exactly as shown"
)
img_id = submit(
"bytedance/dola-seedream-5-0-pro-260628/image-edit",
{"prompt": edit_prompt, "images": [product_photo], "size": "1600*2848"},
)
hero_image_url = wait(img_id)["url"] # feed this into Seedance next
print(hero_image_url)
Тот же запрос в cURL, если сначала тестируете из командной строки:
curl --location 'https://gptproto.com/api/v3/bytedance/dola-seedream-5-0-pro-260628/image-edit' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"Place this matte-black serum bottle...","images":["https://your-cdn.com/serum-bottle.png"],"size":"1600*2848"}'
Обратите внимание: формат size использует звёздочку (1600*2848), а не x. Изображение 2K стоит $0.081; тот же кадр в 1K (832*1248) обойдётся в $0.0405, если вы создаёте черновые концепции. Первое референсное изображение предоставляется бесплатно; дополнительные стоят по $0.0027 каждое, максимум 10 изображений.
Шаг 1: тот же флакон перемещён из простой студийной фотографии в сцену, готовую для UGC.
Шаг 2 — Напишите UGC-промпт (здесь проваливается большинство рекламных роликов)
Промпт для рекламы в Seedance — это техническое задание для съёмки, а не описание, потому что модель за один проход создаёт и изображение, и звук. Структурируйте его в четыре слоя: объект и сцену (опишите автора или продукт минимум тремя конкретными визуальными деталями), хук в первые 0–3 секунды, момент демонстрации продукта на 4–10-й секунде и чистый финальный кадр. Реплики произносите в двойных кавычках и делайте короткими — длинные монологи нарушают синхронизацию губ.
Почти все сталкиваются с одной ловушкой — чрезмерной отточенностью. Естественная реакция — попросить кинематографичный свет и эффектное движение камеры, но в UGC-ленте это выглядит ненатурально. Убедительный ролик должен выглядеть так, будто его действительно снял обычный человек в ванной на телефон: лёгкая съёмка с рук, естественный свет из окна, никакого студийного блеска. Не помещайте в один промпт две идеи: один формат на одну генерацию.

Четыре слоя, которые нужны каждому UGC-промпту для Seedance 2.0.
Шаг 3 — Анимируйте ключевой кадр с помощью Seedance 2.0
Именно этот шаг пропускают гайды по песочнице. Используйте reference-to-video и передайте URL Seedream в поле images — это сохранит ваш точный продукт на экране. Сопоставьте duration с таймингом, указанным в промпте, установите 9:16 для TikTok и Reels и оставьте generate_audio включённым, чтобы диалог отрендерился нативно.
video_prompt = (
"UGC-style phone video, vertical, a woman in her late twenties in a bright bathroom "
"holding the serum bottle to camera with easy creator energy, slightly handheld, "
"natural window light. She says: \"Okay this one actually cleared my skin in a week.\" "
"Cut to a macro close-up of the dropper. Ends on the bottle held up, label facing camera."
)
vid_id = submit(
"bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{
"prompt": video_prompt,
"images": [hero_image_url], # product consistency comes from here
"aspect_ratio": "9:16",
"duration": 15,
"resolution": "720p",
"generate_audio": True,
"seed": -1,
},
)
print(wait(vid_id, every=10)["url"]) # video takes longer -- poll less often
curl --location 'https://gptproto.com/api/v3/bytedance/dreamina-seedance-2-0-260128/reference-to-video' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"UGC-style phone video...","images":["HERO_IMAGE_URL"],"aspect_ratio":"9:16","duration":15,"resolution":"720p","generate_audio":true}'
Если вы предпочитаете анимировать один начальный кадр без полноценной системы референсов, image-to-video использует одно поле image вместо массива images, а в остальном работает так же.
Шаг 4 — Создайте десять вариантов пакетно
Вот главное преимущество работы с кодом: десять вариантов требуют столько же усилий, сколько один. Запустите видеозапрос в цикле с десятью разными промптами, используя один и тот же ключевой кадр, отправьте их все, а затем соберите URL.
angles = [
"...opens on a splash of water, energetic hook, 'wait for it'...",
"...opens mid-sentence, skeptical creator tone, 'I did not expect this'...",
"...opens on the product already in hand, calm morning-routine demo...",
"...street-style, walking and talking, quick to-camera line...",
"...close friend recommendation, sitting on the bathroom floor...",
# ...ten total, one format each
]
jobs = [
submit("bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{"prompt": p, "images": [hero_image_url], "aspect_ratio": "9:16",
"duration": 15, "resolution": "720p", "generate_audio": True})
for p in angles
]
clips = [wait(j, every=10)["url"] for j in jobs]
for i, url in enumerate(clips, 1):
print(f"ad {i}: {url}")

Один ключевой кадр, десять рекламных ракурсов — партия из шага 4.
Характеристики и цены Seedance 2.0
| Разрешение |
Соотношение сторон |
Длительность |
Цена за запуск |
| 480p |
16:9 |
4 с |
$0.3094 |
| 720p |
16:9 |
15 с |
$2.4948 |
| 1080p |
16:9 |
15 с |
$6.1746 |
| 4K |
16:9 |
15 с |
$12.83 |
Доступны разрешения 480p/720p/1080p/4K, длительность от 4 до 15 секунд и шесть соотношений сторон (9:16, 1:1, 16:9, 4:3, 3:4, 21:9). В разрешении 720p формат 16:9 даёт изображение 1280×720, а 1080p — 1920×1088. Для платной рекламы в соцсетях я бы выбрал 720p 9:16: это оптимальный вариант по стоимости, а сжатие ленты всё равно съедает большую часть преимущества 1080p. Полные таблицы доступны на странице модели Seedance 2.0 и странице модели.
Ошибки, которые действительно мешают
Несовпадение длительности — незаметная, но важная проблема: если ваш промпт рассчитан на 15 секунд, а duration оставить со значением по умолчанию 5, модель ускорит или обрежет сцену. Согласуйте эти параметры. Ошибка 503 от API означает отклонение контента политикой (она возвращается как 400) — перепишите запрос и отправьте его заново, вместо того чтобы бездумно повторять попытку. Ошибка 403 обычно означает недостаточный баланс, а не неправильный ключ. Если ролик выглядит как реклама люксового бренда, это не победа для UGC-размещения — упростите промпт в сторону формулировки «снято на телефон».
Перед публикацией
Относитесь к каждому результату как к черновику рекламы, а не как к готовому материалу. Перед запуском рекламы проверьте заявления о продукте, права на использованную фотографию, рекламную политику платформы и действующие в вашем регионе правила раскрытия использования ИИ. ИИ устраняет производственные расходы, но не снимает с вас ответственность за содержание рекламы.
Все изображения в этой публикации — обложка и четыре иллюстрации — были созданы с помощью Seedream 5.0 Pro примерно за $0.24. Тот же процесс, тот же ключ.