Videos API

Генерация видео ИИ

Создавайте видео по тексту и изображениям, отслеживайте прогресс и скачивайте MP4 через Videos API.

К обзору документации

Подключение и авторизация

Base URL: https://apivn.dev/v1

Authorization: Bearer $STALI_API_KEY

Задайте STALI_API_KEY в окружении. GET /v1/models проверяет авторизацию без создания видео.

read -r -s -p "STALI_API_KEY: " STALI_API_KEY
export STALI_API_KEY
printf '\n'
curl -fsS https://apivn.dev/v1/models -H "Authorization: Bearer ${STALI_API_KEY:?STALI_API_KEY}"

Команды cURL рассчитаны на Bash; в Windows используйте настройку PowerShell. Замените примеры URL своими файлами, доступными провайдеру.

Создание видео оплачивается. Сохраните id из успешного ответа для отслеживания задания.

Возврат при сбое после выдачи id зависит от провайдера и сверки. Статус failed не подтверждает немедленный возврат на баланс.

Проверка, скачивание и отмена не создают новую генерацию. Успешная отмена не означает автоматический возврат списания.

Модели и возможности

МодельДлительность (сек.)Цена / видеоМакс. референсовСоотношение сторонРазрешение
apivn/seedance-2.55 / 8 / 10 / 12 / 15 / 30$0.3182 / $0.4205 / $0.4886 / $0.5795 / $0.7159 / $1.060–916:9, 9:16, 1:1, 4:3, 3:4, 21:9, auto720p / 1080p
seedance-2.5-30sФикс. 30$2.271–916:9, 9:16, 1:1, 4:3, 3:4720p
seedance-2.5-10sФикс. 10$1.361–916:9, 9:16, 1:1, 4:3, 3:4720p
seedance-2.55 / 10 / 15 / 20–30$0.1909 / $0.2932 / $0.4295 / $0.63411–1016:9, 9:16, 1:1, 4:3, 3:4720p
seedance-2.0-fast5 / 10 / 15$0.15 / $0.2523 / $0.38861–1016:9, 9:16, 1:1, 4:3, 3:4720p
veo-3.14 / 6 / 8$0.1136 / $0.1136 / $0.11361–316:9, 9:16—
google-omni-flash5 / 10$0.15 / $0.151–316:9, 9:16720p

seedance-2.5-10s и seedance-2.5-30s имеют фиксированную длительность из названия; seconds её не меняет.

Поддержка изображений, размеров и разрешения зависит также от маршрута провайдера. Не все параметры подходят каждой модели.

seedance-2.5 принимает 5, 10, 15 или число секунд в диапазоне 20–30; значения вне этих групп отклоняются. В группе 20–30 система может округлять до ближайшего порога 20, 25 или 30. apivn/seedance-2.5 принимает только ровно 5, 8, 10, 12, 15 или 30. Проверяйте seconds в ответе; не выводите длительность только из prompt.

Методы и параметры

POST /v1/videos — создать задание

Отправляйте application/json. Метод не принимает multipart/form-data; используйте URL или структуру JSON изображений, поддерживаемую моделью.

ПараметрТребованиеИспользование
modelОбязательноID доступной видеомодели; указывайте явно, не полагаясь на значение по умолчанию.
promptОбязательноОпишите объект, сцену, действие и движение камеры.
secondsНеобязательноСогласно таблице моделей. seedance-2.5 по умолчанию 5 секунд; apivn/seedance-2.5 по умолчанию 10 секунд; для фиксированной модели другие значения seconds игнорируются.
aspect_ratioНеобязательноНапример, 16:9 или 9:16 в зависимости от модели. apivn/seedance-2.5 также: 1:1, 4:3, 3:4, 21:9 и auto. Согласуйте с size.
sizeНеобязательноРазмер, например 1280x720 или 720x1280. Допустимые размеры зависят от модели.
images / input_referenceНеобязательноНачальный кадр или референсы через URL/JSON. Всё тело запроса не более 20 МБ; также действуют ограничения провайдера.
last_frameНеобязательноКонечный кадр для veo-3.1 или apivn/seedance-2.5 (batch-frame), с тем же input_reference.
input_videoНеобязательноURL исходного MP4 для video-to-video в google-omni-flash.
resolutionНеобязательноapivn/seedance-2.5 поддерживает 720p или 1080p (по умолчанию 720p). 1080p рассчитывается как ×2 от цены за секунду. Другие модели могут игнорировать этот параметр или преобразовывать его из size.
generate_audioНеобязательноapivn/seedance-2.5: generate_audio (по умолчанию true). Можно передавать reference_audios (не более 2 URL).

