Загрузить фото в чат GPT можно двумя путями. В интерфейсе — нажать «+» слева от поля ввода, выбрать пункт добавления фото и файлов, приложить картинку и рядом написать вопрос. Из кода — отправить изображение в OpenAI API как ссылку или как base64-строку в блоке input_image. Ниже — оба способа, с рабочим на 2026 год кодом.

  • Путь в интерфейсе: «+» → фото → вопрос в том же сообщении.
  • Путь из кода: Responses API, блок input_image, ссылка или base64.
  • Форматы и лимиты — из официальной документации, а не из старых гайдов.
  • Почему примеры двух-трёхлетней давности падают с ошибкой и как их починить.
  • Разбор трёх типовых причин, по которым загрузка не срабатывает.

Как загрузить фото в чат GPT через интерфейс?

Путь загрузки фото в интерфейсе: от кнопки до ответа модели
Путь загрузки фото в интерфейсе: от кнопки до ответа модели

Самый короткий путь занимает три действия и не требует ни строчки кода.

  • Откройте чат и нажмите «+» слева от поля ввода сообщения.
  • Выберите пункт добавления фото и файлов — откроется системный проводник или галерея.
  • Укажите файл. В мобильном приложении в том же меню доступна съёмка на камеру.
  • Не отправляйте картинку молча: напишите вопрос в том же сообщении — «распознай текст», «найди ошибку на схеме», «переведи вывеску».
  • Дождитесь ответа и уточняйте деталями в следующих сообщениях — изображение остаётся в контексте диалога.

Есть два способа быстрее: перетащить файл прямо в поле ввода мышью или вставить скриншот из буфера обмена через Ctrl+V. Оба работают в браузере и экономят пару кликов на каждой картинке.

Важно не путать две разные задачи: загрузка фото — это разбор готовой картинки, а создание новой с нуля работает по другому сценарию, мы разбирали его в материале про новую модель генерации изображений. Кнопка одна, режимы разные.

Ключевая деталь, которую пропускают: фото без вопроса модель трактует сама и часто не туда. Формулировка задачи рядом с файлом важнее качества самого снимка.

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

ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
  • Где и как применять? Потестируем модель после установки на разных задачах
  • Как дообучить модель под себя?

Какие форматы и размеры изображений принимает модель?

Здесь чаще всего и ломается загрузка: файл отправляется, а ответа нет, потому что формат не из списка. Документация OpenAI по работе с изображениями перечисляет поддерживаемые типы прямо: PNG (.png), JPEG (.jpeg и .jpg), WEBP (.webp) и неанимированный GIF (.gif).

Ограничения запроса в API там же указаны в двух числах: до 512 МБ общего объёма на запрос и до 1500 отдельных изображений в одном запросе.

Параметр Значение
Форматы PNG, JPEG/JPG, WEBP, неанимированный GIF
Объём запроса до 512 МБ суммарно
Изображений в запросе до 1500
Способы передачи URL, base64-строка, file ID из Files API
Детализация разбора параметр detail: low, high, original, auto

Параметр detail задаёт, насколько подробно модель разбирает картинку. Документация описывает его так: «The detail parameter tells the model what level of detail to use when processing and understanding the image (low, high, original, or auto)». Значение low имеет смысл там, где нужен общий сюжет, а не мелкий текст: изображение обрабатывается дешевле, потому что входные картинки тарифицируются в токенах, как и текст.

Мини-вывод: если загрузка «молчит», сначала проверьте расширение файла — HEIC с айфона и анимированный GIF в списке поддерживаемых не значатся.

Как загрузить фото в чат GPT из кода на Python?

Пайплайн загрузки изображения через API на Python
Пайплайн загрузки изображения через API на Python

Через интерфейс вы обрабатываете одну картинку за раз. Когда их сотни — нужен API. Здесь важно не взять первый попавшийся пример из старой статьи: библиотека openai сменила интерфейс, и код, написанный под прежнюю схему, у новичка просто падает.

Порядок такой:

  • Поставьте библиотеку: pip install openai. Без неё импорт не пройдёт.
  • Заведите ключ в личном кабинете разработчика. Подписка на чат и оплата API — разные счета: ключ от платного чата запрос не оплатит.
  • Положите ключ в переменную окружения OPENAI_API_KEY. Клиент читает её сам, вписывать ключ в код не нужно.
  • Передайте картинку в блоке input_image — ссылкой или base64-строкой.
  • Прочитайте ответ из response.output_text.

Минимальный рабочий пример с локальным файлом — по актуальной схеме Responses API:

python
# pip install openai
# перед запуском: export OPENAI_API_KEY="sk-..."  (Windows: setx OPENAI_API_KEY "sk-...")
import base64, mimetypes
from openai import OpenAI

client = OpenAI()  # ключ берётся из переменной окружения OPENAI_API_KEY

