GetVibe предоставляет генерацию медиафайлов через асинхронный API задач наряду с API текстовых моделей. Путь для медиа-запросов отличается от chat completions OpenAI: отправьте задачу генерации, получите идентификатор задачи и запросите её статус и результат. У моделей изображений, видео и аудио/голоса разные входные данные и единицы тарификации, поэтому выбирайте модель в каталоге медиа-моделей, а не предполагайте, что для каждой модели подходит одна и та же форма запроса.
Найдите модель и изучите её требования
Используйте каталог медиа-моделей и /v1/models?type=image,video,audio, чтобы увидеть типы медиафайлов, доступные вашей учётной записи. Проверьте точный идентификатор модели, принимаемые входные данные, поддерживаемые параметры, формат вывода и единицу тарификации. Модель изображений может тарифицироваться по параметрам вывода; стоимость видео может зависеть от длительности и разрешения; голосовые модели могут тарифицироваться по длине текста, длительности или другой документированной единице. Не сравнивайте эти цены так, будто все они относятся к текстовым токенам.
gpt-image-2 — одна из моделей изображений в каталоге. На странице модели и в документации по медиафайлам перечислены поддерживаемые соотношения сторон, разрешение, а также параметры генерации и редактирования. У видеомоделей свои входные данные, и обработка может занимать больше времени. Возможности работы с голосом различаются в зависимости от модели; ознакомьтесь с актуальным списком медиа-моделей, прежде чем обещать пользователям конкретную операцию в интерфейсе.
Отправьте задачу генерации изображения
Храните ключ на своём сервере. Ниже приведена документированная асинхронная форма запроса text-to-image: prompt находится на верхнем уровне, а параметры генерации — внутри opts.
curl https://getvibeapi.com/api/media/generate \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Чистая редакционная иллюстрация рабочего стола разработчика, без текста",
"opts": {"aspect_ratio":"16:9", "resolution":"1K", "mode":"text-to-image"}
}'Сохраните полученный jobId вместе с собственной записью пользователя и задачи. Этот запрос запускает генерацию, но не возвращает готовое содержимое изображения непосредственно в ответе.
Опрос статуса или webhook
Для небольшой интеграции опрашивайте endpoint задачи с умеренным интервалом и прекращайте опрос, когда задача достигнет конечного состояния. Состояния включают submitting, processing, success, fail и expired. Опрос каждые несколько миллисекунд увеличивает трафик, но не ускоряет генерацию. Для производственных пакетных процессов настройте документированный webhook и сделайте обработку callback идемпотентной, чтобы повторная доставка не создавала дубликаты ресурсов.
curl "https://getvibeapi.com/api/media/jobs/$JOB_ID" \
-H "Authorization: Bearer $GETVIBE_API_KEY"При успешном выполнении получите URL результатов и скопируйте медиафайл в хранилище под вашим контролем, если он должен храниться длительное время. При ошибке сохраните идентификатор задачи для обращения в поддержку и покажите информативное сообщение. Не повторяйте каждый неудачный запрос: недопустимый параметр снова приведёт к ошибке, а повторная генерация может повлечь дополнительную плату.
Для видео и голоса требуется отдельная обработка
Для видео перед отправкой запроса изучите длительность, размер кадра, требования к изображениям для conditioning и поддерживаемые параметры модели. Проверьте удалённые исходные URL и убедитесь, что они доступны. Показывайте пользователю ход выполнения задачи, поскольку рендеринг может занимать больше времени, чем генерация текста. Для пакетных процессов используйте документированный поток webhook, а не удерживайте интерактивную страницу открытой.
Для голоса и аудио различайте генерацию речи, транскрибацию и понимание аудио. Для них используются разные модальности входных и выходных данных. Сопоставьте endpoint и payload с карточкой модели, задайте ограничения на текст или длительность, если они доступны, и сохраняйте возвращённое аудио в формате, поддерживаемом вашим проигрывателем. Не обещайте, что каждая медиа-модель способна генерировать голос.
Бюджет и обработка ошибок
Перед запуском пакетного процесса проверьте текущую цену медиа-модели и рассчитайте стоимость в её фактической единице тарификации. Цена текстовой модели не является ориентиром для генерации изображений или видео. Выполните один тестовый запрос с теми же разрешением, длительностью или настройками голоса, которые планируется использовать в production. Записывайте идентификатор задачи, модель, параметры, длительность, конечное состояние и списанное потребление. Установите максимальный размер пакета и ручную проверку для дорогостоящих результатов или результатов, предназначенных для пользователей.
Не включайте prompts и URL медиафайлов в общие журналы, если это не разрешено вашей политикой конфиденциальности. Редактируйте учётные данные, установите ограничения на загрузку и не предоставляйте приватные сгенерированные ресурсы в виде общедоступных URL. При редактировании храните исходный ресурс отдельно до проверки результата.
Проверьте всё перед выходом в production
- Подтвердите точный идентификатор модели, модальность и требования к входным данным.
- Храните API-ключ на сервере.
- Используйте документированный prompt верхнего уровня и параметры, специфичные для модели.
- Сохраняйте идентификаторы задач и сделайте обработку polling/webhook идемпотентной.
- Определите поведение при ошибке и истечении срока действия.
- Рассчитывайте бюджет по фактической единице тарификации модели.
- Копируйте успешные результаты в хранилище, если их необходимо сохранять.
Перед выпуском ознакомьтесь с разделами генерация медиафайлов, webhook для медиафайлов и медиа-модели. Общедоступный список моделей и поддерживаемые параметры могут меняться; источниками актуальной информации для вашей учётной записи служат эти страницы и актуальный каталог.
Безопасно обрабатывайте исходные ресурсы
Для преобразования изображения или видео с учётом изображения используйте метод загрузки или URL, документированный для этой модели. Убедитесь, что исходный URL общедоступен для сервиса генерации и не требует сеанса входа в ваш браузер. Не встраивайте долгоживущие подписанные URL в prompts, которые могут попасть в журналы. Перед приёмом пользовательских файлов установите в собственном приложении проверки размера загрузки и content-type.
При генерации на основе изображения, предоставленного пользователем, сохраняйте исходный файл и отслеживайте требования к согласию и срокам хранения. В сгенерированном результате могут присутствовать узнаваемые детали исходного изображения; перед публикацией применяйте правила конфиденциальности и модерации вашего продукта.
Проектируйте интерфейс с учётом состояний задач
Показывайте состояние submitted после возврата идентификатора задачи, состояние processing во время работы сервиса и понятные конечные состояния success, failure или expiration. Пользователь должен иметь возможность безопасно покинуть страницу, если задача продолжается асинхронно, а затем восстановить статус через поиск собственной сохранённой записи о задаче. Не допускайте двойной отправки при двойном нажатии: отключайте элемент отправки или используйте собственную защиту от повторов.
Для пакетного процесса показывайте количества завершённых, неудачных и ожидающих задач отдельно. Один общий индикатор загрузки не позволяет понять, выполняется ли длительная видеозадача нормально или зависла. Используйте ограниченное экспоненциальное увеличение интервала опроса и переходите на документированный путь webhook при увеличении размера пакета.
Храните результаты с учётом срока хранения
Не считайте возвращённый URL результата постоянным хранилищем, если в документации по медиафайлам прямо не сказано обратное. При необходимости долгосрочного доступа скачивайте успешный результат в своё хранилище, а затем сохраняйте новый идентификатор объекта в базе данных. Применяйте контроль доступа к сгенерированным файлам и определите поведение удаления, когда пользователь удаляет проект.
Записывайте идентификатор модели, параметры, версию prompt, идентификатор задачи, объект результата, конечный статус и списанное потребление. Это позволит ответить на последующий вопрос в поддержку, не записывая полный конфиденциальный prompt и не раскрывая URL медиафайла всей команде.
