HiAPI
Блог

Руководство по использованию

seedance-2-0: руководство по созданию коротких видео — практические рецепты для API hiapi

Создавайте вертикальные короткие ролики для TikTok/Reels/Shorts с помощью API задач seedance-2-0 на hiapi — генерация видео из текста и из изображения, проверенные цены, а также готовые к копированию скрипты отправки/опроса/скачивания.

Jul 1, 2026
seedance-2-0: руководство по созданию коротких видео — практические рецепты для API 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, сразу скачивайте байты данных.
  • Один и тот же вызов делает и генерацию видео из текста, и генерацию видео из изображения; комбинируя генерацию из изображения со сгенерированными статичными картинками, получайте брендовое движение продукта.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API