SUPPORTED = {"image/png", "image/jpeg", "image/webp", "image/gif"}

def to_data_url(path):
    mime, _ = mimetypes.guess_type(path)
    if mime not in SUPPORTED:
        raise ValueError(f"Формат не поддерживается: {mime}")
    with open(path, "rb") as f:
        b64 = base64.b64encode(f.read()).decode("utf-8")
    return f"data:{mime};base64,{b64}"

response = client.responses.create(
    model="gpt-5.6",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": "Что изображено на фото?"},
            {"type": "input_image", "image_url": to_data_url("cat.jpg")},
        ],
    }],
)
print(response.output_text)

Три места, где ломается чаще всего: не установлена библиотека, не задана переменная окружения, MIME-тип подставлен вручную как jpeg для файла PNG.

Если картинка уже лежит в интернете, base64 не нужен — модель заберёт её по ссылке. Заодно здесь виден параметр detail на своём месте, внутри блока изображения:

python
response = client.responses.create(
    model="gpt-5.6",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": "Опиши товар на витрине"},
            {
                "type": "input_image",
                "image_url": "https://example.com/shelf.jpg",
                "detail": "low",
            },
        ],
    }],
)
print(response.output_text)

Третий способ передачи — file_id, полученный через Files API: файл загружается один раз и потом переиспользуется в нескольких запросах по идентификатору. Это удобно, когда одна и та же картинка нужна в серии диалогов и гонять её байты по сети каждый раз незачем.

Пакетная обработка папки строится поверх той же функции. Полезный приём для тех, кто разбирает архив снимков: сначала счётчик и фильтр по формату, потом запрос — иначе первый же .heic уронит цикл на середине.

python
import pathlib

EXT = {".png", ".jpg", ".jpeg", ".webp", ".gif"}

def describe_folder(folder, prompt):
    out = {}
    for p in sorted(pathlib.Path(folder).iterdir()):
        if p.suffix.lower() not in EXT:
            continue
        try:
            r = client.responses.create(
                model="gpt-5.6",
                input=[{"role": "user", "content": [
                    {"type": "input_text", "text": prompt},
                    {"type": "input_image", "image_url": to_data_url(str(p))},
                ]}],
            )
            out[p.name] = r.output_text
        except Exception as e:
            out[p.name] = f"ошибка: {e}"
    return out

Мини-вывод: цикл без try/except и без фильтра расширений разваливается на первом же неподходящем файле — и вы теряете результат по всем обработанным до него.

Почему старые примеры загрузки фото больше не запускаются?

Четыре поломки старых примеров и чем их заменить
Четыре поломки старых примеров и чем их заменить

Мы прогнали по актуальной документации примеры, которые до сих пор кочуют по русскоязычным руководствам. Четыре поломки повторяются почти везде.

Первая — устаревшая схема вызова. Примеры собирают JSON вручную и шлют его через requests на эндпоинт чат-комплишенов с типом image_url. Официальные примеры OpenAI сегодня написаны на клиенте OpenAI() и методе client.responses.create(), а блок изображения называется input_image. Скопированный старый код работает не так, как описано вокруг него, а разбираться в расхождении новичку нечем.

Вторая — Bing Image Search. Огромный пласт руководств предлагает «дополнить» разбор фото поиском похожих картинок через ресурс Bing Search v7 в Azure. Это мёртвая ветка: Microsoft объявила о выводе Bing Search API из эксплуатации 11 августа 2025 года, причём отключение затрагивает всех пользователей, включая уровни F1 и S1–S9. Создать такой ресурс в Azure уже нельзя, а значит, инструкция «зарегистрируйтесь и получите ключ Bing» обрывается на первом же шаге. Как замену Microsoft предлагает Grounding with Bing Search в составе Azure AI Agents — это другой продукт с другим интерфейсом, а не переименованный старый.

Третья — тихая поломка кэша. Типовой пример кэширует ответ по ключу hash(img_path). Встроенный hash() для строк в Python 3 рандомизируется при каждом запуске процесса, поэтому после перезапуска ключ другой и кэш не срабатывает никогда. Ошибки при этом не будет — просто счёт за API растёт. Плюс хэшируется путь, а не содержимое: переименовали файл — заплатили заново. Рабочая замена:

python
import hashlib

def file_key(path, chunk=8192):
    h = hashlib.sha256()
    with open(path, "rb") as f:
        for part in iter(lambda: f.read(chunk), b""):
            h.update(part)
    return h.hexdigest()  # стабилен между запусками и завязан на содержимое

Четвёртая — жёстко зашитый MIME-тип. Строка f"data:image/jpeg;base64,{img_b64}" подставляет jpeg любому файлу. Для PNG или WEBP заголовок будет врать. Именно поэтому в примере выше тип берётся из mimetypes.guess_type(), а неподдерживаемый формат отсекается до отправки.

