Руководство по использованию
seedance-2-0: руководство по созданию коротких видео — практические рецепты для API hiapi
Создавайте вертикальные короткие ролики для TikTok/Reels/Shorts с помощью API задач seedance-2-0 на hiapi — генерация видео из текста и из изображения, проверенные цены, а также готовые к копированию скрипты отправки/опроса/скачивания.
Краткий обзор
- Что это: готовый к запуску и воспроизводимый рецепт, который учит создавать вертикальные короткие видео (TikTok / Reels / Shorts) с помощью
seedance-2.0на hiapi. Встроенный ниже ролик сгенерирован именно по напечатанному выше промпту — это не чужая демонстрация. - Два режима, одна модель:
seedance-2.0на одном эндпоинте поддерживает и генерацию видео из текста, и генерацию видео из изображения — можно начать с промпта или оживить уже готовую статичную картинку. - Факты об API (проверены на платформе):
seedance-2.0работает на асинхронном эндпоинте задач (/v1/tasks). Объектinputтребуетprompt,aspect_ratio(обязательно — для коротких видео используйте9:16),resolution(480p/720p/1080p) иdurationв секундах. Результат возвращается в формате MP4 по адресуoutput[0].url. - Цены (за секунду выходного видео): $0.136/сек для
480p, $0.293/сек для720p, $0.729/сек для1080p. Ролик длительностью 4 секунды в 480p стоит $0.54. Актуальные цены смотрите на странице цен. - Как запустить: отправьте POST в API задач, опрашивайте до статуса
success, затем скачайте MP4 поoutput[0].url— этот URL временный и истекает, поэтому сразу сохраняйте байты данных. Полные готовые к копированию скрипты (оба режима + пакетный цикл) см. в конце статьи.
Почему для коротких видео выбирают seedance-2.0
У платформ коротких видео есть устоявшийся синтаксис: вертикальный 9:16, длительность в несколько секунд, один чёткий ритмический акцент. Именно под это и создан seedance-2.0. Ему достаточно одного флага соотношения сторон, чтобы отрисовать кинематографичное движение, поэтому вам не приходится бороться с моделью за вертикальный кадр — просто запросите 9:16, и она скомпонует кадр именно так.
Ещё одна причина — рабочий процесс: каждый ролик представляет собой одну асинхронную задачу. Вы отправляете задание, опрашиваете ID задачи и получаете готовый MP4. Никаких потоковых сокетов, за которыми нужно следить, и никаких 100-секундных тайм-аутов, которых нужно избегать, — это тот же протокол задач, что и у всех остальных генеративных моделей hiapi, так что если вы уже вызывали модели изображений, логика управления здесь та же.
Режим 1 — генерация видео из текста
Это самый быстрый путь к ролику: опишите кадр, выберите соотношение сторон и длительность, отправьте.
Приведённый ниже промпт — именно тот, который я реально запускал. Пишите как режиссёр — субъект, освещение, движение камеры — а не как список ключевых слов.
Промпт: Бариста готовит эспрессо в залитом солнцем кафе, крупный план крема, закручивающегося в чашке, тёплый утренний свет, легкий поднимающийся пар, малая глубина резкости, плавное движение камеры с рук вперёд.
Настройки:
aspect_ratio: 9:16,resolution: 480p,duration: 4
Этот ролик имеет нативное соотношение 9:16 и сразу помещается в ленту Reels/Shorts. Рендеринг занял примерно две минуты и при текущем тарифе 480p обошёлся примерно в $0.54 — достаточно дешево, чтобы сгенерировать несколько вариантов и оставить лучший.
Тело запроса небольшое. Поле, которое часто упускают, — aspect_ratio: оно обязательное, и если его пропустить, API отклонит задачу с ошибкой missing required field "aspect_ratio".
import os, json, requests
TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
payload = {
"model": "seedance-2.0",
"input": {
"prompt": (
"A barista pulls a shot of espresso in a sunlit cafe, close-up on the "
"crema swirling into the cup, warm morning light, gentle steam rising, "
"shallow depth of field, smooth handheld camera push-in."
),
"aspect_ratio": "9:16", # required — 9:16 for short-form
"resolution": "480p", # 480p | 720p | 1080p
"duration": 4, # seconds
},
}
r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
task_id = r.json()["data"]["taskId"]
print("submitted:", task_id)
Режим 2 — генерация видео из изображения
Второй режим — оживить предоставленную вами статичную картинку, а не создавать сцену с нуля. Именно это нужно для брендовых задач: сделайте (или сгенерируйте) чистый статичный снимок продукта, а затем дайте seedance-2.0 добавить движение, чтобы композиция и продукт оставались в рамках бренд-гайда.
Форма вызова та же, что и у текстовой задачи — сохраняются aspect_ratio, resolution и duration, а ваш промпт теперь описывает движение, которое нужно применить к кадру («медленное приближение», «модель поворачивается к камере», «начинает подниматься пар»), а не всю сцену. Скомбинируйте это со статичным изображением из моделей изображений, и у вас получится двухшаговый конвейер: сгенерировать ключевой визуал, а затем оживить его.
Совет: ролики из изображения лучше делать короткими (4 секунды), а движение — тонким. Короткие видео вознаграждают один чистый ритмический акцент, а не перегруженный кадр.
Расчёт стоимости пакета коротких видео
Поскольку тарификация идёт за секунду выходного видео, ваши расходы легко предсказуемы — выберите разрешение и умножьте на длительность ролика:
| Разрешение | Цена / сек | Ролик 4 сек | Ролик 8 сек |
|---|---|---|---|
| 480p | $0.136 | $0.54 | $1.09 |
| 720p | $0.293 | $1.17 | $2.34 |
| 1080p | $0.729 | $2.92 | $5.83 |
Чтобы итеративно отрабатывать хук, черновите в 480p — это вчетверо дешевле 720p и вполне достаточно, чтобы оценить композицию и движение. Перерендеривайте в 720p или 1080p только победный вариант для финальной публикации. Актуальные тарифы по моделям смотрите на странице цен.
Полный скрипт — отправка, опрос, скачивание
Это сквозная версия: отправить задание на генерацию видео из текста, опрашивать задачу до завершения, затем сохранить MP4. Шаг скачивания важен — output[0].url представляет собой временную ссылку, которая истекает, поэтому сразу после успешного завершения задачи запишите байты на диск.
import os, json, time, requests
TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
def submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4):
payload = {
"model": "seedance-2.0",
"input": {
"prompt": prompt,
"aspect_ratio": aspect_ratio, # required
"resolution": resolution, # 480p | 720p | 1080p
"duration": duration, # seconds
},
}
r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
r.raise_for_status()
return r.json()["data"]["taskId"]
def wait(task_id, timeout_s=600, poll=8):
deadline = time.time() + timeout_s
while time.time() < deadline:
r = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30)
data = r.json().get("data", {})
status = data.get("status")
if status == "success":
return data
if status == "fail":
raise RuntimeError(f"task failed: {data.get('error')}")
time.sleep(poll)
raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")
def download(task, path):
out = task["output"][0]
assert out["type"] == "video", f"unexpected output type: {out['type']}"
# output[0].url is temporary (see expireAt) — save immediately.
resp = requests.get(out["url"], timeout=120)
resp.raise_for_status()
with open(path, "wb") as f:
f.write(resp.content)
return path
if __name__ == "__main__":
prompt = (
"A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema "
"swirling into the cup, warm morning light, gentle steam rising, shallow "
"depth of field, smooth handheld camera push-in."
)
tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
print("submitted:", tid)
task = wait(tid)
print("saved:", download(task, "espresso_9x16.mp4"))
Чтобы превратить один хук в целую партию, оберните submit / wait / download в цикл по промптам:
HOOKS = {
"espresso": "A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema, gentle steam, handheld push-in.",
"matcha": "A whisk froths bright green matcha in a ceramic bowl, top-down light, slow spiral motion, calm morning mood.",
"pour-over": "Hot water spirals over fresh coffee grounds in a dripper, close macro, steam rising, warm backlight.",
}
for name, prompt in HOOKS.items():
tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
task = wait(tid)
download(task, f"{name}_9x16.mp4")
print("done:", name)
Сделайте черновик этой партии в 480p, выберите победителей, перерендерите их в 1080p и публикуйте. Вот и весь цикл короткого видео на одной модели и одном эндпоинте.
Ключевые выводы
seedance-2.0— это одна асинхронная задача на/v1/tasks, возвращающая MP4, — та же логика управления, что и у моделей изображений hiapi.aspect_ratioобязательное; для TikTok / Reels / Shorts используйте9:16.- Тарификация за секунду выходного видео: 480p $0.136/сек, 720p $0.293/сек, 1080p $0.729/сек — поэтому дешево черновите в 480p, а в высоком разрешении завершайте только победителей.
- Выходной URL временный — как только задача сообщает
success, сразу скачивайте байты данных. - Один и тот же вызов делает и генерацию видео из текста, и генерацию видео из изображения; комбинируя генерацию из изображения со сгенерированными статичными картинками, получайте брендовое движение продукта.
Похожие статьи
Все статьи →-
Руководство по использованию
Руководство по началу работы с seedream-5.0-pro/image-to-image: возможности, цены и ключевые моменты интеграции
Границы возможностей модели редактирования изображений ByteDance, принципы тарификации и практика инженерной интеграции
-
Руководство по использованию
Руководство по использованию seedream-5.0-pro text-to-image: границы возможностей, интеграция API и контроль затрат
Практический взгляд для разработчиков: от ключевых параметров до оценки стоимости $0.05 за изображение
-
Руководство по использованию
Руководство по началу работы с Hailuo 2.3 Fast для генерации видео из изображений: границы возможностей, цены и практика интеграции
Ключевые моменты выбора и интеграции модели MiniMax для генерации видео из изображений для разработчиков