Руководство по использованию
Как скачать изображения по ссылке ChatGPT, из экспортного пакета или по gen_id
Что делать в четырёх случаях: ссылка ещё открывается, есть только экспортный пакет, ссылка истекла, остался только gen_id — как в каждом случае вернуть исходное изображение.
Если вы хотите скачать изображение по ссылке ChatGPT, нужно сохранить файл, пока ссылка ещё открывается. Ссылки на изображения в ChatGPT временные, и после истечения срока даже с gen_id исходное изображение не вернуть.
Сначала посмотрите, что у вас осталось, и выберите подходящий способ:
| Что у вас есть | Как вернуть | Результат |
|---|---|---|
| Ещё открывающаяся ссылка на изображение или исходный диалог | Открыть изображение, скачать файл, сохранить в своё хранилище | Обычно исходное изображение сохраняется |
Полный экспорт данных ChatGPT (conversations.json плюс файлы изображений) |
Найти в папке экспорта по ID из file-service:// |
Если изображение есть в экспортном пакете, его можно вернуть |
Просроченная ссылка backend-api или oaiusercontent |
Вернуться в исходный диалог, проверить полный экспорт или сгенерировать заново | Изменение самой ссылки не сделает её снова действительной |
Остался только gen_id |
Сгенерировать заново по исходному промпту | Пиксели исходного изображения не вернуть |
| Процесс, где нужно многократно генерировать изображения пакетами | Генерировать через API с документацией, скачивать и сохранять по своему адресу | Дальнейшие изображения остаются у вас |
Ключевое отличие: действующая подписанная ссылка позволяет скачать файл, а gen_id — это лишь идентификатор в диалоге, по нему ничего не скачать.
Ссылка ещё открывается: скачиваем напрямую
Если исходный диалог ещё на месте, откройте сгенерированное изображение и воспользуйтесь встроенной кнопкой скачивания ChatGPT. Если вы скопировали ссылку на изображение, открывайте её по полной ссылке (не удаляйте строку параметров после ?) и сразу сохраняйте.
После скачивания проверьте следующее, прежде чем считать дело сделанным:
- возвращается HTTP 200;
- тип содержимого — изображение, например
image/pngилиimage/webp; - размер файла нормальный, а не несколько сотен байт;
- файл открывается и это именно нужное вам изображение.
Ссылку, которая открывается только в вашем текущем браузере, нельзя использовать как долгосрочный адрес: в браузере могут сохраняться состояние входа или только что выданная подпись. Скачайте файл и загрузите в своё хранилище, не отправляйте ссылку ChatGPT напрямую и не встраивайте её в продукт.
Почему ссылки на изображения ChatGPT истекают
У одного сгенерированного изображения в ChatGPT внутри может быть несколько видов ссылок:
gen_id: идентификатор конкретной генерации в диалоге.file-service://file-...: внутренний указатель на файл, а не URL.chatgpt.com/backend-api/...иfiles.oaiusercontent.com/...: временные подписанные ссылки для скачивания.
Каждый из них отвечает за своё, и ни один не является постоянным публичным адресом изображения.
Скопированная ссылка не открывается — обычно две ситуации:
HTTP 422
missing query fields such as p or ts
Ссылка скопирована не полностью, не хватает параметров подписи, либо при вставке какой-то инструмент удалил часть после ?.
HTTP 404
ResourceNotFound
Подпись или файл уже истекли, файл удалён, либо запрос вышел за контекст, в котором ссылка была выдана. Собрать из gen_id правдоподобный путь тоже не восстановит подпись и изображение.
Как вернуть изображения из полного экспорта данных
Запросите экспорт данных в настройках ChatGPT; в полном экспортном пакете будут conversations.json и отдельные файлы изображений. В JSON одно изображение выглядит примерно так:
{
"content_type": "image_asset_pointer",
"asset_pointer": "file-service://file-A1b2C3d4E5f6",
"size_bytes": 1417238,
"width": 1024,
"height": 1024,
"metadata": {
"dalle": {"gen_id": "aBcD3fGh1jKl"}
}
}
Полезен фрагмент file-... после file-service:// — он совпадает с именем файла в экспортном пакете. gen_id — это ни имя файла, ни учётные данные для скачивания.
1. Полностью распакуйте экспортный пакет
Сохраните исходную структуру каталогов. Если открыть только conversations.json, вы потеряете вторую половину — файлы изображений, с которыми нужно сопоставлять.
2. Найдите указатель на изображение
В conversations.json найдите "content_type": "image_asset_pointer", найдите нужный диалог и нужное изображение, скопируйте полный asset_pointer.
3. Извлеките ID файла
Уберите только внутренний префикс:
file-service://file-A1b2C3d4E5f6
└─ file-A1b2C3d4E5f6
Не заменяйте file-service:// на https:// и не пытайтесь curl — это не публичный адрес.
4. Найдите в файлах экспорта
macOS или Linux:
find . -type f -iname '*file-A1b2C3d4E5f6*'
Если в экспортном пакете файлы переименованы или лежат в более глубоких каталогах, ищите по самой характерной части ID. Если есть size_bytes, width, height, сверьте их с файлами-кандидатами.
5. Убедитесь и сохраните у себя
Откройте файл-кандидат локально, убедитесь, что это нужное изображение, затем загрузите в своё S3, R2, CDN или хранилище приложения и запишите этот долгосрочный адрес.
Если изображений много, используйте приведённый ниже скрипт, чтобы локально перечислить все ID изображений в экспортном пакете — он не подключается к ChatGPT:
import json
from pathlib import Path
data = json.loads(Path("conversations.json").read_text())
seen = set()
def walk(value):
if isinstance(value, dict):
if value.get("content_type") == "image_asset_pointer":
pointer = value.get("asset_pointer", "")
if pointer.startswith("file-service://"):
seen.add(pointer.removeprefix("file-service://"))
for child in value.values():
walk(child)
elif isinstance(value, list):
for child in value:
walk(child)
walk(data)
for file_id in sorted(seen):
print(file_id)
Наличие указателя лишь означает, что изображение когда-то упоминалось в диалоге; файла в экспортном пакете может не быть. Если после полной распаковки соответствующий файл всё равно не находится, то ни file-service://, ни gen_id не восстановят исходное изображение.
Что делать, если остался только gen_id
Нет никакого публичного интерфейса, который преобразует gen_id в PNG, WebP или новую подписанную ссылку. Если исходный диалог, рабочие ссылки и файлы в экспортном пакете потеряны, остаётся только сгенерировать заново по исходному промпту и контексту того времени.
Недействительный ID оставьте лишь как запись для диагностики. Для изображений, которые нужно хранить долго, записывайте следующее:
- промпт и параметры генерации;
- какой сервис и какая модель использовались;
- ID задачи у сервиса — для диагностики и обращения в поддержку;
- путь к файлу или долгосрочный адрес в вашем хранилище.
Автоматический процесс скачивания через API
Для пакетной генерации с сохранением используйте API, который изначально возвращает файлы изображений. В HiAPI стабильный процесс такой: отправить, опрашивать, скачать, проверить, перенести.
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2/text-to-image",
"input": {
"prompt": "晨光里,书桌上放着一只纸鹤",
"aspect_ratio": "1:1",
"resolution": "1K"
}
}'
Получив taskId, опрашивайте GET /v1/tasks/{taskId}, после успеха читайте data.output[0].url и expireAt:
curl -s "https://api.hiapi.ai/v1/tasks/$TASK_ID" \
-H "Authorization: Bearer $HIAPI_API_KEY"
curl -s -o generated-image.webp "<data.output[0].url>"
Адрес, возвращаемый API, тоже временный, но срок истечения указан в ответе (expireAt), так что можно обработать вовремя. Скачивайте до истечения срока, убедитесь, что получили изображение, а не HTML или JSON с ошибкой, затем загрузите файл в своё хранилище.
gpt-image-2/text-to-image стоит $0.03 за изображение в 1K, $0.04 за 2K, $0.06 за 4K. Параметры и онлайн-попробовать — на странице модели GPT Image 2, формат запроса — в документации по созданию задачи.
Подход к хранению, не боящийся истечения ссылок
Для каждой успешной задачи:
- Сохраните ID задачи до опроса — тогда при повторных попытках worker не отправит задачу заново и не спишет оплату дважды.
- Скачайте файл, пока подписанный адрес ещё действителен.
- Проверьте код состояния, тип содержимого и размер файла, принимайте только если это изображение.
- Загрузите по заданному вами пути к файлу.
- В базе данных храните свой адрес; временный адрес оставляйте только для краткосрочной диагностики.
Частые вопросы
Как скачать изображение по ссылке ChatGPT?
Пока ссылка ещё открывается, откройте её по полной ссылке (с параметрами подписи), скачайте файл изображения и сохраните в своё хранилище. Ссылки, которые открываются только в браузере, где вы вошли, считайте временными.
Есть ли официальный интерфейс скачивания по gen_id?
Нет. ChatGPT не публикует никакого интерфейса «передать gen_id — получить изображение»; этот идентификатор имеет смысл только в исходном диалоге.
Почему ссылка на изображение ChatGPT возвращает 422?
Обычно в подписанной ссылке не хватает необходимых параметров. Если скопирован только путь или инструмент удалил часть после ?, ссылка становится недействительной.
Почему та же ссылка позже возвращает 404?
Подписанная ссылка и сам файл временные. После истечения срока возврат ResourceNotFound нормален, и gen_id продлить срок не может.
Как найти изображения file-service:// в экспортном пакете?
Скопируйте ID файла после file-service://, найдите в полностью распакованном экспортном пакете имя файла, содержащее этот ID, и сверьте по размеру файла и ширине с высотой.
Как получить постоянный адрес изображения?
Пока исходный файл ещё можно скачать, загрузите его в своё хранилище и сохраните свой адрес. Постоянство зависит от вашего хранилища, а не от временной ссылки для скачивания у сервиса.
Похожие статьи
Все статьи →-
Руководство по использованию
Руководство по началу работы с seedream-5.0-pro/image-to-image: возможности, цены и ключевые моменты интеграции
Границы возможностей модели редактирования изображений ByteDance, принципы тарификации и практика инженерной интеграции
-
Руководство по использованию
Руководство по использованию seedream-5.0-pro text-to-image: границы возможностей, интеграция API и контроль затрат
Практический взгляд для разработчиков: от ключевых параметров до оценки стоимости $0.05 за изображение
-
Руководство по использованию
Руководство по началу работы с Hailuo 2.3 Fast для генерации видео из изображений: границы возможностей, цены и практика интеграции
Ключевые моменты выбора и интеграции модели MiniMax для генерации видео из изображений для разработчиков