Skip to main content
Эта страница — практическое руководство по локализованному редактированию (inpainting) с gpt-image-2 через POST /v1/images/edits, путем загрузки изображение + маску + prompt. Для полного справочника параметров и интерактивного Playground см. Image Edit API Reference.

Основной принцип: альфа-канал определяет область редактирования

Запрос на локализованное редактирование состоит из трех частей:
Маска отмечает редактируемые области через канал alpha (прозрачности) PNG:
Самая распространенная ошибка: область редактирования определяет именно альфа-канал, а не черные или белые пиксели, которые вы видите.
PNG, который «выглядит черно-белым», но не имеет альфа-канала, завершится ошибкой invalid_image_file.

Визуальный пример

Предположим, исходное изображение имеет размер 1024×1024:
С таким prompt:

Маска — это не жесткая обрезка

Маски GPT Image — это не абсолютные ограничения на уровне пикселей, как выделения в Photoshop. Официально редактирование маски по-прежнему остается prompt-guided editing: модель использует маску как ориентир, но не гарантирует строгое соблюдение каждой границы пикселя. Поэтому вы можете увидеть:
  • Незначительные изменения теней вне маски
  • Выход границ объекта за пределы маски
  • Согласованные изменения освещения и отражений
  • Небольшую перерисовку фона
  • Эффекты перехода у границ маски
Это хорошо подходит для естественного смешивания, но не годится, когда требуется пиксель-в-пиксельное сохранение (см. «Строгое сохранение содержимого вне маски» ниже).

Повышение стабильности редактирования

Не пишите просто: «измените это на красную рубашку». Вместо этого пишите так:
Практические советы:
  1. Сделайте маску немного больше, чем границы целевого объекта
  2. Не закрывайте только центр объекта — включите края, тени и отражения
  3. Явно укажите, что должно остаться без изменений
  4. Если область редактирования слишком мала, увеличьте маску
  5. Когда требуется абсолютное сохранение, выполните финальное покадровое совмещение самостоятельно (см. ниже)

Маска или не маска? Компромиссы против редактирования только prompt

Частый вопрос: современный AI уже может «редактировать именно то, на что вы указываете» на обычном языке — зачем вообще делать маску? Это правда: gpt-image-2 без маски, имея только «замени чашку слева на столе цветами», обычно правит нужное место — следование инструкциям работает хорошо, и для несложных правок одного prompt обычно достаточно. Но маска решает случаи, когда язык двусмысленен или однозначен, но все еще недостаточно надежен: Исследования указывают на то же самое: безмасочное (чисто текстовое) редактирование испытывает трудности с точным пространственным контролем — методы в стиле prompt-to-prompt, например, не могут пространственно переместить объект по кадру, а когда неявная область редактирования задана неверно, получается «должна была измениться не та часть, а изменилась не та, что не должна была». Редактирование с маской жертвует немного удобства ради явной пространственной точности.
Если в одной фразе: маска — не устаревшая технология, а инструмент точного контроля. Неформальные правки в стиле чата → достаточно одного prompt; производственные сценарии, где нужны воспроизводимость, управляемость и строгие границы → используйте маску. Также помните: редактирование только prompt с gpt-image-2 по сути является полной перегенерацией изображения, поэтому могут измениться и неуказанные области — именно поэтому и существует маска + пиксельное композитирование.

Требования к файлам с первого взгляда

Назначение ролей при редактировании с несколькими изображениями:
«Точное совпадение размеров» звучит утомительно, но вам не нужно выравнивать размеры вручную — маски выводятся из исходного изображения (путем стирания / кисти / сегментации на его копии), поэтому совпадение размеров получается автоматически. См. Откуда берутся маски ниже.

Python Example

Do not pass input_fidelity="high" — all three models always process input images at high fidelity by default. The API does not allow adjusting this parameter; passing it returns a 400 error (verified on 2.5 on 2026-09-09). Simply omit it.

Пример cURL

Эндпоинт редактирования изображений требует multipart/form-data — нельзя передавать изображение и маску как обычные поля JSON:
Даже при использовании одного изображения указывайте имя поля image[], как в официальных примерах.
При использовании -F не задавайте вручную -H "Content-Type: multipart/form-data". curl должен автоматически сгенерировать boundary; при ручной установке заголовка boundary удаляется, и сервер не может разобрать файлы.

Пример на Node.js

Откуда берутся маски? Пять распространенных способов

