API виртуальной примерки: меняем одежду на модели через GPT Image 2
Одна фотография и один промпт меняют образ. Дальше — код запроса, три замены, которые мы прогнали 28 октября 2026 года, и то, где правка уходит в сторону.
На этой странице
- Что правка умеет и чего не умеет для примерки
- Отправьте фото и промпт с образом
- Три замены образа, которые мы прогнали
- Фото вещи как вторая референция
- Где результат уходит в сторону
- Когда лучше подходит отдельный API примерки
- Шаблон промпта для смены образа
- Частые вопросы
- Есть ли в API GPT Image 2 отдельный эндпоинт виртуальной примерки?
- Можно ли отправить фото вещи?
- Лицо остаётся тем же?
- Сколько живут ссылки на результат?
- Какой размер запрашивать?
Да, с текстовым промптом. Эндпоинт редактирования GPT-Image 2 поменял одежду на одной фотографии и сохранил позу, лицо и фон в трёх наших прогонах 28 октября 2026 года. Отдельного поля для вещи у него нет, но вторая фотография вещи изменила длину платья в нашем прогоне. Каждый результат проверяйте глазами.
Запрос — это правка изображения в media API OmniaKey: исходное фото, промпт и необязательные референсные изображения. Функцию ниже мы проверили 28 октября 2026 года с другим промптом (жёлтый дождевик) на JPEG в 1024 пикселя базовой модели, и она вернула PNG 1024x1536.
Что правка умеет и чего не умеет для примерки
Правка изображения начинается с исходного фото и промпта. Операция — edit, исходник уходит инлайном в Base64, а промпт называет новый образ; документация image API OmniaKey (проверена 28 октября 2026 года) разрешает ещё несколько референсных изображений в массиве images. Результат — новый кадр, поэтому одежда меняется, а человек остаётся на месте: в наших прогонах лицо, поза, волосы и студийный фон сохранились.
Для примерки важны два ограничения: отдельного поля для вещи нет, поэтому модель рисует одежду по вашему описанию или по второй фотографии, а новый кадр может задеть детали, которые вы не называли. Функция примерки должна показывать результат на проверку и давать покупателю самому судить о совпадении. Та же операция умеет убирать объект из кадра; про правки по инструкции читайте гайд по альтернативе FLUX Kontext.
Отправьте фото и промпт с образом
Отправьте POST на https://api.omniakey.com/v1/media/tasks с bearer-ключом, JSON-телом и заголовком Idempotency-Key; документация image API OmniaKey (проверена 28 октября 2026 года) говорит, что создание возвращает HTTP 202 и id задачи. Опрашивайте URL задачи, пока статус queued или processing; succeeded значит, что файлы готовы, а у неудачной задачи есть error.code и error.message, и она не тарифицируется.
Поля задачи заполняются так:
| Поле | Значение |
|---|---|
model | gpt-image-2 |
type | image |
operation | edit |
input.prompt | инструкция по образу |
input.image | исходное фото как объект data и mime_type |
input.images | дополнительные референсные фото |
parameters.size | WIDTHxHEIGHT |
parameters.quality | low, medium, high или auto |
parameters.n | 1 |
Держите запрос меньше 1 MiB, потому что инлайн Base64 входит в этот лимит. Число сэмплов должно быть 1, и API всегда возвращает непрозрачный PNG, поэтому реальные размеры читайте из скачанного файла.
Вот функция:
import base64
import json
import os
import time
import urllib.request
import uuid
API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]
def request(method, url, body=None, extra_headers=None):
headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
data = None
if body is not None:
headers["Content-Type"] = "application/json"
data = json.dumps(body).encode()
headers.update(extra_headers or {})
req = urllib.request.Request(url, data=data, headers=headers, method=method)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.load(resp)
def edit_image(source_path, prompt, out_path, size="1024x1536", quality="medium"):
with open(source_path, "rb") as f:
image = base64.b64encode(f.read()).decode()
body = {
"model": "gpt-image-2",
"type": "image",
"operation": "edit",
"input": {"prompt": prompt, "image": {"data": image, "mime_type": "image/jpeg"}},
"parameters": {"size": size, "quality": quality},
}
task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
for _ in range(150):
time.sleep(4)
state = request("GET", f"{API}/{task}")
if state["status"] not in ("queued", "processing"):
break
if state["status"] != "succeeded":
raise RuntimeError(state.get("error") or state["status"])
asset_url = state["assets"][0]["url"] # подписанная ссылка: действует около часа, скачивайте сразу
req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
with urllib.request.urlopen(req, timeout=120) as resp, open(out_path, "wb") as f:
f.write(resp.read())
return task
if __name__ == "__main__":
task = edit_image(
"vto-base.jpg",
"Change the outfit: she now wears a red satin slip dress with thin straps that falls to mid-calf. Keep the same pose, face, hair, body, the plain light-gray studio background and the lighting exactly as they are. Photorealistic, no text, no logos.",
"vto-slip.png",
size="1024x1536",
)
print("task", task)
Подписанная ссылка на файл действует около часа, а файл хранится 24 часа — по той же документации, поэтому скачивайте его сразу после успеха задачи. Наша проверка 28 октября 2026 года шла с промптом про жёлтый дождевик на JPEG в 1024 пикселя базовой модели и вернула PNG 1024x1536. Скрипт отправляет заголовок User-Agent: стандартный от Python в нашем прогоне отклонили с HTTP 403, и с заголовком всё заработало.
Три замены образа, которые мы прогнали
Все три замены начались с одного синтетического фото: женщина в белой футболке с круглым вырезом и тёмно-синих джинсах на фоне однотонного светло-серого студия, сгенерировано в 1024x1536 и качестве medium в наших прогонах 28 октября 2026 года.
Замена 1 просила красное атласное платье-комбинацию на тонких бретелях до середины икры. Платье получилось, а поза, лицо, волосы и фон остались прежними. Белые кроссовки стали белыми босоножками на ремешках, хотя об этом не просили.
Замена 2 просила тёмно-зелёный шерстяной блейзер поверх кремовой шёлковой майки-комбинации и чёрные прямые брюки. Все три вещи появились, белые кроссовки остались.
Замена 3 просила лонгслив в тёмно-синюю и белую горизонтальную полоску с маленьким вышитым красным сердцем на левой стороне груди. Полоски и сердце оказались на левой стороне груди; тёмно-синие джинсы и белые кроссовки остались.

