Генерация видео ИИ
Создавайте видео по тексту и изображениям, отслеживайте прогресс и скачивайте 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.5 | 5 / 8 / 10 / 12 / 15 / 30 | $0.3182 / $0.4205 / $0.4886 / $0.5795 / $0.7159 / $1.06 | 0–9 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, auto | 720p / 1080p |
seedance-2.5-30s | Фикс. 30 | $2.27 | 1–9 | 16:9, 9:16, 1:1, 4:3, 3:4 | 720p |
seedance-2.5-10s | Фикс. 10 | $1.36 | 1–9 | 16:9, 9:16, 1:1, 4:3, 3:4 | 720p |
seedance-2.5 | 5 / 10 / 15 / 20–30 | $0.1909 / $0.2932 / $0.4295 / $0.6341 | 1–10 | 16:9, 9:16, 1:1, 4:3, 3:4 | 720p |
seedance-2.0-fast | 5 / 10 / 15 | $0.15 / $0.2523 / $0.3886 | 1–10 | 16:9, 9:16, 1:1, 4:3, 3:4 | 720p |
veo-3.1 | 4 / 6 / 8 | $0.1136 / $0.1136 / $0.1136 | 1–3 | 16:9, 9:16 | — |
google-omni-flash | 5 / 10 | $0.15 / $0.15 | 1–3 | 16:9, 9:16 | 720p |
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.5 | 5 | $0.3182 |
apivn/seedance-2.5 | 8 | $0.4205 |
apivn/seedance-2.5 | 10 | $0.4886 |
apivn/seedance-2.5 | 12 | $0.5795 |
apivn/seedance-2.5 | 15 | $0.7159 |
apivn/seedance-2.5 | 30 | $1.06 |
seedance-2.5-30s | 30 | $2.27 |
seedance-2.5-10s | 10 | $1.36 |
seedance-2.5 | 5 | $0.1909 |
seedance-2.5 | 10 | $0.2932 |
seedance-2.5 | 15 | $0.4295 |
seedance-2.5 | 30 | $0.6341 |
seedance-2.0-fast | 5 | $0.15 |
seedance-2.0-fast | 10 | $0.2523 |
seedance-2.0-fast | 15 | $0.3886 |
veo-3.1 | 4 | $0.1136 |
veo-3.1 | 6 | $0.1136 |
veo-3.1 | 8 | $0.1136 |
google-omni-flash | 5 | $0.15 |
google-omni-flash | 10 | $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 | Ключ отсутствует или недействителен. | Проверьте заголовки авторизации и активный ключ. |
| 402 | HTTP 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 запроса и проверьте расход или обратитесь в поддержку.
Составление промптов
Это творческие рекомендации, не гарантия точного результата. Правила контента каждой модели сохраняются.
Пишите ясно
- Сначала задайте объект, сцену и действие, затем эффекты.
- Задавайте длительность через seconds, а не только текстом.
- Сохраняйте стороны и одежду между кадрами.
- Предпочитайте одно ясное движение камеры на план.
- Уточняйте свет, цвета и материалы.
- Избегайте мелкого текста, логотипов и точных цифр в кадре.
- Начните с короткой сцены и меняйте по одному фактору.
Подготовка референсов
- Нумеруйте 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, corpse | sparks, 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 |
Сборка последовательности
- Делите историю на сцены с ясными началом и концом.
- Сохраняйте описания персонажей, свет и референсы.
- Скачайте и проверьте сцену перед созданием следующей.
- Склейте в редакторе; каждый 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 поддержке.