Маски часто кажутся пугающими — «они должны в точности совпадать с исходным изображением пиксель в пиксель». Ключевая мысль: вы почти никогда не рисуете маску с нуля; вы выводите ее из исходного изображения. Будь то код, фоторедактор или веб-Canvas, процесс всегда один: «открыть оригинал → отметить на нем области → экспортировать», поэтому совпадение размеров происходит автоматически.

Способ 1: Сгенерируйте прозрачную маску программно

Сделайте прямоугольную область прозрачной (редактируемой):
  • (255, 255, 255, 255) = непрозрачная, сохраняемая область
  • (0, 0, 0, 0) = прозрачная, редактируемая область

Способ 2: Ручное стирание в фоторедакторе

Любой редактор, который поддерживает прозрачные PNG (Photoshop, GIMP, Krita, Photopea и т. д.), может создать маску — все сводится к одному действию: сотрите область, которую нужно редактировать, чтобы она стала прозрачной. В Photoshop:
  1. Откройте копию исходного изображения (работа с самим оригиналом гарантирует совпадение размеров)
  2. Если слой заблокирован как «Фон», дважды щелкните его, чтобы преобразовать в обычный слой (слои фона не поддерживают прозрачность)
  3. Выделите область для изменения с помощью инструмента Lasso / Quick Selection / Object Selection
  4. Нажмите Delete — выделение станет прозрачной шахматной сеткой
  5. Выберите «Экспортировать как PNG» (с включенной прозрачностью) — получится корректная alpha-маска
Тот же принцип в GIMP: Layer → Transparency → Add Alpha Channel, выделите, Delete, экспортируйте как PNG.
Фигуры вовсе не ограничиваются прямоугольниками — обведите объект лассо или выберите объект одним щелчком с помощью smart selection, и удаленная прозрачная область может принять любую неправильную форму. Расширьте выделение на несколько пикселей за контур объекта (Photoshop: Select → Modify → Expand), чтобы захватить тени и края тоже.

Способ 3: Веб-Canvas с кистью

Взаимодействие «проведите кистью по тому, что хотите изменить» в AI-фото приложениях — это всего лишь alpha-маска, генерируемая прямо в браузере и построенная вокруг одного свойства Canvas API. См. ниже Как работает редактирование в стиле кисти.

Способ 4: Маски одним кликом через AI-сегментацию

Если даже рисование кистью кажется работой, пусть это сделает модель сегментации. Открытое семейство SAM (Segment Anything Model) от Meta — основной вариант:
  • Клик для маски: один раз щелкните по объекту, и модель вернет его пиксельно точный контур (вплоть до границ отдельных волосков)
  • Текст в маску: SAM 3, опубликованная с открытым исходным кодом в ноябре 2025 года, принимает текстовые prompt на уровне понятий вроде «все желтые такси» или «игроки в красных футболках» и возвращает маски для каждого совпадающего экземпляра (модель и код — на github.com/facebookresearch, обзор — на ai.meta.com)
  • Разделение объекта / фона: инструменты с открытым исходным кодом, такие как rembg, разделяют объект и фон одной командой — область фона может напрямую служить маской «менять только фон»
Результат сегментации обычно представляет собой черно-белое растровое изображение; преобразуйте его с помощью «Способа 5» ниже. Расширение сообщества Stable Diffusion Inpaint Anything и Mask Editor в ComfyUI — зрелые реализации именно этого конвейера — «SAM segmentation + доработка кистью → маска → inpaint» — и их стоит взять на вооружение.

Способ 5: Преобразуйте черно-белую маску в alpha-маску

Если у вас уже есть маска, где «черное = редактировать, белое = оставить»:

Проверьте маску перед загрузкой

Многие ошибки invalid_image_file возникают из-за того, что у файла расширение .png, но есть только каналы RGB и нет alpha. Выполните эту проверку перед загрузкой:

Формы масок и как работает редактирование кистью

Маски могут иметь любую нерегулярную форму

Маска по своей сути — это bitmap на уровне отдельных пикселей, а не геометрическая форма: каждый пиксель хранит собственное значение alpha. Поэтому:
  • Прямоугольники и окружности — это лишь самые простые примеры
  • Силуэт в форме человека, края прядей волос, произвольные штрихи кистью или несколько разрозненных участков — все это допустимо
  • На практике большинство масок нерегулярны: они повторяют контур целевого объекта, слегка расширяясь
Единственный «совет по форме» касается результата, а не правил: прозрачная область должна полностью покрывать объект вместе с его краями, тенями и отражениями. Лучше заложить запас, чтобы у модели было пространство для естественного смешивания.

Как реализовано редактирование в стиле кисти

