Для GPT Image 2.5 в n8n сначала проверьте встроенный узел OpenAI → Image → Generate an Image. Если он позволяет выбрать нужную модель и задать необходимые параметры, отдельный HTTP-запрос не обязателен: узел сам преобразует ответ в двоичный файл. Если модели нет в списке, нужны дополнительные параметры или полный ответ с расходом токенов, используйте HTTP Request и затем Convert to File.
В API указывают gpt-image-2.5-flare или gpt-image-2.5-sunburst, а не общее название gpt-image-2.5. Flare ориентирована на скорость, Sunburst — на точность редактирования; обе создают и изменяют изображения. Это следует из страниц моделей Flare и Sunburst. Ниже — настройка по документации и исходному коду, проверенным 21 сентября 2026 года. Платный запуск этого сценария мы не выполняли.
Когда достаточно узла OpenAI
В настройках подключения выберите учётные данные OpenAI, ресурс Image, операцию Generate an Image, затем нужную модель. Начните с одного изображения и короткого описания сцены. После выполнения откройте выход узла: изображение должно находиться во вкладке Binary, по умолчанию в свойстве data. Именно это свойство следует передать следующему узлу, который загружает или отправляет файл.
Документация n8n по операциям с изображениями содержит также настройки старых моделей. Поэтому упоминание DALL-E или GPT Image 1 на странице не доказывает, что GPT Image 2.5 недоступна в вашей установке. В текущем исходном коде операции генерации для версии типа узла от 2.2 используется динамический выбор modelId; старые варианты узла имеют фиксированный список. Номер типа узла и номер приложения n8n — разные значения.
Есть и конкретное свидетельство работы этой связки: в issue № 38482 описана генерация с gpt-image-2.5-flare в n8n 2.38.6, OpenAI typeVersion: 2.3. Автор сообщает о потере данных usage в Evaluations/Insights. Это описание одной конфигурации, а не обещание совместимости любой версии.
Если изображение уже есть в Binary, повторно декодировать Base64 не нужно. Если изображения нет, сначала посмотрите сообщение об ошибке, модель и версию узла. Не исправляйте отсутствие модели случайной заменой её имени: строка должна соответствовать сервису, куда отправляется запрос.
HTTP Request: минимальный запрос к Images API
Этот вариант удобен, когда нужно видеть исходный JSON-ответ или вручную задать параметры. Создайте узел HTTP Request со следующими настройками:
| Поле | Значение |
|---|---|
| Method | POST |
| URL | https://api.openai.com/v1/images/generations |
| Authentication | Учётные данные OpenAI либо сохранённые Header Auth с Authorization: Bearer … |
| Send Body | Включено |
| Body Content Type | JSON |
| Response Format | JSON |
Ключ храните в Credentials. Не вставляйте его в тело запроса, описание узла или экспортируемый пример. Русскоязычный интерфейс либо сервер n8n сами по себе не подтверждают доступность OpenAI API в стране пользователя; доступ проверяется для конкретного аккаунта и сервиса.
Тело запроса:
json{ "model": "gpt-image-2.5-flare", "prompt": "Предметная фотография белой керамической чашки на деревянном столе, мягкий дневной свет, без надписей", "size": "1024x1024", "quality": "medium", "output_format": "png" }
Это пример конфигурации по руководству OpenAI, а не сохранённый результат испытания. Для Sunburst измените только значение model, сохранив остальные параметры для первого сравнения. Не добавляйте response_format: "url" из старых инструкций по DALL-E: в данном сценарии используется изображение в data[0].b64_json.
У HTTP Request должен быть выбран ответ JSON, хотя конечный результат — картинка. Сервер возвращает JSON со строкой Base64; режим File сохранил бы тело ответа, а не автоматически извлечённый PNG. Настройки обработки ответа описаны в документации HTTP Request.
Из JSON в файл: важна граница между значением и именем поля

