Кратко: Чтобы генерировать видео с помощью AI API, вы отправляете POST-запрос с текстовым промптом на эндпоинт видеомодели, получаете ID задачи, а затем опрашиваете эту задачу, пока не будет готов финальный MP4-файл — примерно десять строк на Python. Унифицированный API GPTProto объединяет пять видеомоделей под одним ключом и балансом: Seedance 2.0, ViduQ3-pro, Kling v3.0 std, Hailuo 2.3 Pro и Veo 3.1. Переключение между ними выполняется изменением одной строки в URL — авторизация, формат запроса и опрос остаются одинаковыми. Оплата производится по предоплате по мере использования, начиная примерно с $0.04 за секунду видео.
Раньше вызов пяти разных видеомоделей означал пять аккаунтов, пять SDK и пять панелей биллинга. Хотите Seedance 2.0 от ByteDance? Нужен аккаунт BytePlus (Volcano Engine) и проверка личности, которую большинство людей за пределами Китая не сможет пройти за один день. Хотите Veo от Google? Другая консоль, другой ключ. Хотите сравнить две модели на одном и том же промпте? Теперь вам приходится поддерживать две интеграции, которые не имеют ничего общего.
Это руководство позволяет обойти всё перечисленное. Вы сделаете первый вызов text-to-video API примерно за десять строк на Python, дождётесь готового MP4, а затем получите доступ ещё к четырём моделям, изменив одну строку в URL — тот же ключ, тот же код, тот же баланс.
Полное раскрытие информации: я пишу эти руководства по интеграции для GPTProto, поэтому заинтересован в том, какой эндпоинт вы используете. Тем не менее я сохранил честные цифры, включая одну модель, вызов которой через нас стоит дороже, чем прямой вызов. Если это так, я прямо об этом скажу.
Что на самом деле представляет собой API для генерации видео с помощью AI
Это не кнопка без кода. Это асинхронная задача: вы отправляете POST-запрос с промптом, API возвращает ID, модель рендерит видео от тридцати секунд до нескольких минут, а вы опрашиваете второй эндпоинт, пока видео не будет готово. Именно задержка рендеринга объясняет двухэтапную архитектуру — видео слишком долго удерживает HTTP-соединение открытым, поэтому вместо файла вы получаете идентификатор задачи.
Почти всё, что вы будете создавать, укладывается в три формата запросов:
- text-to-video — промпт превращается в видеоклип.
- image-to-video — статичный кадр получает анимацию.
- reference-to-video — одно или несколько референсных изображений помогают сохранять персонажа или объект единообразными в разных сценах.
Во всех примерах ниже используются один и тот же базовый URL, https://gptproto.com/api/v3, и один и тот же заголовок. Давайте получим ключ и выполним первый вызов.
Получите API-ключ
Зарегистрируйтесь на сайте gptproto.com, откройте раздел API Keys в панели управления и создайте ключ. Он выглядит примерно так: sk-.... Постоянного бесплатного тарифа здесь нет — используется предоплата по мере использования: вы пополняете баланс, а каждый вызов списывает средства начиная с первого запроса. Для тестирования заложите пару долларов; несколько коротких клипов не будут стоить больше.
Установите единственную зависимость:
pip install requests
Перед первым вызовом важно правильно понять один момент, потому что он часто вызывает ошибки: в нативном интерфейсе /api/v3/ заголовок Authorization содержит ваш исходный ключ без префикса Bearer. GPT Proto также предоставляет совместимый с OpenAI интерфейс /v1/, и в нём используется Bearer. Путаница между ними — самая распространённая причина ошибки 401. Во всём этом руководстве мы используем нативный интерфейс, поэтому ключ передаётся без изменений.
Первый вызов: Seedance 2.0, text-to-video
Seedance 2.0 — видеомодель второго поколения от ByteDance. Она создаёт клипы длительностью от 4 до 15 секунд с разрешением до 1080p и встроенным синхронизированным звуком. Модель предназначена для многосценовых эпизодов, где камера меняет планы, а персонаж остаётся последовательным. Ниже приведён полный пример отправки text-to-video:
import requests
import time
API_KEY = "sk-your-key-here" # raw, no "Bearer" prefix
BASE = "https://gptproto.com/api/v3"
headers = {
"Authorization": API_KEY,
"Content-Type": "application/json",
}
def submit_seedance(prompt):
url = f"{BASE}/bytedance/dreamina-seedance-2-0-260128/text-to-video"
payload = {
"prompt": prompt,
"duration": 5, # 4-15 seconds
"aspect_ratio": "16:9",
"resolution": "1080p",
"generate_audio": True,
"camera_fixed": False,
"seed": -1, # -1 = random
}
resp = requests.post(url, headers=headers, json=payload)
resp.raise_for_status()
return resp.json()["data"]["id"]
prompt = (
"A lighthouse keeper climbs a narrow spiral staircase at dawn. "
"Cut to a wide shot of the lamp room as the light sweeps across "
"grey water. Waves crash below. Ambient wind and distant gulls."
)
job_id = submit_seedance(prompt)
print("submitted:", job_id)
Тот же запрос в формате cURL, если вы хотите увидеть структуру передачи данных:
curl -X POST "https://gptproto.com/api/v3/bytedance/dreamina-seedance-2-0-260128/text-to-video" \
-H "Authorization: sk-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A lighthouse keeper climbs a spiral staircase at dawn, then the lamp sweeps across grey water.",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "1080p",
"generate_audio": true,
"camera_fixed": false,
"seed": -1
}'
Ответ не содержит видео. Он содержит задачу:
{
"data": {
"id": "cgt-20260709xxxxxx-abc",
"status": "created",
"outputs": [],
"urls": { "get": "https://gptproto.com/api/v3/predictions/cgt-20260709xxxxxx-abc/result" }
},
"message": "success",
"code": 200
}
data.id — ваш идентификатор задачи. data.urls.get — готовый URL для опроса, в котором ID уже указан. Иными словами: вы отправили задачу, получили ID, но рендеринг ещё не завершён.
Опрос результата
Теперь нужно обращаться к эндпоинту результата, пока значение status не изменится на completed, а затем извлечь URL видео из outputs. Все модели на платформе используют один и тот же эндпоинт опроса и одинаковую структуру ответа — именно поэтому позже работает приём «заменить одну строку»:
def wait_for_video(job_id, every=5, timeout=600):
url = f"{BASE}/predictions/{job_id}/result"
waited = 0
while waited < timeout:
resp = requests.get(url, headers=headers)
resp.raise_for_status()
data = resp.json()["data"]
status = data["status"]
if status == "completed":
return data["outputs"][0] # the MP4 URL
if data.get("error"):
raise RuntimeError(data["error"])
print(f" {status}... {waited}s")
time.sleep(every)
waited += every
raise TimeoutError(f"timed out after {timeout}s (last status: {status})")
video_url = wait_for_video(job_id)
print("done:", video_url)
Это полностью рабочая генерация. Две функции, один промпт, один MP4-файл. Клип длительностью 5 секунд обычно готовится за одну-две минуты, хотя рендеринг 15-секундного видео в 1080p со звуком может занять больше времени — выполняйте опрос каждые несколько секунд и не отправляйте слишком много запросов.
Замечание о цикле: при наличии error я выбрасываю исключение, а любой статус, который не равен completed и не является ошибкой, трактую как «продолжать ожидание». Это сделано намеренно. Разные модели по-разному сообщают промежуточные состояния, поэтому безопаснее ждать при любом статусе, который не означает окончательную ошибку, чем жёстко задавать список состояний, который может измениться.
Замените одну строку — смените движок: ViduQ3-pro
Вот главное преимущество. Чтобы создать тот же промпт с помощью ViduQ3-pro вместо Seedance, нужно изменить только путь — больше ничего. Ключ, заголовки и wait_for_video() остаются абсолютно такими же:
def submit_vidu(prompt):
url = f"{BASE}/vidu/viduq3-pro/text-to-video"
payload = {
"prompt": prompt,
"duration": 5, # ViduQ3 goes up to 16s
"aspect_ratio": "16:9",
"resolution": "1080p",
"audio": True, # note: ViduQ3 uses `audio`, not `generate_audio`
"seed": -1,
}
resp = requests.post(url, headers=headers, json=payload)
resp.raise_for_status()
return resp.json()["data"]["id"]
job_id = submit_vidu(prompt)
video_url = wait_for_video(job_id) # same poller, unchanged
ViduQ3-pro создаёт клипы длительностью до 16 секунд — вдвое больше практического диапазона Seedance — и является самой дешёвой моделью в этом списке в расчёте на секунду. Названия параметров немного различаются от модели к модели (ViduQ3 управляет звуком с помощью audio, а Seedance использует generate_audio), поэтому проверяйте точный набор полей на странице модели. Однако процесс отправки запроса и опроса всегда остаётся одинаковым.
Сохранение единообразия персонажа. Обе основные модели умеют больше, чем просто text-to-video. Передайте ViduQ3 запрос на /vidu/viduq3-pro/image-to-video с полем image, чтобы анимировать статичное изображение, или используйте режим reference-to-video в Seedance с референсными изображениями, чтобы одно и то же лицо сохранялось в отдельных сценах. Процесс отправки и опроса тот же — вы добавляете входное изображение, а не осваиваете новый API. Перед интеграцией в рабочую систему проверьте названия полей для референсов на странице каждой модели.
Какую модель выбрать?
Пять моделей, один ключ. Это не уровни качества, где большее число всегда означает лучший результат, — каждая модель предназначена для своих задач. Выбирайте по требованиям к ролику:
| Модель |
Путь ({provider}/{model}) |
Встроенный звук |
Максимальная длина |
Цена |
Используйте, когда нужно |
| Seedance 2.0 |
bytedance/dreamina-seedance-2-0-260128 |
Да |
~15 с |
от $0.2957 за запуск |
Многосценовые эпизоды с синхронизированным звуком |
| ViduQ3-pro |
vidu/viduq3-pro |
Да |
16 с |
от $0.04/с |
Более длинные клипы и минимальная цена |
| Kling v3.0 std |
kling/kling-v3.0-std |
Да |
~10 с |
от $0.2016 за запуск |
Недорогая и надёжная image-to-video генерация |
| Hailuo 2.3 Pro |
minimax/hailuo-2.3-pro |
Нет |
~10 с |
$0.441 за запуск |
Чистое видео в 1080p, если звук вы добавите самостоятельно |
| Veo 3.1 |
google/veo3.1 |
Да |
— |
от $0.5 за запуск |
Нужен вывод в 4K |
Перед выбором стоит отметить две вещи. Hailuo 2.3 Pro возвращает беззвучное видео — изображение отличное, но звуковое сопровождение придётся добавлять на постобработке. А Veo 3.1 добавляет к каждому результату встроенный водяной знак SynthID, который нельзя отключить. Это важно, если вы передаёте видео клиенту, не желающему видеть встроенные отметки происхождения.
Поскольку платформа объединяет все эти модели за единым контрактом отправки и опроса, переход между ними — это поиск значения в словаре, а не переписывание интеграции:
MODELS = {
"seedance": "bytedance/dreamina-seedance-2-0-260128",
"vidu": "vidu/viduq3-pro",
"kling": "kling/kling-v3.0-std",
"hailuo": "minimax/hailuo-2.3-pro",
"veo": "google/veo3.1",
}
def submit(model_key, scene, payload):
url = f"{BASE}/{MODELS[model_key]}/{scene}"
resp = requests.post(url, headers=headers, json=payload)
resp.raise_for_status()
return resp.json()["data"]["id"]
# same wait_for_video() retrieves any of them
job_id = submit("kling", "image-to-video", {"prompt": prompt, "image": image_url})
Payload различается для каждой модели — именно эту часть нужно настраивать, — но поиск модели, авторизация и получение результата не меняются.
Сколько это стоит на самом деле
Стоимость видео рассчитывается за секунду или за запуск и сильно зависит от разрешения, длительности и наличия звука. Указанная на странице модели цена — это минимальное значение, а не точный прогноз. Например, клип Seedance в 720p, формате 16:9, длительностью 5 секунд со звуком стоит около $0.605 — значительно выше базовой цены $0.2957, поскольку одновременно были увеличены все основные параметры стоимости. Рассчитывайте цену для конкретных настроек по оценке в панели управления, а не по рекламной минимальной ставке.
Вот честное сравнение с прямым вызовом каждой модели у её поставщика:
- ViduQ3-pro — от $0.04/с, примерно на 20% ниже рыночного ориентира ~$0.05/с.
- Kling v3.0 std — от $0.2016 за запуск, примерно на 20% ниже ориентира ~$0.252.
- Hailuo 2.3 Pro — $0.441 за запуск против ~$0.49 у MiniMax, примерно на 10% дешевле.
- Seedance 2.0 — от $0.2957 за запуск, что примерно на 10% дороже, чем создание того же клипа напрямую через Dreamina от ByteDance. Я не буду делать вид, что это не так. Причина использовать API — не более низкая цена, а стабильный программный доступ, единый баланс и отсутствие проверки личности BytePlus. Если для Seedance важна только стоимость, прямой вызов будет дешевле.
- Veo 3.1 — от $0.5 за запуск; на странице нет однозначного рыночного ориентира, поэтому воспринимайте эту модель как удобный вариант, а не как скидку.
Бесплатного тарифа и ежемесячной подписки нет — оплата взимается за каждый вызов начиная с первого запроса. Цены для конкретной модели смотрите в каталоге моделей, где представлены актуальные таблицы стоимости за секунду и за разрешение.
Ошибки и подводные камни
Краткая памятка о возможных проблемах:
- 401 Unauthorized — почти всегда ошибка с
Bearer. Нативный интерфейс /api/v3/ требует исходный ключ.
- 403 Forbidden — обычно означает нулевой баланс, а не проблему с разрешениями. Пополните баланс.
- 429 — превышен лимит запросов; сделайте паузу и повторите запрос.
- 400 с сообщением о содержимом — промпт не прошёл модерацию. В ответах также есть флаг
has_nsfw_contents, который стоит проверять в автоматизированном процессе.
- Опрос не завершается — длительный рендеринг возможен, поэтому в
wait_for_video() предусмотрен тайм-аут, а не бесконечный цикл.
- Неверный параметр звука —
generate_audio для Seedance и audio для ViduQ3. Передача неправильного параметра может ничего не сделать без выдачи ошибки, что ещё хуже. Проверяйте названия полей для каждой модели.
С чего начать
Самый быстрый путь: получите ключ, запустите приведённые выше примеры для Seedance и ViduQ3, а затем замените строку модели, чтобы попробовать остальные варианты. Всё необходимое для выбора модели — актуальные цены, поддерживаемые режимы и таблицы разрешений — указано на странице каждой модели в каталоге. Один ключ, один баланс, пять видеодвижков.