Guida all'uso
Come scaricare le immagini da un link ChatGPT, da un pacchetto di esportazione o da un gen_id
Il link è ancora apribile, c'è solo il pacchetto di esportazione, il link è scaduto, resta solo il gen_id: come recuperare l'immagine originale in ciascuno dei quattro casi.
Per scaricare un'immagine da un link ChatGPT, devi salvare il file finché il link è ancora apribile. I link delle immagini di ChatGPT sono temporanei: una volta scaduti, neanche con il gen_id puoi riavere l'immagine originale.
Prima guarda cosa ti è rimasto, poi scegli il metodo corrispondente:
| Cosa hai a disposizione | Come recuperare | Risultato |
|---|---|---|
| Un link immagine ancora apribile, o la conversazione originale | Apri l'immagine, scarica il file, salvalo sul tuo storage | Di solito l'immagine originale si conserva |
Un'esportazione completa dei dati ChatGPT (conversations.json più i file delle immagini) |
Cerca nella cartella di esportazione usando l'ID contenuto in file-service:// |
Se l'immagine è nel pacchetto di esportazione, si può recuperare |
Un link backend-api o oaiusercontent già scaduto |
Torna alla conversazione originale, controlla l'esportazione completa, oppure rigenera | Modificare il link stesso non lo rende di nuovo valido |
Resta solo un gen_id |
Rigenera con il prompt originale | I pixel dell'immagine originale non si recuperano |
| Un flusso che richiede generazioni di immagini ripetute in batch | Genera con un'API documentata, scarica e salva sul tuo indirizzo | Le immagini future saranno nelle tue mani |
La differenza chiave è questa: un link firmato ancora valido permette di scaricare il file, mentre gen_id è solo un identificatore nella conversazione e non permette di scaricare nulla.
Il link è ancora apribile: scarica direttamente
Se la conversazione originale esiste ancora, apri l'immagine generata e usa il pulsante di download integrato in ChatGPT. Se hai copiato il link dell'immagine, aprilo con il link completo (non eliminare la serie di parametri dopo il ?) e salvalo subito.
Dopo il download, verifica questi punti prima di considerarlo riuscito:
- Restituisce HTTP 200;
- Il content type è un'immagine, ad esempio
image/pngoimage/webp; - La dimensione del file è normale, non poche centinaia di byte;
- Si apre ed è proprio l'immagine che cercavi.
Un link apribile solo nel tuo browser attuale non può essere usato come indirizzo permanente: nel browser potrebbe esserci ancora lo stato di login o una firma appena emessa. Scarica il file e caricalo sul tuo storage; non inviare direttamente i link di ChatGPT né inserirli in un prodotto.
Perché i link delle immagini ChatGPT scadono
Per un'immagine generata, ChatGPT può avere internamente diversi tipi di riferimento:
gen_id: l'identificatore di una generazione nella conversazione.file-service://file-...: un puntatore interno al file, non un URL.chatgpt.com/backend-api/...efiles.oaiusercontent.com/...: link di download firmati temporanei.
Ognuno svolge un compito diverso; nessuno è un indirizzo pubblico permanente dell'immagine.
Un link copiato che non si apre presenta comunemente due casi:
HTTP 422
missing query fields such as p or ts
Il link è stato copiato in modo incompleto, mancano i parametri di firma, oppure al momento dell'incolla qualche strumento ha eliminato la parte dopo il ?.
HTTP 404
ResourceNotFound
La firma o il file sono scaduti, il file è stato eliminato, oppure la richiesta è al di fuori del contesto in cui il link è stato emesso. Compilare un percorso che sembra corretto con il gen_id non ripristina né la firma né l'immagine.
Recuperare le immagini da un'esportazione completa dei dati
Richiedi l'esportazione dei dati nelle impostazioni di ChatGPT: il pacchetto completo contiene conversations.json e i file delle immagini separati. Nel JSON un'immagine appare più o meno così:
{
"content_type": "image_asset_pointer",
"asset_pointer": "file-service://file-A1b2C3d4E5f6",
"size_bytes": 1417238,
"width": 1024,
"height": 1024,
"metadata": {
"dalle": {"gen_id": "aBcD3fGh1jKl"}
}
}
La parte utile è il segmento file-... dopo file-service://: corrisponde al nome del file nel pacchetto di esportazione. gen_id non è né un nome di file né una credenziale di download.
1. Estrai completamente il pacchetto di esportazione
Mantieni la struttura delle directory originale. Se apri solo conversations.json, perdi l'altra metà necessaria per l'abbinamento: i file delle immagini.
2. Trova il puntatore dell'immagine
Cerca "content_type": "image_asset_pointer" in conversations.json, trova la conversazione e l'immagine che ti interessano e copia l'asset_pointer completo.
3. Estrai l'ID del file
Rimuovi solo il prefisso interno iniziale:
file-service://file-A1b2C3d4E5f6
└─ file-A1b2C3d4E5f6
Non sostituire file-service:// con https:// per poi usare curl: non è un indirizzo pubblico.
4. Cerca nei file esportati
macOS o Linux:
find . -type f -iname '*file-A1b2C3d4E5f6*'
Se il pacchetto di esportazione ha rinominato i file o li ha messi in directory più profonde, cerca il segmento più distintivo dell'ID. Se hai size_bytes, width, height, usali per confrontare i file candidati.
5. Dopo la verifica, salva nel tuo spazio
Apri localmente il file candidato, verifica che sia proprio questa immagine, poi caricalo sul tuo S3, R2, CDN o storage dell'applicazione e annota questo indirizzo permanente.
Se le immagini sono molte, usa lo script seguente per elencare localmente tutti gli ID immagine nel pacchetto di esportazione, senza connettersi a 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)
Avere il puntatore significa solo che l'immagine è stata referenziata nella conversazione; il file potrebbe non essere presente nel pacchetto di esportazione. Se dopo l'estrazione completa non trovi ancora il file corrispondente, né file-service:// né gen_id possono ripristinare l'immagine originale.
Cosa fare se resta solo il gen_id
Nessuna interfaccia pubblica può convertire un gen_id in PNG, WebP o un nuovo link firmato. Se la conversazione originale, i link utilizzabili e i file del pacchetto di esportazione sono tutti spariti, non resta che rigenerare con il prompt originale e il contesto di allora.
Conserva gli ID non più validi solo come registro di troubleshooting. Per le immagini da conservare a lungo termine, annota questi elementi:
- Il prompt e i parametri di generazione;
- Quale servizio e quale modello sono stati usati;
- L'ID del task del fornitore, utile per troubleshooting e assistenza;
- Il percorso del file o l'indirizzo permanente nel tuo storage.
Costruire un flusso di download automatico con l'API
Per generare immagini in batch e conservarle, usa un'API che restituisca già i file delle immagini. Su HiAPI il flusso stabile è: invia, esegui il polling, scarica, verifica, trasferisci.
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"
}
}'
Dopo aver ottenuto il taskId, esegui il polling su GET /v1/tasks/{taskId}; in caso di successo leggi data.output[0].url e 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>"
Anche l'indirizzo restituito dall'API è temporaneo, ma la scadenza è scritta nel risultato della risposta (expireAt), quindi puoi gestirla per tempo. Scarica prima della scadenza, verifica di aver ottenuto un'immagine e non un errore HTML o JSON, poi carica il file sul tuo storage.
gpt-image-2/text-to-image costa $0.03 per immagine a 1K, $0.04 a 2K, $0.06 a 4K. Per i parametri e la prova online vedi la pagina del modello GPT Image 2; per il formato delle richieste vedi la documentazione sulla creazione dei task.
Un approccio allo storage che non teme la scadenza dei link
Per ogni task riuscito:
- Salva l'ID del task prima del polling, così quando il worker riprova non invia di nuovo né addebita due volte.
- Scarica il file finché l'indirizzo firmato è valido.
- Controlla codice di stato, content type e dimensione del file, e accettalo solo dopo aver confermato che è un'immagine.
- Caricalo usando un percorso file definito da te.
- Salva nel database il tuo indirizzo; conserva l'indirizzo temporaneo solo per troubleshooting a breve termine.
Domande frequenti
Come si scarica un'immagine da un link ChatGPT?
Finché il link è apribile, aprilo completo (con i parametri di firma), scarica il file dell'immagine e salvalo sul tuo storage. Considera temporanei tutti i link apribili solo nel browser in cui hai effettuato l'accesso.
Esiste un'interfaccia ufficiale per scaricare tramite gen_id?
No. ChatGPT non espone alcuna interfaccia pubblica che «passando un gen_id restituisca l'immagine»; questo identificatore ha significato solo nella conversazione originale.
Perché un link immagine ChatGPT restituisce 422?
Di solito perché al link firmato mancano i parametri necessari. Se hai copiato solo il percorso, o lo strumento usato ha eliminato la parte dopo il ?, il link non è più valido.
Perché lo stesso link in seguito restituisce 404?
I link firmati e il file stesso sono temporanei. Dopo la scadenza è normale che restituisca ResourceNotFound; neanche gen_id può prolungarne la validità.
Come si trovano le immagini file-service:// nel pacchetto di esportazione?
Copia l'ID del file dopo file-service://, cerca nel pacchetto di esportazione completamente estratto i nomi di file che contengono questo ID, poi verifica con dimensione del file, larghezza e altezza.
Come si ottiene un indirizzo permanente per un'immagine?
Finché il file sorgente è scaricabile, caricalo sul tuo storage e salva il tuo indirizzo. La permanenza dipende dal tuo storage, non dai link di download temporanei del fornitore.
Articoli correlati
Vedi tutti gli articoli →-
Guida all'uso
Guida introduttiva a seedream-5.0-pro/image-to-image: capacità, prezzi e punti chiave di integrazione
Limiti di capacità, modalità di fatturazione e pratiche di integrazione ingegneristica del modello di editing immagini di ByteDance
-
Guida all'uso
Guida pratica al text-to-image con seedream-5.0-pro: limiti di capacità, integrazione API e controllo dei costi
Prospettiva operativa per sviluppatori: dai punti chiave sui parametri alla stima di costo di $0,05 per immagine
-
Guida all'uso
Guida introduttiva a Hailuo 2.3 Fast image-to-video: limiti delle capacità, prezzi e pratiche di integrazione
Selezione e integrazione del modello MiniMax image-to-video per sviluppatori