Мини-вывод: три из четырёх поломок не дают внятного сообщения об ошибке — код «работает», просто результат не тот. Проверять примеры стоит по документации, а не по дате публикации статьи.

Что делать, если фото не загружается в чат GPT?

Разберём три причины, по которым загрузка срывается, и что проверять в каждом случае.

Формат. Список поддерживаемых типов закрытый: PNG, JPEG/JPG, WEBP и неанимированный GIF. Снимок с iPhone по умолчанию сохраняется в HEIC — пересохраните его в JPEG перед отправкой. Анимированный GIF тоже не подходит: нужен статичный кадр. На этом спотыкаются чаще всего те, кто фотографирует документы телефоном, — например, в сценарии, где модель проверяет рукописные работы по фото.

Вес и количество. Для API документация даёт потолок в 512 МБ на запрос и 1500 изображений в нём. Практический смысл: длинный диалог с десятками полноразмерных снимков упирается не в «лимит на картинку», а в суммарный объём запроса. Сжимайте — для распознавания текста хватает разрешения, при котором надписи читает человек.

Постановка задачи. Самый частый случай «модель не видит»: изображение отправлено без вопроса или вопрос задан следующим сообщением. Текст и картинка должны идти в одном сообщении — в API это буквально один массив content с двумя блоками, input_text и input_image. В интерфейсе логика та же.

Мини-вывод: сначала формат, потом объём, потом формулировка. В таком порядке проверка занимает минуту.

Как выбрать способ: интерфейс, ссылка или base64?

Способ Когда подходит Что нужно
Интерфейс чата Разовая задача, 1–5 картинок Только аккаунт, кода нет
API, ссылка на изображение Картинки уже лежат в интернете или в S3 Ключ, публично доступный URL
API, base64 Локальные файлы, закрытый контур Ключ, кодирование файла
API, file_id (Files API) Одна картинка в серии запросов Ключ, предварительная загрузка файла

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

Если Python вы пока не писали, а задача уже стоит, разумнее начать не с изучения языка целиком, а с одного рабочего сценария: как это выглядит на практике, видно в разборе того, что удаётся автоматизировать за год работы с ИИ. По такой же логике собраны практические программы Зерокодера по автоматизации на нейросетях.

Чек-лист: от первой картинки до пакетной обработки

Шаг Что сделать Готово?
Формат PNG / JPEG / WEBP / статичный GIF
Вопрос Текст и картинка в одном сообщении
Библиотека pip install openai
Ключ OPENAI_API_KEY в переменной окружения
Схема вызова client.responses.create + input_image
MIME mimetypes.guess_type, не хардкод jpeg
Кэш sha256 содержимого, не hash() пути
Пакет Фильтр расширений + try/except в цикле

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

Сколько изображений можно отправить за один запрос?

Документация OpenAI указывает предел в 1500 отдельных изображений на запрос при общем объёме до 512 МБ. Для интерфейса чата практический потолок ниже и упирается в удобство диалога, а не в API.

Какие форматы изображений поддерживаются?

PNG (.png), JPEG (.jpeg и .jpg), WEBP (.webp) и неанимированный GIF (.gif). HEIC и анимированный GIF в списке отсутствуют — их нужно пересохранить.

Почему модель не отвечает на загруженное фото?

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

Чем отличается передача ссылкой от base64?

Ссылка требует, чтобы файл был доступен из интернета, и не раздувает тело запроса. Base64 работает с локальными файлами и закрытым контуром, но увеличивает объём запроса примерно на треть от веса файла. Есть и третий вариант — file_id из Files API для повторного использования одной картинки.

Работает ли Bing Image Search для поиска похожих картинок?

Нет. Microsoft вывела Bing Search API из эксплуатации 11 августа 2025 года — отключение затронуло все уровни, включая F1 и S1–S9. Инструкции, где предлагается создать ресурс Bing Search v7 в Azure, нерабочие. Заявленный производителем путь миграции — Grounding with Bing Search в составе Azure AI Agents.

Нужен ли отдельный ключ, чтобы отправлять фото из кода?

Да. Код обращается к API и требует ключ, созданный в кабинете разработчика OpenAI. Ключ кладут в переменную окружения OPENAI_API_KEY — клиент OpenAI() читает её сам.

Большой практикум
ЗАМЕНИ ВСЕ НЕЙРОСЕТИ НА ОДНУ — PERPLEXITY
ПОКАЖЕМ НА КОНКРЕТНЫХ КЕЙСАХ
  • Освой нейросеть Perplexity и узнай, как пользоваться функционалом остальных ИИ в одном
  • УЧАСТВОВАТЬ ЗА 0 РУБ.
  • Расскажем, как получить подписку
Участвовать бесплатно
ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросеть DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
Участвовать бесплатно