После HTTP Request сначала убедитесь, что data содержит хотя бы один элемент, а data[0].b64_json — непустая строка. При отсутствии изображения направляйте выполнение в ветку обработки ошибки. Успешный HTTP-статус без ожидаемых данных не должен запускать отправку пустого вложения.
Добавьте Edit Fields и создайте строковое поле image_base64. Для обычного ответа, содержащего только тело, задайте выражение:
text{{ $json.data[0].b64_json }}
Если вы включили Include Response Headers and Status, тело окажется внутри body; тогда выражение другое:
text{{ $json.body.data[0].b64_json }}
Не копируйте оба варианта одновременно. Откройте реальный выход HTTP Request и выберите путь, соответствующий его структуре.
Далее добавьте Convert to File → Move Base64 String to File:
| Поле | Что указать |
|---|---|
| Base64 Input Field | image_base64 |
| Put Output File in Field | data |
| File Name | gpt-image-result.png |
| MIME Type | image/png |
В Base64 Input Field вводится имя поля image_base64, а не длинная строка изображения и не выражение, возвращающее её содержимое. Именно так работает Convert to File. После выполнения проверьте binary.data, откройте предпросмотр или скачайте файл. Расширение и MIME в этом примере соответствуют output_format: "png".
Теперь можно передать data узлу загрузки в хранилище или отправки вложения. Сохраняйте полученный идентификатор объекта или ссылку: появление файла внутри n8n ещё не означает, что внешнее хранилище приняло его.
Как не потерять расходы и не оплатить лишние повторы

Если учёт расходов важен, сохраните исходный JSON-ответ до преобразования изображения. При наличии usage записывайте его отдельно вместе с моделью, размером, качеством и собственным идентификатором задания. Если включены заголовки и статус, поле расхода также ищите внутри body.
В прочитанной реализации встроенного узла OpenAI из ответа извлекается data, а usage не передаётся дальше. Отсутствие этой статистики в n8n не означает бесплатную генерацию; это также предмет упомянутого issue. Окончательные списания проверяются у сервиса, обработавшего запрос.
Для автоматизации полезно хранить состояния задания: запрос отправлен, изображение получено, файл сохранён, результат доставлен. Если не удалась только загрузка, повторяйте загрузку уже полученного файла. Если соединение оборвалось во время генерации, не считайте отсутствие ответа доказательством того, что сервер ничего не сделал. Ограничьте повторы и отдельно разбирайте такие случаи перед массовым запуском.
Параметр Timeout в HTTP Request измеряется в миллисекундах и относится к ожиданию заголовков и начала тела ответа. Он не задаёт гарантированное время генерации. Не подменяйте проверку результата фиксированным ожиданием в несколько секунд.
Если нужна правка исходного изображения
Генерация по тексту и редактирование используют разные запросы. Для правки применяется /v1/images/edits с исходным изображением; JSON из примера выше нельзя превратить в редактирование одним добавлением имени файла. Форматы запроса и маски приведены в руководстве OpenAI.
При передаче файла через HTTP Request выберите Form-Data и параметр типа n8n Binary File. Поле Name задаёт имя части запроса, которое ожидает API, а Input Data Field Name — существующее двоичное свойство n8n, например data. Не путайте их. Заголовок Content-Type: multipart/form-data вручную не задавайте: границу частей должен сформировать клиент. Наличие операции Edit Image во встроенном узле проверяйте вместе с поддержкой нужной модели в установленной версии.
Для выбора модели по характеру правок пригодится сравнение Flare и Sunburst. Оно решает другой вопрос: насколько результат подходит задаче, тогда как настройка n8n определяет, как запросить и получить файл.
Частые вопросы
Почему узел зелёный, а вложение не отправляется?
Проверьте, что следующий узел получает двоичное свойство data, а не JSON со строкой Base64. Затем проверьте имя файла, MIME и ответ сервиса доставки. Успех HTTP Request, создание файла и отправка вложения — отдельные результаты.
Можно ли использовать ключ другого API-провайдера?
Только вместе с адресом и правилами этого провайдера. Ключ OpenAI и ключ посредника не взаимозаменяемы. В HTTP Request адрес задаётся явно; совместимость конкретного встроенного узла нужно проверять отдельно. Пример этой статьи относится к прямому OpenAI API и не подтверждает тарифы или доступность стороннего сервиса.
Нужен ли Responses API для генерации картинки?
Нет, для приведённой задачи достаточно Images API. В Responses используется другая структура: основная модель запроса и инструмент image_generation. Нельзя переносить туда тело запроса /images/generations без изменения схемы.