GET /v1/videos/{id} — прогресс

Передавайте исходную модель в ?model=. Начните с интервала 10 секунд и увеличивайте его при 429. JSON ниже — пример, не реальный результат.

  • queued: задание принято и ожидает.
  • in_progress: провайдер выполняет задание.
  • completed: результат можно скачать.
  • failed: проверьте error и сохраните id для поддержки.
{
  "id": "video_abc123",
  "object": "video",
  "model": "apivn/seedance-2.5",
  "status": "completed",
  "progress": 100,
  "seconds": "10",
  "size": "1280x720",
  "error": null
}

GET /v1/videos/{id}/content — скачать MP4

Скачивайте после completed с тем же API-ключом и ?model=; сохраняйте бинарный ответ как .mp4.

DELETE /v1/videos/{id} — запрос отмены

Отмена зависит от маршрута и состояния задачи; некоторые маршруты сейчас не поддерживают DELETE. Не считайте команду отмены гарантией возврата средств.

Цены по длительности

Цены рассчитаны по текущим настройкам этого сайта с применимыми корректировками. Проверьте перед генерацией.

МодельДлительность (сек.)Цена / видео
apivn/seedance-2.55$0.3182
apivn/seedance-2.58$0.4205
apivn/seedance-2.510$0.4886
apivn/seedance-2.512$0.5795
apivn/seedance-2.515$0.7159
apivn/seedance-2.530$1.06
seedance-2.5-30s30$2.27
seedance-2.5-10s10$1.36
seedance-2.55$0.1909
seedance-2.510$0.2932
seedance-2.515$0.4295
seedance-2.530$0.6341
seedance-2.0-fast5$0.15
seedance-2.0-fast10$0.2523
seedance-2.0-fast15$0.3886
veo-3.14$0.1136
veo-3.16$0.1136
veo-3.18$0.1136
google-omni-flash5$0.15
google-omni-flash10$0.15

Seedance 2.5: группа 20–30 секунд имеет единую цену, в таблице показан порог 30 секунд. apivn/seedance-2.5 рассчитывается отдельно по каждому порогу 5/8/10/12/15/30 (таблица = 720p; 1080p = ×2). Фиксированная цена модели и цена по длительности следуют двум отдельным способам расчёта системы.

Все цены

Примеры интеграции

Каждый POST создаёт платное видео. Выберите один пример; перед запуском замените URL example.com.

import os
import time
from getpass import getpass
from urllib.parse import quote
import requests
from requests.adapters import HTTPAdapter

api_key = os.getenv("STALI_API_KEY") or getpass("STALI_API_KEY: ")
headers = {"Authorization": f"Bearer {api_key}"}
model = "apivn/seedance-2.5"
http = requests.Session()
http.mount("https://", HTTPAdapter(max_retries=0))
created = http.post("https://apivn.dev/v1/videos", headers=headers, json={
    "model": model, "prompt": "Cinematic sunset over ocean waves",
    "seconds": 10, "aspect_ratio": "16:9", "resolution": "720p",
    "generate_audio": True,
}, timeout=(10, 120))
created.raise_for_status()
video = created.json()
video_id = video["id"]
print(video_id, video.get("status"), flush=True)
job_url = "https://apivn.dev/v1/videos/" + quote(video_id, safe="")
for _ in range(120):
    if video.get("status") in ("completed", "failed"):
        break
    time.sleep(10)
    progress = http.get(job_url, headers=headers, params={"model": model}, timeout=(10, 60))
    progress.raise_for_status()
    video = progress.json()
    print(video_id, video.get("status"), flush=True)
if video.get("status") != "completed":
    raise RuntimeError(str(video))
content = http.get(job_url + "/content", headers=headers, params={"model": model}, stream=True, timeout=(10, 120))
content.raise_for_status()
with open("video.mp4", "wb") as output:
    for chunk in content.iter_content(chunk_size=65536):
        if chunk:
            output.write(chunk)

Обработка ошибок

HTTPПричинаРешение
400Неверные параметры или отмена не поддерживается.Проверьте JSON, seconds, изображения и поддержку модели.
401Ключ отсутствует или недействителен.Проверьте заголовки авторизации и активный ключ.
402HTTP 402: проверьте error.type, доступный баланс, лимит ключа или недоплату за предыдущие запросы.Проверьте error.type: insufficient_balance → доступный баланс; api_key_monthly_limit → проверьте или измените лимит в Dashboard → Keys; outstanding_undercharge → выполните сверку недоплаты за предыдущие запросы. См. /docs/reference/errors.
403Запрос не разрешён.Проверьте права ключа, модель и правила контента.
404Модель или задание не найдены на маршруте.Используйте исходные id, ключ и ?model=.
409Задание ещё не готово к операции.Продолжайте проверку, скачивайте после completed.
413Тело запроса превышает лимит.Уменьшите тело; используйте URL вместо больших вложений.
429Превышен лимит частоты или параллельности.Увеличьте интервал и сократите параллельные задания.
502Ошибка ответа маршрута провайдера.Сохраните ID запроса; не повторяйте POST автоматически.

