node404 DOCS

05 · гайд

Видео (async)

Видео — асинхронное: создаёте задачу, получаете её id, опрашиваете статус. Тарификация посекундная: цена за секунду × длительность (цены — на странице модели). Списание происходит при создании задачи; за провалившуюся генерацию токены возвращаются на баланс (подробности — в разделе про возвраты).

1. Создать задачу

curl https://api.node404.ru/v1/video/generations \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-video-1080p",
    "prompt": "бумажный кораблик плывёт по луже, кинематографично",
    "seconds": "6",
    "aspect_ratio": "16:9"
  }'

Ответ: {"id": "task_NXl5bz…", "task_id": "task_NXl5bz…", "status": "queued", "progress": 0, …} — идентификатор задачи начинается с task_, опрашивайте статус по нему.

2. Опросить статус

curl https://api.node404.ru/v1/video/generations/task_NXl5bz… \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ"

Ответ на опросе приходит в обёртке шлюза: {"code": "success", "data": {…}}. Смотрите data.status: QUEUED → IN_PROGRESS → SUCCESS, провал — FAILURE (причина — в data.fail_reason; сравнивайте статус без учёта регистра). Полное тело задачи вложено в data.data, ссылки на готовые файлы — data.data.output[].url. У результата старше 14 дней во вложенном теле статус expired (код result_expired) — файлы удалены. Обычное время: 1–5 минут в зависимости от модели и длительности.

Оживление изображения (i2v)

Модели с i2v принимают исходные кадры публичными ссылками в поле image_urls (строка или массив строк):

"image_urls": ["https://ваш-домен/frame.png"]

Длительность

Поле seconds — строкой. Допустимые значения у каждой модели свои (диапазон или фиксированный набор) — см. страницу модели. Значение вне списка вернёт 400 с перечнем допустимых.

Действия над готовым роликом (Veo 3.1, Grok Imagine)

Продление и апскейл — отдельные модели. Veo 3.1: veo-3.1-lite-extend, veo-3.1-fast-extend, veo-3.1-quality-extend, veo-3.1-1080p-upscale, veo-3.1-4k-upscale. Grok Imagine: grok-video-480p-extend, grok-video-720p-extend, grok-video-1080p-extend, grok-video-upscale-480p-720p, grok-video-upscale-720p-1080p, grok-video-upscale-480p-1080p. Вместо генерации с нуля передайте task_id вашей прошлой задачи — это внутренний идентификатор из вложенного тела статуса (data.data.id, UUID), а не task_… шлюза. Поле prompt обязательно у всех действий (для апскейла — любой текст); seconds у Veo — "8", у продления Grok — "6" или "10", у апскейла Grok — "1" (цена фиксированная за ролик).

curl https://api.node404.ru/v1/video/generations \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1-lite-extend",
    "task_id": "379e6560-d7c0-44e4-af3f-d1a7063110dc",
    "prompt": "кораблик медленно поворачивает к камышам",
    "seconds": "8"
  }'
  • Продление добавляет к ролику ~8 секунд и всегда отдаёт 720p, каким бы ни был исходник (1080p и 4K продлеваются). Тир продления должен совпадать с тиром исходной задачи (lite → veo-3.1-lite-extend), иначе 400 source_mode_mismatch. Принимает seeds (10000–99999) и watermark.
  • Апскейл работает только с исходной генерации: результат продления в 4K не берётся (400 upstream_rejected). 1080p готов за 1–3 минуты, 4K — за 2–10; статус опрашивайте как обычно.
  • Grok Imagine: модель продления выбирается по разрешению исходного ролика (grok-video-720p или -720p-i2v → grok-video-720p-extend), цена — посекундно по ставке этого разрешения; продлить можно на 6 или 10 секунд. Апскейл — по паре «из какого разрешения → в какое» (grok-video-upscale-480p-1080p для ролика в 480p); источником может быть только генерация, не результат другого действия. Несовпадение — 400 source_mismatch с подсказкой, какую модель взять.

Seedance 2: первый и последний кадр, референс-видео

Позиции seedance-2*-…-i2v принимают в image_urls один или два кадра: первый — старт ролика, второй — финальный ориентир (last_frame_url у модели; сцена ведётся к нему, точного совпадения последнего кадра модель не гарантирует). Цена — как у обычной генерации.

Позиции seedance-2*-…-vref — режим референс-видео: reference_video_urls — 1–3 публичные ссылки на mp4 по 2–15 секунд (вместе не больше 15), в промпте ссылайтесь на них как @Video1…; дополнительно можно до 9 image_urls (@Image1…). Ставка за секунду у этих позиций ниже, но считается за секунды ролика и референсов вместе: поле seconds обязано равняться длине ролика (4–15) плюс суммарной длине референсов, округлённой до секунды. Сервер измеряет референсы сам и при расхождении отвечает 400 reference_video_seconds с допустимым диапазоном.

curl https://api.node404.ru/v1/video/generations \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-720p-vref",
    "prompt": "Reference @Video1 for the camera motion, @Image1 for the character",
    "reference_video_urls": ["https://example.com/motion-6s.mp4"],
    "image_urls": ["https://example.com/hero.jpg"],
    "seconds": "11"
  }'

Здесь ролик 5 секунд плюс референс 6 секунд = "seconds": "11".

Kling 3.0: мультикадр

Любая позиция kling-3.0-* принимает multi_shots: true и список сцен multi_prompt (до 5, у каждой prompt до 500 символов и duration 1–12 с). Поле seconds обязано равняться сумме длительностей сцен — по нему считается цена; общий prompt при мультикадре модель не читает, но поле должно быть непустым. С кадром принимается только один (первый) кадр.

curl https://api.node404.ru/v1/video/generations \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-3.0-720p",
    "prompt": "кораблик на пруду",
    "multi_shots": true,
    "multi_prompt": [
      {"prompt": "бумажный кораблик на тихом пруду, утренний свет, статичная камера", "duration": 3},
      {"prompt": "кораблик плывёт к камышам, камера медленно следует", "duration": 3}
    ],
    "seconds": "6",
    "aspect_ratio": "16:9"
  }'

Kling 3.0: перенос движения (Motion Control)

Модели kling-3.0-motion-control-720p и -1080p переносят движение с вашего ролика на фото персонажа. Входы: image_urls — одно фото персонажа, video_url — ссылка на ролик-источник движения (3–30 секунд, до 100 МБ). Поля длительности у модели нет: результат длится столько же, сколько исходный ролик, поэтому seconds передавайте равным его длине — по нему считается цена. Опционально character_orientation (video | image) и background_source (input_video | input_image).

curl https://api.node404.ru/v1/video/generations \
  -H "Authorization: Bearer sk-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-3.0-motion-control-720p",
    "prompt": "перенести движение",
    "image_urls": ["https://example.com/person.jpg"],
    "video_url": "https://example.com/dance.mp4",
    "seconds": "6"
  }'