MorphogenДокументация

Картинки и видео

Генерация картинок и асинхронная генерация видео через OpenAI SDK.

Картинки возвращаются сразу, видео делается асинхронно: вы создаёте задачу, ждёте статус и скачиваете файл. Оба API совместимы с OpenAI SDK.

Картинки

import base64
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.morphogen.ru/v1",
    api_key=os.environ["MORPHOGEN_API_KEY"],
)
resp = client.images.generate(
    model="flux-2-klein",
    prompt="красное яблоко на белом столе",
    n=2,
)
for i, image in enumerate(resp.data):
    with open(f"apple-{i}.jpg", "wb") as f:
        f.write(base64.b64decode(image.b64_json))

Картинка приходит строкой b64_json. Режим response_format: "url" не поддерживается: хостинга картинок нет. Потоковый режим тоже не поддерживается. Параметры: Images.

Модели картинок работают и через /v1/chat/completions с modalities: ["image"]: картинка тогда приходит в choices[0].message.images[].image_url.url как data URL. Это удобно, если приложение уже построено на чате.

Видео

  1. Создайте задачу
    video = client.videos.create(
        model="grok-imagine-video",
        prompt="бумажный кораблик на озере на закате",
        seconds="4",
        size="854x480",
    )
    print(video.id, video.status)

    Ответ приходит сразу со статусом queued.

  2. Дождитесь результата
    import time
    
    while video.status in ("queued", "in_progress"):
        time.sleep(10)
        video = client.videos.retrieve(video.id)
    print(video.status)

    Ролик обычно генерируется до пары минут. Статус failed значит, что генерация не удалась, деньги за неё не списываются.

  3. Скачайте файл
    client.videos.download_content(video.id).write_to_file("boat.mp4")
  4. Удалите, когда файл не нужен
    client.videos.delete(video.id)

    Пока вы не удалите задачу, файл хранится на нашей стороне.

Те же вызовы доступны обычным HTTP, SDK не обязателен: Создать, Получить, Скачать, Удалить.

Деньги

Перед запуском видео резервируется сумма: секунды, умноженные на цену секунды в выбранном разрешении. Если не указать generate_audio, модель со звуком возьмёт цену со звуком. После завершения списывается фактическая стоимость. Отменённая задача в очереди и любая задача со статусом failed ничего не стоят. Для картинок резерв равен числу картинок, умноженному на цену одной.

Маскирование ПДн.

К картинкам и видео оно не применяется: замаскированный промпт даст плейсхолдеры в картинке, а демаскировать картинку нельзя. Для картинок явный X-PII-Masking: on вернёт 400 pii_masking_unsupported_endpoint. Для видео заголовок игнорируется, запрос проходит, а промпт уходит провайдеру без маскирования: не отправляйте персональные данные в промпте видео.

Ошибки

КодЧто сделать
400 unsupported_video_parameterвыберите длительность и разрешение из допустимых для модели
400 invalid_image_countn должно быть от 1 до 10
404 video_not_readyфайл запрошен до статуса completed
409 video_cancel_unsupportedзадача уже у провайдера, дождитесь завершения

Все коды: Ошибки.

На этой странице