HiAPI
Блог

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

Создание коротких видео с помощью seedance-2.0-mini: сквозной рабочий процесс API hiapi

Jul 7, 2026
Создание коротких видео с помощью seedance-2.0-mini: сквозной рабочий процесс API hiapi

TL;DR

  • Что это: сквозной рабочий процесс создания вертикальных коротких видео в стиле TikTok/Reels на API hiapi с использованием seedance-2.0-mini — от первого вызова curl до скрипта для пакетного рендеринга контента на целую неделю. Демонстрационные фрагменты на этой странице сгенерированы именно теми запросами, что показаны в статье.
  • Почему эта модель для коротких видео: нативная поддержка 9:16, встроенный синхронный звук (без отдельной обработки звуковых эффектов), гибкая длительность от 4 до 15 секунд, черновик в 480p стоит всего $0.0272 за секунду — 4-секундный вертикальный черновик обойдётся примерно в $0.11 (цены).
  • Проверенные факты об API: prompt, duration (целое число от 4 до 15) и resolution (480p | 720p) обязательны; aspect_ratio принимает 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive. Для видео из изображения используются first_frame_url / last_frame_url. Схема строгая — неизвестные поля, такие как seed, отклоняются с ошибкой 400.
  • Рабочий процесс: генерируйте в 480p для итерации промптов, перерендеривайте отобранные фрагменты в 720p и отправляйте задачи параллельно пакетами — асинхронная очередь /v1/tasks выполнит распределение за вас.

Почему seedance-2.0-mini подходит для цикла коротких видео

Производство коротких видео — это количественная работа: вы черновите много фрагментов, оставляете немногие и публикуете ежедневно. Такому процессу нужен видео API, умеющий три вещи — дешёвую итерацию, вертикальный вывод и звук — и seedance-2.0-mini удовлетворяет всем трём:

  • Стоимость одного черновика достаточно низкая для многократных итераций. В 480p модель тарифицируется по $0.0272 за каждую секунду вывода, поэтому 4-секундный черновик стоит около $0.11, а даже полный 15-секундный фрагмент — всего около $0.41. Тариф 720p составляет $0.0586/сек. (Цены проверены по актуальной странице цен; видео тарифицируется посекундно, поэтому duration — ваш рычаг управления затратами.)
  • Нативный 9:16. Рендеринг сразу в вертикальном формате, а не кадрирование горизонтального фрагмента с потерей композиции.
  • Нативный синхронный звук. Выходной MP4 содержит дорожку AAC, сгенерированную вместе со сценой — атмосферные звуки, фоли, фоновый шум помещения. Для ленты, которая воспроизводится автоматически со звуком, это избавляет от целого этапа монтажа.

Если вам нужна более крупная модель того же класса для ключевого визуального контента, тот же рабочий процесс применим к seedance-2-0 — просто с другим ценовым тарифом.

Настройка

Вам нужен только ключ API hiapi, больше ничего — SDK не требуется. Сохраните ключ в переменной окружения:

export HIAPI_API_KEY="sk-..."

Все видеомодели на hiapi работают через единый асинхронный эндпоинт задач: POST https://api.hiapi.ai/v1/tasks немедленно возвращает taskId, затем опрашивайте GET /v1/tasks/{taskId} до завершения. Подробности см. в документации.

Ваш первый вертикальный фрагмент (T2V)

Минимальный корректный запрос требует prompt, duration и resolution. Для короткого видео добавьте aspect_ratio: "9:16":

curl -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-mini",
    "input": {
      "prompt": "Вертикальное короткое видео. На залитой солнцем барной стойке кофейни свежий матча-латте медленно наливается в прозрачный стакан, зелёный вихрь раскрывается среди молока, мягкий свет из окна, малая глубина резкости. Нативный звук: тихий фоновый шум кофейни, звук наливаемой жидкости. Чёткий, аппетитный, фотореалистичный.",
      "duration": 4,
      "resolution": "480p",
      "aspect_ratio": "9:16"
    }
  }'

Ответ возвращается мгновенно:

