Содержание
  1. Три API и их modelID
  2. Где задаётся изображение или описание
  3. Где возвращается taskID и финальный URL
  4. Срок жизни временной ссылки
  5. Если исход POST неизвестен
  6. UI и API — разные поверхности
  7. Типы полей: duration и не только
  8. Карта переноса одной задачи
  9. Частые вопросы
Подборки и сравнения

Аналоги Runway: как перенести задачу в другой API

31 октября 2026 · 9 минут чтения

Аналоги Runway: как перенести задачу в другой API — это заполнить одну карту переноса для трёх документированных сервисов. Учебная задача: короткий ролик из текстового описания, неподвижная камера, синий чайник на столе, без надписей и людей. Ниже — modelID, канал запроса, место для taskID и финального URL по каждому API.

Три API и их modelID

Runway в официальном руководстве для разработчиков описывает модель gen4.5: генерация видео из изображения идёт через POST /v1/image_to_video с обязательным полем promptImage, а текст-в-видео — через POST /v1/text_to_video без картинки. Это два разных эндпоинта, и смешивать их не нужно: у каждого свой набор обязательных полей.

Luma Agents в актуальном руководстве по генерации видео использует модель ray-3.2. Запрос уходит на POST https://agents.lumalabs.ai/v1/generations, обязательные поля — model, type, prompt, а параметры вывода лежат во вложенном объекте video. Старый Ray2 SDK для этой задачи не подходит: текущий гайд описывает именно ray-3.2.

MiniMax в документации по генерации видео предлагает модель MiniMax-H3. Запрос уходит на POST https://api.minimax.io/v2/video_generation, а вход собирается из массива content[], где каждый элемент различается по type — текст, изображение, видео или аудио.

Сервис modelID Канал запроса
Runway gen4.5 POST /v1/text_to_video или POST /v1/image_to_video
Luma Agents ray-3.2 POST https://agents.lumalabs.ai/v1/generations
MiniMax MiniMax-H3 POST https://api.minimax.io/v2/video_generation

Три разных владельца — три разных контракта. Ключ одного аккаунта не подходит остальным, и переносить поля между схемами нельзя.

Где задаётся изображение или описание

У Runway текст-в-видео описан полем promptText в запросе на POST /v1/text_to_video. Для режима с картинкой в официальном руководстве показан POST /v1/image_to_video, где promptImage обязателен, а в качестве значения принимается URL изображения или строка base64 в виде data URI. Тот же гайд приводит пример с моделью gen4_image, где референсы передаются массивом referenceImages с полями uri и tag, а в promptText на них ссылаются через синтаксис at-mention.

У Luma Agents описание задаётся полем prompt верхнего уровня, а исходное изображение — через video.start_frame, video.end_frame или оба сразу. Руководство описывает формат ImageRef: публично доступный url, inline base64 с media_type или file_id из Files API. Для мультиключевого режима используются параллельные массивы keyframes и keyframe_indexes.

У MiniMax текст и картинка лежат в одном массиве content[]. Элемент с type: text несёт описание, элемент с type: image_url и role: first_frame задаёт первый кадр, а role: last_frame — последний. Документация отмечает: без изображения, видео и аудио на входе режим становится текстом-в-видео.

Где возвращается taskID и финальный URL

Runway: создание задачи возвращает идентификатор, а статус читается через GET /v1/tasks/{id}. В официальном SDK-типе TaskRetrieveResponse успешный терминальный статус — SUCCEEDED, и в нём есть поле output — массив URL. Финальный адрес берётся как первый элемент output[0].

Luma Agents: успешный submit возвращает HTTP 201 с полем id верхнего уровня. Статус читается через GET /v1/generations/{id} до completed или failed. На завершении каждая запись в output несёт presigned url на MP4.

MiniMax: создание задачи возвращает task_id. Статус читается через GET /v2/query/video_generation/{task_id}, а при status: succeeded ответ напрямую содержит task.content.url — ссылку на скачивание.

Сервис Где taskID Где финальный URL
Runway ответ на создание задачи output[0] при SUCCEEDED
Luma Agents id в ответе 201 presigned url в output
MiniMax task_id в ответе task.content.url при succeeded

Срок жизни временной ссылки

У Runway официальный SDK-тип TaskRetrieveResponse описывает поле output как массив URL, которые истекают в течение 24–48 часов, и советует повторно запросить задачу, чтобы получить свежие адреса. Скачивать результат нужно в своё хранилище.

У Luma Agents руководство прямо указывает: presigned URL истекает через 1 час. Повторный GET /v1/generations/{id} выдаёт новый адрес, а идентификатор генерации не истекает — его сохраняют, если позже планируется редактирование, продление или смена кадра.

У MiniMax в документации по генерации видео срок жизни ссылки на скачивание не указан. В карте переноса это поле помечается как unknown, и решение о хранении принимается с учётом этого пробела: результат лучше скачать сразу после успешного статуса.

Если исход POST неизвестен

Ситуация: запрос на создание задачи ушёл, а ответ не пришёл — таймаут, обрыв связи, ошибка сети. Правило одно: сначала попытаться прочитать идентификатор задачи, и только потом принимать решение о повторе.

Порядок действий при неизвестном исходе POST:

  1. Проверить, вернул ли ответ идентификатор. У Runway это идентификатор задачи, у Luma Agents — id из ответа 201, у MiniMax — task_id.
  2. Если идентификатор есть — читать существующую задачу через GET-эндпоинт провайдера. Это не создаёт новую генерацию.
  3. Если идентификатора нет — не выдумывать его. Сверить консоль аккаунта, список задач и документацию провайдера.
  4. Зафиксировать исход записи как unknown и не повторять оплаченный запрос автоматически.

