Guide d'utilisation
Comment télécharger les images depuis un lien ChatGPT, un export de données ou un gen_id
Lien encore accessible, export seul, lien expiré, gen_id seul : comment retrouver l'image originale dans chacun de ces quatre cas.
Pour télécharger une image depuis un lien ChatGPT, il faut enregistrer le fichier pendant que le lien est encore accessible. Les liens d'image de ChatGPT sont temporaires : une fois expirés, même le gen_id ne permet pas de récupérer l'image originale.
Commencez par regarder ce qu'il vous reste, puis choisissez la méthode correspondante :
| Ce qu'il vous reste | Comment le retrouver | Résultat |
|---|---|---|
| Un lien d'image encore accessible, ou la conversation d'origine | Ouvrir l'image, télécharger le fichier, l'enregistrer dans votre propre stockage | Permet généralement de conserver l'image originale |
Un export complet des données ChatGPT (conversations.json plus les fichiers d'images) |
Utiliser l'ID contenu dans file-service:// pour chercher dans le dossier d'export |
Si l'image est dans l'export, elle peut être retrouvée |
Un lien backend-api ou oaiusercontent déjà expiré |
Revenir à la conversation d'origine, consulter l'export complet, ou régénérer | Modifier le lien lui-même ne le rendra pas de nouveau valide |
Uniquement un gen_id |
Régénérer avec le prompt d'origine | Les pixels de l'image originale ne peuvent pas être récupérés |
| Un flux nécessitant de générer des images en lot de façon répétée | Générer via une API documentée, télécharger puis stocker à votre propre adresse | Les images futures restent entre vos mains |
La différence essentielle : un lien signé encore valide permet de télécharger le fichier, tandis qu'un gen_id n'est qu'un identifiant dans la conversation et ne permet de télécharger quoi que ce soit.
Lien encore accessible : téléchargement direct
Si la conversation d'origine existe encore, ouvrez l'image générée et utilisez le bouton de téléchargement intégré à ChatGPT. Si vous avez copié le lien de l'image, ouvrez-le avec le lien complet (ne supprimez pas la suite de paramètres après le ?), puis enregistrez immédiatement.
Après le téléchargement, vérifiez ces points avant de considérer l'opération réussie :
- la réponse est HTTP 200 ;
- le type de contenu est bien une image, par exemple
image/pngouimage/webp; - la taille du fichier est normale, pas quelques centaines d'octets ;
- le fichier s'ouvre et correspond bien à l'image voulue.
Un lien qui ne s'ouvre que dans votre navigateur actuel ne doit pas être utilisé comme adresse permanente : le navigateur peut encore porter l'état de connexion ou une signature fraîchement émise. Téléchargez le fichier, envoyez-le dans votre propre stockage, et ne diffusez pas directement les liens ChatGPT ni ne les inscrivez dans un produit.
Pourquoi les liens d'image ChatGPT expirent
Une image générée peut avoir plusieurs références en interne chez ChatGPT :
gen_id: l'identifiant d'une génération dans la conversation.file-service://file-...: un pointeur de fichier interne, pas une URL.chatgpt.com/backend-api/...etfiles.oaiusercontent.com/...: des liens de téléchargement signés temporaires.
Chacun remplit son propre rôle ; aucun n'est une adresse d'image publique permanente.
Un lien copié qui ne s'ouvre pas présente généralement deux cas :
HTTP 422
missing query fields such as p or ts
Le lien a été copié de façon incomplète, il manque des paramètres de signature, ou un outil a supprimé la partie après le ? lors du collage.
HTTP 404
ResourceNotFound
La signature ou le fichier a expiré, le fichier a été supprimé, ou la requête ne se situe plus dans le contexte de l'émission du lien. Reconstituer un chemin d'apparence correct avec le gen_id ne restaure ni la signature ni l'image.
Retrouver des images depuis un export complet des données
Demandez un export de données dans les paramètres de ChatGPT ; l'export complet contient conversations.json et des fichiers d'images séparés. Dans le JSON, une image ressemble à peu près à ceci :
{
"content_type": "image_asset_pointer",
"asset_pointer": "file-service://file-A1b2C3d4E5f6",
"size_bytes": 1417238,
"width": 1024,
"height": 1024,
"metadata": {
"dalle": {"gen_id": "aBcD3fGh1jKl"}
}
}
Ce qui est utile, c'est le segment file-... après file-service:// : il permet de faire correspondre le nom de fichier dans l'export. Le gen_id n'est ni un nom de fichier ni un justificatif de téléchargement.
1. Décompressez entièrement l'export
Conservez la structure de répertoires d'origine. Si vous n'ouvrez que conversations.json, vous perdez l'autre moitié, les fichiers d'images à faire correspondre.
2. Trouvez le pointeur d'image
Dans conversations.json, recherchez "content_type": "image_asset_pointer", trouvez la conversation et l'image voulues, puis copiez le asset_pointer complet.
3. Extrayez l'ID de fichier
Retirez uniquement le préfixe interne :
file-service://file-A1b2C3d4E5f6
└─ file-A1b2C3d4E5f6
Ne remplacez pas file-service:// par https:// pour faire un curl : ce n'est pas une adresse publique.
4. Cherchez dans les fichiers de l'export
macOS ou Linux :
find . -type f -iname '*file-A1b2C3d4E5f6*'
Si l'export a renommé les fichiers ou les a placés dans des répertoires plus profonds, cherchez le segment le plus distinctif de l'ID. Si vous avez size_bytes, width, height, comparez-les avec les fichiers candidats.
5. Après vérification, stockez chez vous
Ouvrez localement le fichier candidat, vérifiez qu'il s'agit bien de cette image, puis envoyez-le dans votre propre S3, R2, CDN ou stockage applicatif, et notez cette adresse permanente.
S'il y a beaucoup d'images, utilisez le script ci-dessous pour lister localement tous les IDs d'images de l'export ; il ne se connecte pas à 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)
La présence d'un pointeur indique seulement que cette image a été référencée dans la conversation ; le fichier n'est pas forcément présent dans l'export. Si, après décompression complète, vous ne trouvez toujours pas le fichier correspondant, ni file-service:// ni gen_id ne permettront de restaurer l'image originale.
Que faire s'il ne reste qu'un gen_id
Aucune interface publique ne permet de convertir un gen_id en PNG, WebP ou en nouveau lien signé. Si la conversation d'origine, un lien utilisable et les fichiers de l'export ont tous disparu, il ne reste qu'à régénérer avec le prompt d'origine et le contexte de l'époque.
Conservez les IDs invalides uniquement comme trace de diagnostic. Pour les images à conserver durablement à l'avenir, notez ces éléments :
- le prompt et les paramètres de génération ;
- quel service et quel modèle ont été utilisés ;
- l'ID de tâche du fournisseur, utile pour le diagnostic et le support ;
- le chemin de fichier ou l'adresse permanente dans votre propre stockage.
Construire un flux de téléchargement automatique avec l'API
Pour générer des images en lot et les conserver, utilisez une API qui renvoie déjà des fichiers d'images. Sur HiAPI, le flux fiable est : soumettre, interroger, télécharger, vérifier, transférer.
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"
}
}'
Après avoir obtenu le taskId, interrogez GET /v1/tasks/{taskId} ; en cas de succès, lisez data.output[0].url et 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>"
Les adresses renvoyées par l'API sont également temporaires, mais la date d'expiration figure dans le résultat (expireAt), ce qui permet de les traiter à temps. Téléchargez avant l'expiration, vérifiez que vous obtenez bien une image et non une page HTML ou une erreur JSON, puis transférez le fichier dans votre propre stockage.
gpt-image-2/text-to-image coûte 0,03 $ par image en 1K, 0,04 $ en 2K et 0,06 $ en 4K. Les paramètres et l'essai en ligne sont sur la page du modèle GPT Image 2, le format des requêtes dans la documentation de création de tâche.
Une méthode de stockage à l'épreuve de l'expiration des liens
Pour chaque tâche réussie :
- Enregistrez l'ID de tâche avant d'interroger, pour que le worker ne soumette pas deux fois et ne facture pas deux fois lors d'un nouvel essai.
- Téléchargez le fichier pendant que l'adresse signée est encore valide.
- Vérifiez le code de statut, le type de contenu et la taille du fichier ; ne l'acceptez qu'après confirmation qu'il s'agit d'une image.
- Téléversez-le avec un chemin de fichier que vous définissez vous-même.
- Stockez votre propre adresse en base de données ; ne gardez l'adresse temporaire que pour le diagnostic à court terme.
Questions fréquentes
Comment télécharger une image depuis un lien ChatGPT ?
Pendant que le lien est encore accessible, ouvrez-le au complet (avec les paramètres de signature), téléchargez le fichier d'image, puis stockez-le chez vous. Tout lien qui ne s'ouvre que dans votre navigateur connecté doit être considéré comme temporaire.
Existe-t-il une interface officielle de téléchargement par gen_id ?
Non. ChatGPT n'expose aucune interface publique du type « passer un gen_id et recevoir l'image » ; cet identifiant n'a de sens que dans la conversation d'origine.
Pourquoi un lien d'image ChatGPT renvoie-t-il 422 ?
En général, il manque des paramètres nécessaires au lien signé. Si seul le chemin a été copié, ou si l'outil utilisé a supprimé la partie après le ?, le lien devient invalide.
Pourquoi le même lien renvoie-t-il ensuite 404 ?
Les liens signés et le fichier lui-même sont temporaires. Après expiration, renvoyer ResourceNotFound est normal, et le gen_id ne permet pas de prolonger la validité.
Comment retrouver une image file-service:// dans l'export ?
Copiez l'ID de fichier après file-service://, cherchez dans l'export entièrement décompressé les noms de fichiers contenant cet ID, puis vérifiez avec la taille du fichier et ses dimensions.
Comment obtenir une adresse d'image permanente ?
Pendant que le fichier source est encore téléchargeable, envoyez-le dans votre propre stockage et conservez votre propre adresse. Le caractère permanent dépend de votre stockage, pas du lien de téléchargement temporaire du fournisseur.
Articles similaires
Voir tous les articles →-
Guide d'utilisation
Guide de démarrage pour seedream-5.0-pro/image-to-image : capacités, tarification et points d'intégration
Limites de capacité, mode de facturation et pratiques d'intégration technique du modèle d'édition d'image de ByteDance
-
Guide d'utilisation
Guide de prise en main de la génération d'images par texte avec seedream-5.0-pro : limites de capacités, intégration API et maîtrise des coûts
Point de vue pratique pour les développeurs : des points clés des paramètres à l'estimation du coût de 0,05 $ par image
-
Guide d'utilisation
Guide de prise en main de Hailuo 2.3 Fast image-to-video : limites de capacités, tarification et intégration pratique
Points clés pour les développeurs : choisir et intégrer le modèle image-to-video de MiniMax