{"code": 200, "data": {"taskId": "tk-hiapi-01KWTTFDPHSDWZ0FP1QAS5J79Q"}, "message": "success"}

Опрашивайте задачу, пока status не станет success, затем сразу скачайте output[0].url — выходные URL временные и истекают. Ниже — фактический фрагмент, сгенерированный этим запросом (4 секунды, 480p, 9:16, с нативным звуком наливания и окружающей обстановки — включите звук, чтобы услышать):

Два практических замечания по этому рендеру: вертикальный вывод «480p» на практике составляет 496×864 пикселей, а аудио попадает в MP4 как стандартная дорожка AAC — отдельная сборка файлов не требуется.

Входные режимы, проверенные по живому API

Схема строгая. Ниже приведены реальные ответы проверки, воспроизведённые дословно, чтобы вы могли распознать их в логах:

Поле Тип Обязательность Значения
prompt string ✅ (минимальная длина 3) Ваше описание кадра
duration integer ✅ 4–15 (секунд)
resolution string ✅ 480p, 720p
aspect_ratio string необязательно 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive
first_frame_url string необязательно URL изображения начального кадра для I2V
last_frame_url string необязательно URL изображения для управления конечным кадром
image_input array необязательно Мультимодальный референс изображения
reference_video_urls array необязательно Референсные видео стиля/движения (более низкий посекундный тариф)

Если опустить обязательное поле, задача будет отклонена до создания (без списания средств):

{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: resolution: missing required field \"resolution\"; duration: missing required field \"duration\""}

Значения за пределами диапазона указывают точные границы — duration: maximum: got 16, want 15 — а неизвестные поля отклоняются, а не игнорируются:

{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: <root>: additional properties 'seed' not allowed"}

Последнее поведение стоит запомнить: если вы переносите структуру запроса от другой модели (какое-нибудь seed, size, флаг audio), seedance-2.0-mini вернёт 400, а не молча отбросит это поле.

Многоразовая функция Python

Всё, что нужно для продакшена, укладывается примерно в 40 строк — отправка, опрос, скачивание:

import os, time, requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}

def submit(prompt: str, duration: int = 4, resolution: str = "480p",
           aspect_ratio: str = "9:16", **extra) -> str:
    r = requests.post(API, headers=HEADERS, json={
        "model": "seedance-2.0-mini",
        "input": {"prompt": prompt, "duration": duration,
                  "resolution": resolution, "aspect_ratio": aspect_ratio, **extra},
    }, timeout=60)
    data = r.json()
    task_id = (data.get("data") or {}).get("taskId")
    if not task_id:
        raise RuntimeError(f"submit failed: {data}")
    return task_id

def wait(task_id: str, timeout_s: int = 900) -> dict:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        task = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
        if task["status"] == "success":
            return task
        if task["status"] == "fail":
            raise RuntimeError(f"task failed: {task.get('error')}")
        time.sleep(8)
    raise TimeoutError(task_id)

def make_clip(prompt: str, out_path: str, **kw):
    task = wait(submit(prompt, **kw))
    url = task["output"][0]["url"]          # временный URL — скачивайте сразу
    with open(out_path, "wb") as f:
        f.write(requests.get(url, timeout=120).content)

4-секундный фрагмент в 480p обычно завершается за несколько минут; в часы пик закладывайте до примерно 10 минут, прежде чем считать задачу просроченной.

Видео из изображения: фиксация начального кадра

Для коротких роликов, ориентированных на продукт, дрейф промпта — враг: вам нужен ваш продукт в кадре, а не представление модели о нём. Решение — I2V с first_frame_url: сгенерируйте (или снимите) статичный кадр, а затем анимируйте его. Вертикальный референсный кадр, подобный этому, созданный через тот же эндпоинт /v1/tasks с помощью gpt-image-2, отлично подходит в качестве начального кадра:

В запрос нужно добавить всего одно поле:

task_id = submit(
    "Горячая вода медленно льётся по кругу сверху, из воронки для пуровера начинает подниматься пар, "
    "капли падают в стеклянный сервировочный кувшин ниже, солнечный свет подсвечивает пар. Медленный мягкий наезд камеры. "
    "Нативный звук: тихий звук воды, спокойный фоновый шум утренней комнаты.",
    duration=4, resolution="480p", aspect_ratio="9:16",
    first_frame_url="https://your-cdn.example/pourover-ref.jpg",
)

Вот как выглядит реальная анимация первого кадра — статичный кадр из нашей библиотеки рецептов seedance-2.0-mini и сгенерированный из него фрагмент, та же модель и структура запроса (в данном случае 16:9):

Композиция, тон и субъект зафиксированы на вашем статичном кадре; промпту нужно описывать только движение. Если фрагмент должен закончиться на определённом кадре, есть last_frame_url — удобно для зацикливания обратно на карточку продукта.

Пакетное производство контента на неделю

Поскольку /v1/tasks асинхронен, пакетное производство сводится к: отправить все задачи, затем опрашивать. Клиентская очередь не нужна.

briefs = [
    ("mon-hook",  "Вертикальный фрагмент. Эспрессо медленно экстрагируется, …"),
    ("tue-loop",  "Вертикальный бесшовно зацикленный фрагмент. Пар поднимается из чашки, …"),
    ("wed-recipe","Вертикальный фрагмент. Съёмка сверху последовательности заваривания пуровера, …"),
    # … по одному на каждый день публикации
]

tasks = {name: submit(p, duration=6) for name, p in briefs}   # распределение
for name, tid in tasks.items():                                 # сбор результатов
    make = wait(tid)
    url = make["output"][0]["url"]
    open(f"{name}.mp4", "wb").write(requests.get(url, timeout=120).content)

Расчёт затрат остаётся предсказуемым, поскольку тарификация идёт по секундам вывода:

Сценарий Спецификация Стоимость
1 итерация черновика 4 секунды · 480p около $0.11
1 фрагмент, готовый к публикации 6 секунд · 480p около $0.16
7 фрагментов (неделя, по одному в день) 7 × 6 секунд · 480p около $1.14
Перерендер ключевого контента 6 секунд · 720p около $0.35

Проверенный рабочий процесс: каждую идею сначала черновим в 480p, сохраняем лучшие, и только их перерендериваем в 720p. О других рычагах (тарифы разрешения, обрезка длительности, пакетное планирование) см. наше руководство по контролю затрат на API генерации изображений и видео.

Приёмы промптинга для ленты

Что работало в наших тестовых рендерах, специально настроенное под короткие видео:

  • Указывайте «вертикальное» и компонуйте под него. Начинайте с «Вертикальное короткое видео.» и добавляйте aspect_ratio: "9:16", чтобы субъект был в центре высокого кадра, а не в кадрированной горизонтальной сцене, которая будет обрезана.
  • Помещайте крючок в первую секунду. Лента принимает решение за первую секунду — пусть начальное действие само будет наградой (наливание уже идёт, пар уже поднимается), а не медленный установочный кадр.
  • Прописывайте звук. Фраза «Нативный звук: …» с перечислением 2–3 конкретных звуков (наливание жидкости, фоновый шум кофейни) надёжно формирует звуковую дорожку. Без промпта вы получите лишь общий фоновый шум помещения.
  • Для зацикливаемых фрагментов минимизируйте изменения от начала к концу. Дрейфующие частицы, пульсирующее свечение, клубящийся пар — описывайте устойчивое движение, и начальный и конечный кадры окажутся достаточно близки для зацикливания.

Итог

Создание коротких видео с seedance-2.0-mini сводится к одному асинхронному эндпоинту, трём обязательным полям и посекундной тарификации, которая делает итерации дешёвыми: черновики вертикальных фрагментов в 480p обходятся примерно в четверть доллара за штуку, зафиксируйте продуктовые кадры с помощью first_frame_url, отправляйте свой календарь публикаций пакетами и перерендеривайте отобранное в 720p. Получите ключ API и начните с 4-секундного запроса curl выше — на странице модели seedance-2.0-mini есть справочник параметров и актуальные цены, чтобы продолжить.

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

Все статьи →

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

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

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