Взаимодействие «рисуете кистью там, где нужны изменения» в фото-приложениях на фронтенде на удивление простое: два наложенных слоя, где кисть «стирает» верхний слой в прозрачность.
Основа сводится к одной строке — задайте режим композиции canvas на destination-out (новые штрихи «вырезают» существующие пиксели):
Здесь важны инженерные детали:
  1. Преобразование координат: canvas на странице обычно уменьшается через CSS; преобразуйте координаты штриха обратно с помощью naturalWidth / clientWidth, иначе маска будет смещена
  2. Отмена: делайте снимок с помощью ctx.getImageData() перед каждым штрихом и восстанавливайте его с помощью putImageData()
  3. Расширение маски: пользователи обычно закрашивают только центр объекта — программно расширьте маску на несколько пикселей перед отправкой (кнопка «Expand Mask» в профессиональных инструментах); на стороне Python используйте PIL.ImageFilter.MaxFilter или cv2.dilate OpenCV
  4. Полупрозрачный предпросмотр: рисуйте видимую пользователю подсветку (например, полупрозрачную красную) на отдельном слое предпросмотра, оставляя экспортируемый слой маски строго бинарным: непрозрачный/прозрачный

Дальше: маска по клику или тексту

Следующий шаг после рисования кистью — заменить «человеческие штрихи» на «инференс модели»:
Именно так работают Inpaint Anything и Mask Editor в ComfyUI: сегментация отвечает за точность, кисть — за исправления — сначала автоматически сгенерируйте точную маску, а затем донастройте ее добавлением или обрезкой штрихов кисти. Для собственного продукта лучшим с точки зрения UX сочетанием сейчас является развертывание SAM как backend-сервиса при сохранении canvas для кисти в качестве fallback.

Несколько эталонных изображений + маска

Типичный сценарий: замена одежды (первое изображение — человек, затем следуют референсы стиля / ткани; маска обозначает область одежды):
При использовании нескольких изображений prompt должен чётко описывать роль каждого изображения (первое = объект, второе = референс стиля, третье = референс ткани); иначе модель может их перепутать.

Строгое сохранение содержимого вне маски (постобработка на уровне пикселей)

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

Распространённые ошибки

Частые причины:
  • Маска не является допустимым PNG, либо файл повреждён
  • Расширение указывает PNG, но фактическое кодирование не PNG
  • Ненормальный режим изображения (CMYK, режим palette, отсутствует alpha)
  • Неверный MIME type при загрузке
  • Поток файла уже был считан или закрыт до запроса
Повторное кодирование устраняет большинство случаев:
Ошибка возникает даже при разнице в 1 пиксель. Исправление:
Режимов RGB / L / P недостаточно — маска должна быть RGBA. Используйте «Метод 2» выше, чтобы преобразовать.
Эти два понятия легко перепутать:
Они работают вместе: передайте mask с alpha, чтобы отметить область редактирования, и background: "transparent", чтобы получить прозрачный результат. Проверено — они не конфликтуют.Для прозрачности результата требуется, чтобы output_format был png или webp; при сочетании с jpeg возвращается 400 (у jpeg нет alpha-канала). Полные сведения: Как сгенерировать изображения с прозрачным фоном.
Модели GPT Image всегда возвращают данные Base64; response_format относится только к устаревшему поведению DALL·E 2. Получите результат так:
Обычно это вызвано ручной установкой заголовка Content-Type (из-за чего теряется boundary) либо тем, что промежуточный слой преобразует multipart request в JSON перед пересылкой. Позвольте вашему HTTP-клиенту автоматически генерировать multipart-заголовки.

Параметры размера

gpt-image-2 поддерживает гибкие размеры при соблюдении всех следующих условий:
Распространенные размеры: 1024x1024, 1536x1024, 1024x1536, 2048x2048, 2048x1152, 3840x2160, 2160x3840, auto. Квадратные изображения обычно генерируются быстрее.

Production Request Template

Связанные страницы

Справочник API редактирования изображений

Полный справочник параметров и интерактивный Playground

Обзор GPT-Image-2

Возможности модели, тарификация и примечания к версиям
Официальные справочные материалы (скопируйте в браузер):
  • Страницы моделей: developers.openai.com/api/docs/models/gpt-image-2.5-sunburst, developers.openai.com/api/docs/models/gpt-image-2
  • Справочник API редактирования изображений: developers.openai.com/api/reference/python/resources/images/methods/edit/
  • Руководство по генерации изображений: developers.openai.com/api/docs/guides/image-generation