Генерация видео
Видео-модели — от 30 секунд до нескольких минут. Используйте async + polling через /queue — sync-режим (/run) для них почти всегда отвалится по 5-минутному таймауту.
Минимальный пример
const NA_API_KEY = process.env.NA_API_KEY
const BASE = 'https://api.neuroartist.ru'
// 1. Отправить задачу
const submit = await fetch(`${BASE}/queue/wan-25-preview/text-to-video`, {
method: 'POST',
headers: {
Authorization: `Bearer ${NA_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
prompt: 'A cinematic shot of a snowy forest at dawn, slow camera pan',
duration: 5,
aspect_ratio: '16:9'
})
}).then(r => r.json())
// { requestId: "req_abc", status: "IN_QUEUE" }
// 2. Polling до terminal-состояния
while (true) {
const status = await fetch(
`${BASE}/queue/wan-25-preview/text-to-video/requests/${submit.requestId}/status`,
{ headers: { Authorization: `Bearer ${NA_API_KEY}` } }
).then(r => r.json())
if (status.state === 'completed') break
if (status.state === 'failed') throw new Error(status.error ?? 'Generation failed')
await new Promise(r => setTimeout(r, 2000))
}Результат:
{
"video": {
"url": "https://s3.cloud.ru/neuroartist/.../result.mp4",
"content_type": "video/mp4",
"duration": 5.0
},
"seed": 42
}Популярные модели
| modelId | Назначение | Цена |
|---|---|---|
wan-25-preview/text-to-video | text-to-video, до 8 сек | 60 ₽ / 5 сек |
kling-video/v2/standard/text-to-video | text-to-video Kling | 80 ₽ / 5 сек |
kling-video/v2/standard/image-to-video | image-to-video Kling | 80 ₽ / 5 сек |
runway-gen3/turbo/image-to-video | Runway Gen-3 Turbo | 100 ₽ / 5 сек |
luma-dream-machine | Luma Dream Machine | 90 ₽ / 5 сек |
minimax/video-01-live | MiniMax video-01 | 70 ₽ / 5 сек |
Полный каталог — GET /models?category=video или /generate.
Image-to-video
Передайте URL стартового кадра в image_url:
curl -X POST https://api.neuroartist.ru/queue/kling-video/v2/standard/image-to-video \
-H "Authorization: Bearer na_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://your-cdn.example.com/keyframe.jpg",
"prompt": "slow camera dolly forward",
"duration": 5
}'Источники изображения — Загрузка файлов.
Production-режим
Видео-генерация может занять 1–5 минут. Если ваш runtime serverless или клиент закрывает вкладку:
- Сделайте submit через
POST /queue/{modelId}и сохранитеrequestIdв очередь/таблицу/Redis. - Отдельный фоновый воркер (cron, queue worker, edge function на расписании) опрашивает
GET /queue/{modelId}/requests/{id}/statusкаждые 5–10 секунд. - Когда
state === "completed"— забирает результат черезGET /queue/{modelId}/requests/{id}и кладёт в свой store.
Эта схема не зависит от длительности HTTP-соединения и устойчива к рестартам клиентского рантайма.
Что НЕ делать
- ❌ Не используйте
POST /runдля видео — sync-таймаут 5 минут, видео часто длиннее. - ❌ Не игнорируйте
failedстадию — генерация может упасть через несколько секунд после submit (например, NSFW-фильтр).
Что приходит
{
"video": {
"url": "https://s3.cloud.ru/neuroartist/.../result.mp4",
"content_type": "video/mp4",
"duration": 5.0
},
"seed": 42,
"timings": { "inference": 47.3 }
}URL ведёт в наш S3. Срок жизни — пока не удалите через /me/activity.
Стоимость
Цена считается за длительность (duration). До запуска можно посчитать:
curl -X POST https://api.neuroartist.ru/models/kling-video/v2/standard/text-to-video/estimate \
-H "Authorization: Bearer na_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"prompt":"…","duration":5}'{ "estimatedCostRub": 80, "priceUnit": "second", "quantity": 5 }Дальше
- Все video-модели — каталог с фильтрами.
- Async + polling — детали polling-loop.
- Загрузка input-файлов — для img2vid, vid2vid.