Все люди и сцены здесь синтетические, и каждый промпт мы прогнали один раз, поэтому каждое изображение — один сэмпл.
Generated with GPT-Image 2 via the OmniaKey API on October 28, 2026, size 1024x1536, quality medium.
Фото вещи как вторая референция
Чтобы попасть ближе, отправьте вещь второй картинкой. Мы поставили фото человека первым, раскладку красного атласного платья-комбинации вторым и использовали input.images с таким промптом: "Dress the woman in the first image in the red satin slip dress shown in the second image. Keep her pose, face, hair, body, the plain light-gray studio background and the lighting exactly as they are. Photorealistic, no text, no logos."
Платье дошло до пола, почти как на фото раскладки. Версия того же платья только по тексту останавливалась на середине икры. В нашем единственном сэмпле фотография вещи дала ту длину, которую слова оставили свободной.

Где результат уходит в сторону
Отклонения появились в том, чего не было в промпте: замена на платье-комбинацию поменяла обувь, а в промпте было только платье. Проверяйте лицо, руки, подол, обувь и любой узор в полном размере, прежде чем показывать результат покупателю. Мы не тестировали вещь с печатным логотипом, точный принт ткани с товарного фото и больше двух изображений.
Когда лучше подходит отдельный API примерки
Отдельный API примерки принимает человека и вещь как два разных входа. Страница Google Vertex AI "Generate Virtual Try-On Images" (обновлена 26 октября 2026 года; проверена 28 октября 2026 года) говорит: "You provide an image of a person and an image of a clothing product." Там же перечислены поля personImage и productImages в Base64, sampleCount от 1 до 4 и id модели virtual-try-on-001. На странице также есть уведомление, что документация Vertex AI больше не обновляется.
Выбирайте такой эндпоинт, когда фото вещи — источник истины и на один запрос нужно несколько сэмплов. Выбирайте правку в GPT-Image 2, когда единый процесс для смены образа и других правок важнее, чем сэмплы за вызов.
Страница цен OpenAI (проверена 28 октября 2026 года) говорит, что gpt-image-2 тарифицируется по токенам: на странице есть ставки за токены и нет таблицы за изображение, и она ведёт к калькулятору в гайде по генерации изображений. Текущая ставка OmniaKey — на странице цен.
Шаблон промпта для смены образа
Используйте схему, которая сработала в наших прогонах: сначала назовите вещь, потом зафиксируйте человека и сцену.
Change the outfit: she now wears [garment, colour, fabric, length]. Keep the same pose, face, hair, body, the plain light-gray studio background and the lighting exactly as they are. Photorealistic, no text, no logos.
- Вещь: одно предложение с цветом, тканью и длиной. "A red satin slip dress with thin straps that falls to mid-calf" дало понятную замену.
- Фиксаторы: поза, лицо, волосы, тело, фон, свет. Перечислите их в промпте явно.
- Финал: "Photorealistic, no text, no logos." Наши промпты заканчивались так.
- Обувь: называйте её, если она должна остаться, например "keep the white sneakers". В замене с платьем-комбинацией обувь поменялась, когда её не было в тексте.
Добавьте второе изображение, когда длина важнее слов: человек первым, вещь второй, а в промпте ссылайтесь на "the first image" и "the second image", как делали мы. Общий порядок промпта — в гайде по промптам GPT Image 2.
Частые вопросы
Есть ли в API GPT Image 2 отдельный эндпоинт виртуальной примерки?
Нет. Страница модели на OmniaKey (проверена 28 октября 2026 года) перечисляет текст в изображение и редактирование изображения. В наших прогонах примерка была правкой с текстовым промптом и необязательным вторым изображением.
Можно ли отправить фото вещи?
Да, как второе референсное изображение в input.images. В нашем прогоне 28 октября 2026 года длина платья подстроилась под фото раскладки.
Лицо остаётся тем же?
В трёх заменах и в прогоне с двумя референсами — да, на глаз. Проверяйте каждый результат в полном размере, прежде чем показывать.
Сколько живут ссылки на результат?
Около часа, по документации image API OmniaKey, проверенной 28 октября 2026 года, а файл хранится 24 часа. Скачивайте сразу после успеха задачи.
Какой размер запрашивать?
Передавайте size как WIDTHxHEIGHT, например 1024x1536, а реальные размеры читайте в скачанном PNG. Наши прогоны шли в 1024x1536 с качеством medium.
Начните с одного фото и одного промпта с образом. Страница GPT-Image 2 рассказывает о модели; текущие цены — отдельно.
Модели в этой статье
Похожие статьи
Промпты для GPT Image 2: структура, примеры и реальные изображения
Восемь промптов и девять реальных изображений: где GPT Image 2 попал точно, что добавил и как это исправить.
Альтернатива API FLUX Kontext: правка изображений с GPT Image 2
Правки по инструкции без маски: код запроса, цепочка из трёх правок, выполненных 28 октября 2026 года, и то, что сохранил каждый шаг.
API удаления объектов: уберите лишнее с фото через GPT Image 2
Одной инструкции на объект хватило для всех трёх удалений. Ниже код запроса, результаты в полном размере и места, где правке пока нельзя доверять.
Недавние статьи
- Clapping Cat Meme AI: как заставить питомца хлопать через image-to-video
- Промпты для Kling 3.0: структура, примеры и реальные ролики
- Промпты для MiniMax H3: структура, примеры и реальные ролики
- Claude Haiku 5.5 vs Sonnet 5.5: код, стоимость и скорость
- Промпты для Wan 3.0: структура, примеры и реальные ролики
