Skip to content

Вызов через API (изображения / видео)

Стандартный формат интерфейса OpenAI, аутентификация по токену. Изображения возвращаются синхронно в base64; видео — асинхронная задача (создать → опросить → скачать).

Группа токена

Токен должен принадлежать группе media / media-gen, иначе появится ошибка «нет доступного канала». См. Выбор группы.

Изображения · Текст → изображение

POST https://byesu.com/v1/images/generations
Authorization: Bearer sk-ваш-токен
Content-Type: application/json
ПолеОбязательноОписание
modelИмя модели, см. Генерация изображений
promptПромпт
sizeШирина x высота в пикселях, одновременно задаёт соотношение сторон и уровень разрешения: длинная сторона ≈1024 → 1K, ≈2048 → 2K, ≈3840 → 4K. Например "1024x1024" (1:1 · 1K), "2048x1152" (16:9 · 2K), "3840x3840" (1:1 · 4K). Если не указано — по умолчанию 1:1, базовый уровень
bash
curl https://byesu.com/v1/images/generations \
  -H "Authorization: Bearer sk-ваш-токен" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "prompt": "Золотистый ретривер бежит по золотому пшеничному полю на закате, кинематографично",
    "size": "2048x1152"
  }'

Ответ (изображение — PNG в base64):

json
{ "data": [ { "b64_json": "<строка base64>" } ] }

Изображения · Изображение → изображение (референсы)

Используется POST /v1/images/edits в формате multipart/form-data, референсные изображения загружаются как файлы (имя поля image, можно передать несколько раз, каждое ≤8MB; лимит количества зависит от модели, см. Генерация изображений):

bash
curl https://byesu.com/v1/images/edits \
  -H "Authorization: Bearer sk-ваш-токен" \
  -F model="nano-banana-2" \
  -F prompt="Преврати эту фотографию в акварельный рисунок" \
  -F size="1024x1024" \
  -F image=@ref1.png \
  -F image=@ref2.png

Формат ответа такой же, как при генерации по тексту.

Видео (асинхронно, в стиле Sora)

Три шага: создать задачу → опрашивать статус → скачать mp4.

python
import requests, time

BASE = "https://byesu.com"
H = {"Authorization": "Bearer sk-ваш-токен"}

# 1. Создаём задачу
task = requests.post(f"{BASE}/v1/videos", headers=H, json={
    "model": "gemini-veo31",
    "prompt": "Волны разбиваются о скалы, замедленная съёмка, кинематографично",
    "seconds": "6",           # длительность (сек), допустимые значения зависят от модели
    "size": "1280x720",       # соотношение сторон задаётся размером; 1920x1080 = 1080p (поддерживается не всеми моделями)
}).json()

# 2. Опрашиваем до завершения (от десятков секунд до нескольких минут)
while task["status"] not in ("completed", "failed"):
    time.sleep(5)
    task = requests.get(f"{BASE}/v1/videos/{task['id']}", headers=H).json()

# 3. Скачиваем mp4
if task["status"] == "completed":
    mp4 = requests.get(f"{BASE}/v1/videos/{task['id']}/content", headers=H)
    open("out.mp4", "wb").write(mp4.content)

Видео из изображения: при создании задачи используйте multipart/form-data, изображение первого кадра передайте в файловом поле input_reference (model / prompt / seconds / size передаются вместе как поля формы). Для runway-gen4-turbo изображение первого кадра обязательно.

Видео тарифицируется посекундно

Цена видео = цена за секунду × seconds. Если задача завершилась сбоем, средства возвращаются автоматически.

Ошибки

  • «Нет доступного канала» → неверная группа токена, см. Выбор группы
  • too many reference images → количество референсных изображений превышает лимит модели
  • 401 / недостаточно средств / прочее → см. Частые ошибки и решения

Возникла проблема? Напишите в поддержку или в наш чат.