Перейти к основному контенту

Решение: редактирование

Редактируйте свою картинку, а не ту, что придумала модель.

Эндпоинты редактирования принимают минимум два входа: изображение и инструкцию. Именно на изображении — публичная ссылка, подтверждённая загрузка или встроенный data URI — застревает большинство интеграций.

Задача

Самое сложное — доставить исходник

Текст запроса — простая половина. Вторая — файл в телефоне вашего пользователя, который должен дойти до модели, не раскрывая приватное хранилище, и уложиться в пределы, проверяемые ещё до появления задачи.

01

Путей три, и ошибаются они по-разному

Объявленное поле изображения принимает публичный HTTPS-адрес, подтверждённый файловый URI spicy:// или встроенный data URI. Встроенное: 1 МиБ после декодирования и 8 388 608 пикселей на изображение, при теле запроса до 2 МиБ. Всё, что больше, идёт через талон загрузки.

02

Подписанный HTTPS-URL подходит, если файл доступен

Подписанная ссылка может вести к закрытому бакету, если наши серверы скачивают файл без cookies и отдельного входа. Она должна действовать во время обработки. Частные IP, loopback и данные user:password в URL запрещены.

03

Редактирование — не генерация

Публичное имя вызова оканчивается на /edit, схема обычно требует image_url или image_urls, а некоторые эндпоинты добавляют mask_url или strength. Значение model от text-to-image в потоке редактирования не деградирует мягко, а падает на проверке.

Подход

Загрузите один раз, подтвердите и ссылайтесь на файловый URI

Для пользовательских файлов запросите талон, отправьте PUT ровно указанное число байтов со всеми возвращёнными заголовками, подтвердите файл и передайте полученный URI spicy:// в поле изображения модели. Дальше ссылка принадлежит вашему аккаунту, проверяется один раз и переиспользуется без повторной загрузки.

Талон, PUT, подтверждение, создание. Уже публично доступная медиа-ссылка пропускает первые три шага.

Ticket → PUT → commit → create

POST /api/v1/common/upload-url
{ "contentType": "image/png", "bytes": 482113 }
→ { "fileId": "fil_01k3…", "uploadUrl": "https://…", "method": "PUT", "headers": { … } }

PUT <uploadUrl>            # exactly 482113 bytes, every returned header replayed
POST /api/v1/files/fil_01k3…/commit
→ { "status": "ready", "uri": "spicy://f/fil_01k3…", "sha256": "…" }

POST /api/v1/jobs/createTask

{
  "model": "<publisher>/<model>/edit",
  "input": {
    "prompt": "Replace the background with an overcast beach at dusk",
    "image_urls": ["spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3"]
  }
}

Контракт

Что стоит зафиксировать сразу

API редактирования изображений: по образцу — Что стоит зафиксировать сразу
Поле или заголовокЗначение или предел
POST /api/v1/common/upload-urlJPEG · PNG · WebP · GIF ≤ 10 MiB
POST /api/v1/files/{fileId}/commitreturns spicy://f/fil_…
inline data URI≤ 1 MiB decoded · ≤ 8192 px per side
request body≤ 2 MiB · ≤ 16 images

Проведите по горизонтали, чтобы увидеть все столбцы.

Интеграция

От первого вызова до продакшена

  1. 01POST /api/v1/common/upload-url с contentType и точным числом байтов; изображения до 10 МиБ в JPEG, PNG, WebP или GIF.
  2. 02Отправьте байты через PUT на подписанный адрес, повторив все заголовки талона, затем POST /api/v1/files/{fileId}/commit.
  3. 03Вызовите createTask со значением model для редактирования и URI spicy:// в image_url или image_urls.
  4. 04Прочитайте output.assets из обратного вызова или recordInfo и сохраните отредактированный файл сами.

Применимость

Когда этот путь подходит

Выбирайте, если

  • Продукт начинается с пользовательских фотографий: ретушь, замена фона, смена стиля, удаление объектов.
  • Одна и та же ссылка используется в нескольких задачах и не должна загружаться заново каждый раз.

Ищите другое, если

  • Исходного изображения нет. Text-to-image дешевле и проще по контракту.
  • Нужен покадровый видеомонтаж. Эти эндпоинты возвращают статичные изображения.

Проверки

Что вы можете проверить сами

Загрузки привязаны к аккаунту и проверяются при подтверждении

Подтверждение сверяет число байтов и тип содержимого с талоном, проверяет сигнатуру изображения и считает SHA-256. Только после этого на файл можно ссылаться.

Встроенные изображения не возвращаются в записи

Data URI сохраняются как привязанные к аккаунту файлы. Нормализованный ввод, который отдаёт recordInfo, содержит файловые URI, а не исходные байты Base64.

У исходников и результатов разные сроки

Загруженный материал хранится один день, сгенерированные результаты — 14 дней. Оба срока опубликованы и не обсуждаются отдельно по аккаунтам.

Перед запуском

Поведение платформы, которое стоит подтвердить

  • Решите, кто подтверждает права на исходное изображение: платформа не проверяет это за вас.
  • Проверяйте тип и размер на клиенте до запроса талона — 413 дешевле предотвратить, чем обработать.
  • Храните URI spicy:// в своих записях, если тот же исходник будет редактироваться снова.
  • Считайте invalid_asset ошибкой для пользователя, а не сбоем сервиса.

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

О чём спрашивают на этой странице

И то и другое. Публично доступный HTTPS-адрес медиафайла подставляется прямо в поле изображения. Талоны нужны для непубличных файлов и для всего, что превышает встроенные пределы.