GET-проверка безопасна: она возвращает состояние уже созданной задачи и не запускает новую генерацию. Автоматический повтор POST при неизвестном исходе рискует создать вторую задачу и второе списание.

UI и API — разные поверхности

Интерфейсы Runway, Luma и MiniMax и их API — разные поверхности с разными контрактами. Поле, которое видно в веб-форме, не обязано совпадать по имени и типу с полем в JSON-запросе, а поведение кнопки в интерфейсе не описывает поведение эндпоинта.

SDK у трёх сервисов тоже разные. Runway публикует SDK для Node и Python с методами вида client.textToVideo.create и client.imageToVideo.create. Luma Agents показывает примеры на Python, TypeScript, Go и cURL. MiniMax в документации приводит Python-пример с библиотекой requests и собственными функциями для создания задачи, опроса статуса и скачивания файла.

Единого кода, который одинаково работал бы со всеми тремя API, нет. Перенос задачи означает перенос контракта: те же смысловые шаги — submit, poll, download — но с другими именами полей, эндпоинтами и типами значений.

Типы полей: duration и не только

Ключевое расхождение — тип поля длительности. У Luma Agents в руководстве по ray-3.2 video.duration передаётся строкой "5s". Числовое значение 5 не соответствует этому полю. Значение по умолчанию — "5s", второе допустимое — "10s", и оно не поддерживается вместе с hdr, start_frame или end_frame.

У Runway в примерах официального руководства duration — целое число: duration: 5. У MiniMax в документации по генерации видео duration тоже целое число, и оно принимает только целые значения в диапазоне 4–15 секунд.

Копировать поле duration из одного API в другой нельзя: строка "5s" у Luma и число 5 у Runway и MiniMax — разные типы, и подстановка неверного типа приведёт к ошибке валидации. То же касается схем идентификаторов, статусов и сроков жизни ссылок: для них нужно сопоставить назначение и допустимые значения в каждой схеме API.

Карта переноса одной задачи

Ниже — заполненная карта для учебной задачи: неподвижная камера, синий чайник на столе, без надписей и людей. Это пример структуры запроса; генерацию редакция не выполняла.

Поле Runway Luma Agents MiniMax
modelID gen4.5 ray-3.2 MiniMax-H3
Канал POST /v1/text_to_video POST /v1/generations POST /v2/video_generation
Описание promptText prompt content[], type: text
Изображение promptImage на /v1/image_to_video video.start_frame role: first_frame
taskID ответ на создание id в ответе 201 task_id
Статус GET /v1/tasks/{id} GET /v1/generations/{id} GET /v2/query/video_generation/{task_id}
Финальный URL output[0] presigned url в output task.content.url
TTL ссылки 24–48 часов 1 час unknown
duration число 5 строка "5s" число 5

Промпт для учебной задачи, который можно скопировать и вставить:

КОД
A plain blue teapot on a wooden table. Static camera. No text, no people, no extra objects.

Для этой текстовой задачи используйте отдельное тело запроса каждого API. В примерах ниже заполнены поля, показанные в документации; авторизацию настройте по инструкции соответствующего провайдера.

Runway, POST /v1/text_to_video:

JSON6 строк
{
  "model": "gen4.5",
  "promptText": "A plain blue teapot on a wooden table. Static camera. No text, no people, no extra objects.",
  "ratio": "1280:720",
  "duration": 5
}

Luma Agents, POST /v1/generations:

JSON10 строк
{
  "model": "ray-3.2",
  "type": "video",
  "prompt": "A plain blue teapot on a wooden table. Static camera. No text, no people, no extra objects.",
  "aspect_ratio": "16:9",
  "video": {
    "resolution": "720p",
    "duration": "5s"
  }
}

MiniMax, POST /v2/video_generation:

JSON12 строк
{
  "model": "MiniMax-H3",
  "content": [
    {
      "type": "text",
      "text": "A plain blue teapot on a wooden table. Static camera. No text, no people, no extra objects."
    }
  ],
  "duration": 5,
  "resolution": "2K",
  "ratio": "16:9"
}

В готовом промпте заменяйте название предмета, описание фона и движение камеры обычным текстом. Настройки разрешения у сервисов различаются; одинаковое описание не гарантирует одинаковый видеорезультат.

Частые вопросы

Чем заменить Runway, если нужен другой API?

Три документированных варианта: Runway gen4.5, Luma Agents ray-3.2 и MiniMax-H3. Каждый работает через свой эндпоинт и свой modelID. Выбор зависит от того, какой контракт подходит вашей задаче.

Как перенести задачу, не запустив её дважды?

Сначала прочитать идентификатор задачи из ответа. Если ответ не пришёл, сверить консоль и список задач, зафиксировать исход как unknown и не повторять POST автоматически. GET-проверка не создаёт новую генерацию.

Почему duration у Luma — строка, а у других число?

В руководстве по ray-3.2 video.duration принимает значения "5s" и "10s" как строки. У Runway и MiniMax в примерах это целое число. Копировать поле между API нельзя — типы разные.

Сколько живёт ссылка на результат?

У Runway официальный SDK-тип указывает 24–48 часов, у Luma Agents presigned URL истекает через 1 час. У MiniMax срок в документации не указан, поэтому в карте стоит unknown. Результат лучше скачать сразу.

Можно ли использовать один SDK для всех трёх API?

Нет. Runway публикует SDK для Node и Python, Luma показывает примеры на Python, TypeScript, Go и cURL, MiniMax приводит Python-пример с requests. Для каждого API нужен свой запрос с соответствующими полями. Общим остаётся описание задачи и критериев приёмки.

Читайте также

3 материала