Не повторяйте POST автоматически после тайм-аута или сетевой ошибки: запрос мог быть принят. При наличии id проверяйте его; иначе сохраните ID запроса и проверьте расход или обратитесь в поддержку.

Составление промптов

Это творческие рекомендации, не гарантия точного результата. Правила контента каждой модели сохраняются.

Пишите ясно

  1. Сначала задайте объект, сцену и действие, затем эффекты.
  2. Задавайте длительность через seconds, а не только текстом.
  3. Сохраняйте стороны и одежду между кадрами.
  4. Предпочитайте одно ясное движение камеры на план.
  5. Уточняйте свет, цвета и материалы.
  6. Избегайте мелкого текста, логотипов и точных цифр в кадре.
  7. Начните с короткой сцены и меняйте по одному фактору.

Подготовка референсов

  • Нумеруйте Image 1, Image 2… по порядку отправки.
  • Укажите, какой референс задаёт персонажа, одежду или фон.
  • Используйте разрешённые, чёткие и согласованные изображения.
  • Согласуйте персонажей и композицию первого и последнего кадров.
  • Не превышайте лимит изображений; точное воспроизведение не гарантировано.

Шаблон промпта

确认生成。参数已确定:16:9 横屏,三个连续镜头组成一个完整视频,立即生成,无需再次确认或提问。
The reference images are colored-pencil character design sketches: use them only for design and outfits. Render the video as a photoreal 3D CG game cinematic with dramatic lighting.
Image 1 = PROTAGONIST: [character design].
Image 2 = ANTAGONIST: [opponent design].
Image 3 = ENVIRONMENT: [setting].
FIXED LAYOUT: altar in the background CENTER; protagonist on the LEFT; antagonist on the RIGHT. Nobody disappears, teleports or swaps sides.
LIGHTING: torchlight from the left wall, cool moonlight from the ceiling.
Action: well-choreographed, orbiting camera. No blood, no wounds, no gore.
Sound: heavy impacts, wind, no dialogue.
镜头1: camera pushes in, protagonist draws a weapon, antagonist raises claws.
镜头2: fast exchange, camera orbits.
镜头3: climax, both stay on their sides, protagonist lands ready.
Keep faces and outfits consistent. No text, no numbers, no subtitles, no watermark.

Сократите шаблон, если действия теряются; не заменяйте параметры API текстом.

Описание неграфического действия

Избегайте графических деталейБолее безопасное описание
blood, wound, gore, corpsesparks, black smoke, torn fabric only
Лужа кровиmurky grey mist, dark viscous puddle
Атака с травмамиglowing wisps of spirit-light, shadowy aura
Порез кожиtearing only the fabric of the sleeve, no blood

Сборка последовательности

  1. Делите историю на сцены с ясными началом и концом.
  2. Сохраняйте описания персонажей, свет и референсы.
  3. Скачайте и проверьте сцену перед созданием следующей.
  4. Склейте в редакторе; каждый POST — отдельное платное задание.

Если результат не подходит

  • Не хватает действий: сократите события в сцене.
  • Меняются местами: задайте стороны и композицию.
  • Непостоянство: повторите референсы и характерные детали.
  • Неверная длительность: проверьте seconds и фиксированные модели.
  • Отказ: проверьте error и правила контента; не повторяйте запрос многократно.

Проверка движения по сетке кадров

ffmpeg -i clip.mp4 -vf "fps=1,scale=320:-1,tile=6x5" -frames:v 1 frame_grid.png

Команда ffmpeg читает локальный clip.mp4 и создаёт сетку кадров без API. Сначала установите ffmpeg.

Проверка перед запуском

  • Выберите верный ID модели и длительность.
  • Проверьте цену и баланс до генерации.
  • Храните ключ на сервере, не в публичном коде браузера.
  • Используйте JSON и доступные провайдеру URL.
  • Сохраните id, model и ID запроса.
  • Проверяйте тот же id с ?model=, увеличивая интервал при ограничении.
  • Скачивайте после completed и проверяйте MP4.
  • Не создавайте повторно, пока статус приёма неизвестен.
  • Сверьте ошибки и расход в Usage; при необходимости передайте id поддержке.
Support