GPT Image 2 / 2.5 API — Generierung und Bildbearbeitung
Verwenden Sie Generierungen für Text-zu-Bild und Multipart-Edits für Referenzbilder mit GPT Image 2, Sunburst und Flare. Enthält Einzelbild-, Mehrbild-, Python- und asynchrone Beispiele.
GPT Image 2 / 2.5: Generierung und Bildbearbeitung
Wählen Sie den Endpunkt, bevor Sie die Anfrage schreiben: Text-zu-Bild verwendet /images/generations; Bild-zu-Bild verwendet /images/edits mit hochgeladenen Bilddateien. Die Erwähnung von „Referenzbild 1“ in einem Prompt hängt kein Bild an.
Modelle und Endpunkte
| Modell-ID | Text-zu-Bild | Bild-zu-Bild |
|---|---|---|
gpt-image-2 |
/images/generations |
/images/edits + Bilddateien |
gpt-image-2.5-sunburst |
/images/generations |
/images/edits + Bilddateien |
gpt-image-2.5-flare |
/images/generations |
/images/edits + Bilddateien |
Dies sind unterschiedliche Modell-IDs. Ändern Sie model beim Modellwechsel explizit; GPT Image 2.5 ist kein Alias von GPT Image 2. Aktuelle Verfügbarkeit und Kontopreise prüfen Sie im Marktplatz.
| Operation | Methode und Endpunkt | Anfrageformat |
|---|---|---|
| Text-zu-Bild | POST https://apimaster.ai/v1/images/generations |
JSON |
| Bild-zu-Bild / Bearbeitung | POST https://apimaster.ai/v1/images/edits |
multipart/form-data mit tatsächlichen Bilddateien |
| Asynchrone Bildbearbeitung | POST https://apimaster.ai/v1/images/edits/async |
Gleiche Multipart-Dateien wie bei Edits; liefert eine Task-ID zurück |
| Asynchrones Text-zu-Bild | POST https://apimaster.ai/v1/images/generations/async |
JSON; liefert eine Task-ID zurück |
| Task abfragen | GET https://apimaster.ai/v1/tasks/{task_id}?model=MODEL_ID |
Bearer-Authentifizierung |
Für eine Task-Antwort aus der Bildbearbeitung verwenden Sie /images/edits/async. Laden Sie dieselben Dateien und Felder hoch wie bei synchronen Edits und fragen Sie anschließend /tasks/{task_id} ab. Verlagern Sie eine Bearbeitungsanfrage nicht auf generations/async. Diese Task-Endpunkte nutzen denselben bestehenden asynchronen Vertrag: Ein asynchroner Upstream kann seine Task umgehend zurückliefern, während ein synchroner Upstream die Bearbeitung abschließen kann, bevor das Gateway eine Task-ID zurückgibt. Sie sind kein Versprechen sofortiger Hintergrundausführung. Verwenden Sie Chat Completions nicht für diese Modelle.
Authentifizierung und Timeouts
API-Schlüssel erstellen und senden Sie Authorization: Bearer YOUR_API_KEY. JSON-Generierungsanfragen verwenden Content-Type: application/json. Bei Datei-Uploads überlassen Sie es cURL oder Ihrer HTTP-Bibliothek, die Multipart-Boundary zu generieren; setzen Sie den Content-Type-Header nicht manuell.
Planen Sie mindestens 180 Sekunden für einfache Anfragen, 300 Sekunden für höhere Auflösung und 600 Sekunden für anspruchsvolle Edits oder hohe Qualität ein. Ein Client-Timeout beweist nicht, dass die Upstream-Anfrage gestoppt wurde. Vermeiden Sie unmittelbare doppelte Übermittlungen.
Text-zu-Bild: JSON-Generierung
curl --fail-with-body --max-time 300 "https://apimaster.ai/v1/images/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A watercolor orange cat sitting on a windowsill at sunset",
"n": 1,
"size": "1024x1024"
}'
Ersetzen Sie für Sunburst oder Flare die Modell-ID durch gpt-image-2.5-sunburst oder gpt-image-2.5-flare. Fügen Sie diesem Beispiel keine Referenzbilder hinzu; verwenden Sie die Bearbeitungsbeispiele unten.
Bild-zu-Bild: eine Referenz hochladen
curl --fail-with-body --max-time 600 "https://apimaster.ai/v1/images/edits" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=gpt-image-2.5-flare" \
-F "prompt=Change only the background to pale mint green. Preserve the subject, lettering and layout of the reference image." \
-F "n=1" \
-F "size=1024x1024" \
-F "image=@reference.png;type=image/png"
Ersetzen Sie reference.png durch ein vorhandenes lokales Bild. Das @ weist cURL an, Dateibytes hochzuladen; image=reference.png sendet nur eine Dateinamen-Zeichenkette. Dieses Endpunktmuster gilt auch für gpt-image-2 und gpt-image-2.5-sunburst.
Bild-zu-Bild: mehrere Referenzen hochladen
curl --fail-with-body --max-time 600 "https://apimaster.ai/v1/images/edits" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=gpt-image-2.5-flare" \
-F "prompt=Create one comic page. Reference 1 defines character A, reference 2 defines character B, and reference 3 defines the setting. Preserve each character's appearance." \
-F "n=1" \
-F "image[]=@character-a.png;type=image/png" \
-F "image[]=@character-b.png;type=image/png" \
-F "image[]=@setting.png;type=image/png"
Wiederholen Sie dasselbe Feld image[] für jede Datei, in der vom Prompt beschriebenen Reihenfolge. n ist die Anzahl der Ausgabebilder, nicht die Anzahl der Referenzen. Referenzlimits hängen vom ausgewählten Modell und der verfügbaren Route ab; nehmen Sie nicht ein universelles Limit von 16 Bildern an. Beginnen Sie mit einer Referenz und n=1 und fügen Sie dann bei Bedarf weitere Eingaben hinzu.
Bearbeitungsbeispiel in Python
Installieren Sie requests. Dieses Beispiel lädt eine echte Datei hoch und verarbeitet sowohl URL- als auch Base64-Bildantworten.
import base64
import os
from pathlib import Path
import requests
api = "https://apimaster.ai/v1"
headers = {"Authorization": "Bearer " + os.environ["APIMASTER_API_KEY"]}
with open("reference.png", "rb") as image:
response = requests.post(
f"{api}/images/edits",
headers=headers,
data={
"model": "gpt-image-2.5-flare",
"prompt": "Change only the background to pale mint green. Preserve the subject and lettering.",
"n": 1,
"size": "1024x1024",
},
files={"image": ("reference.png", image, "image/png")},
timeout=(20, 600),
)
response.raise_for_status()
item = response.json()["data"][0]
if item.get("b64_json"):
Path("result.png").write_bytes(base64.b64decode(item["b64_json"]))
elif item.get("url"):
print(item["url"])
else:
raise RuntimeError("No image returned: " + str(response.json()))
Übergeben Sie bei mehreren Dateien eine Liste wiederholter ("image[]", (filename, file_object, mime_type))-Einträge an files. Halten Sie jede Datei geöffnet, bis die Anfrage abgeschlossen ist.
Asynchrone Bildbearbeitung
Verwenden Sie diesen Endpunkt mit GPT Image 2, Sunburst oder Flare, wenn Ihre Anwendung Task-IDs verarbeitet. Datei-Upload-Regeln, Referenzreihenfolge, Fähigkeitsgrenzen und Authentifizierung sind dieselben wie bei synchronen Edits.
curl --fail-with-body --max-time 600 "https://apimaster.ai/v1/images/edits/async" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=gpt-image-2.5-flare" \
-F "prompt=Combine the three reference images into one poster, preserving their subjects and order." \
-F "n=1" \
-F "image[]=@character-a.png;type=image/png" \
-F "image[]=@character-b.png;type=image/png" \
-F "image[]=@setting.png;type=image/png"
Die Übermittlung gibt data[0].task_id zurück. Fragen Sie mit derselben Modell-ID ab:
curl --fail-with-body "https://apimaster.ai/v1/tasks/TASK_ID?model=gpt-image-2.5-flare" \
-H "Authorization: Bearer YOUR_API_KEY"
Ein abgeschlossener getrackter Task hat diese Form; jedes generierte Bild ist enthalten:
{
"data": {
"status": "succeeded",
"result": {
"images": [{"url": "https://your-image-host.example/result.png"}]
}
}
}
Der Task gehört zum Konto, das ihn übermittelt hat. Fragen Sie ihn mit einem gültigen API-Schlüssel für dieses Konto ab. Eine fehlgeschlagene Übermittlung gibt einen Fehler statt eines brauchbaren Tasks zurück; sobald eine Task-ID zurückgegeben wurde, fragen Sie diesen Task weiter ab, statt die Bearbeitung erneut zu übermitteln. Siehe die Tabelle zu den Polling-Statuswerten unten.
Vorhandene URL- oder Base64-Integrationen
Wenn Ihre Eingabe eine URL ist, laden Sie das Bild in Ihrer Anwendung herunter und laden Sie dessen Bytes zu /images/edits hoch. Wenn es eine Base64-Data-URI ist, dekodieren Sie die Nutzdaten in eine Datei oder einen Byte-Puffer und laden Sie diese hoch. Übermitteln Sie die URL oder den Base64-Text nicht so, als wäre es ein Datei-Upload.
Einige GPT Image 2-Routen unterstützen die Erweiterung image_urls auf generations. Das ist kein portabler Vertrag für die Bildbearbeitung und darf nicht als funktionierend mit GPT Image 2.5 angenommen werden. Neue Integrationen sollten die Multipart-Edits-Beispiele oben verwenden. Eine JSON-Anfrage, die image_urls, image oder images enthält, ist nicht gleichbedeutend mit dem Hochladen von Dateien zu Edits.
Parameter und Fähigkeitsgrenzen
| Feld | Verwendung |
|---|---|
model |
Erforderlich; verwenden Sie eine exakte Modell-ID aus der Tabelle oben |
prompt |
Erforderlich; beschreiben Sie das Ergebnis und die Referenzreihenfolge |
image / image[] |
Tatsächlich hochgeladene Dateien für Edits; verwenden Sie PNG oder JPEG für die Basisbeispiele |
n |
Anzahl der Ausgabebilder; beginnen Sie mit 1; das Maximum hängt von der Route ab |
size |
Optional; 1024x1024 ist das Basisbeispiel; andere Pixelabmessungen oder Seitenverhältnisse hängen von der Route ab |
resolution |
Optionale routenspezifische Erweiterung wie 1k, 2k, 4k; nicht jedes Modell/jede Route unterstützt jede Stufe |
quality |
Optional; akzeptierte Werte und Kosten hängen von der Route ab |
background, output_format, output_compression |
Optional; Transparenz und Ausgabekodierung erfordern Routenunterstützung |
mask |
Nur GPT Image 2, wenn eine verfügbare Edits-Route hochgeladene Masken unterstützt; wird vom aktuellen GPT Image 2.5-Multipart-Handler nicht unterstützt |
Bei GPT Image 2 muss die Maskenunterstützung separat von der gewöhnlichen Referenzbearbeitung geprüft werden. Eine kompatible PNG-Maske muss den Eingabeabmessungen entsprechen und einen Alphakanal enthalten. Der aktuelle GPT Image 2.5-Multipart-Endpunkt weist hochgeladene Maskendateien zurück; fügen Sie den Sunburst- oder Flare-Beispielen oben keine Maske hinzu. Nehmen Sie nicht an, dass ein JSON-Workaround mit mask_url unterstützt wird, ohne die gewählte Route zu prüfen.
Senden Sie nur die optionalen Felder, die Sie benötigen. Sie können die infrage kommenden Routen und den Preis ändern; das ausdrückliche Setzen eines Standardwerts ist nicht immer gleichbedeutend mit dem Weglassen. Keine feste Tabelle mit Pixelgrößen oder Liste erweiterter Parameter gilt einheitlich für alle drei Modell-IDs. Tatsächliche Preise und unterstützte Fähigkeiten richten sich nach dem Marktplatz und der Anfrageantwort.
Synchrone Antworten
Eine erfolgreiche Generierung oder Bearbeitung liefert Bildeinträge in data zurück:
{
"created": 1789890000,
"data": [{"url": "https://your-image-host.example/result.png"}]
}
Je nach Route und Ausgabeformat kann ein Eintrag stattdessen b64_json enthalten. Dekodieren Sie es zu Bildbytes. Laden Sie temporäre Ergebnis-URLs umgehend herunter. Eine HTTP-200-Antwort oder eine Bildanzahl allein beweist nicht, dass Referenzdetails erhalten geblieben sind; prüfen Sie das Ergebnis gegen die Eingabe.
Asynchrone Tasks: Übermittlung und Polling
Übermitteln Sie für Text-zu-Bild JSON ohne Referenzbilder an generations/async. Verwenden Sie für Bildbearbeitung das Multipart-edits/async-Beispiel oben. Beide verwenden denselben Task-Abfrage-Endpunkt:
curl --fail-with-body --max-time 600 "https://apimaster.ai/v1/images/generations/async" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-image-2","prompt":"A watercolor cat on the moon","n":1}'
{
"code": 200,
"data": [{"status": "submitted", "task_id": "task_EXAMPLE"}]
}
Der Envelope der Übermittlungsantwort meldet normalerweise submitted; ein Upstream meldet möglicherweise bereits einen Abschlusszustand. Die erste Abfrage kann bereits abgeschlossen sein. Eine Task-ID garantiert keine sofortige Antwort: Ist der ausgewählte Upstream synchron, wartet die Plattform, bis die Generierung abgeschlossen ist, bevor sie den Task zurückgibt. Setzen Sie ein ausreichendes Übermittlungs-Timeout.
Fragen Sie mit derselben Modell-ID ab, die für die Übermittlung verwendet wurde:
curl --fail-with-body "https://apimaster.ai/v1/tasks/TASK_ID?model=gpt-image-2" \
-H "Authorization: Bearer YOUR_API_KEY"
| Task-Status | Aktion |
|---|---|
pending, submitted, processing, in_progress |
Warten; nach 3–5 Sekunden erneut abfragen |
succeeded, success, completed |
Lesen Sie jeden Eintrag in data.result.images; getrackte Tasks verwenden url als Zeichenkette, während ältere Upstream-Antworten ein URL-Array verwenden können |
failed, error, cancelled |
Beenden Sie das Polling und prüfen Sie den Fehler |
Verwenden Sie eine endliche Gesamtfrist für das Polling, etwa 10 Minuten. Läuft diese ab, bewahren Sie die Task-ID für spätere Prüfungen auf, statt automatisch einen weiteren kostenpflichtigen Task zu erstellen. Task-Abfrageantworten und synchrone Bildantworten haben unterschiedliche Strukturen.
Fehlerbehebung bei Referenzbildern
- Stellen Sie sicher, dass der tatsächliche Anfragepfad
/v1/images/editsoder/v1/images/edits/asyncist, nichtgenerationsodergenerations/async. - Stellen Sie sicher, dass die Multipart-Anfrage unter
imageoder wiederholtenimage[]Dateibytes enthält, mit einer generierten Boundary. Prompt-Text, Dateinamen und Referenzanzahlen ersetzen keine Dateien. - Prüfen Sie die exakte Modell-ID. Eine GPT Image 2-Erweiterung wird von Sunburst oder Flare nicht automatisch unterstützt.
- Wenn Task-/Protokolldetails keine Vorschau zeigen, schließen Sie nicht daraus, dass kein Bild gesendet wurde: Protokolle können Base64-Daten und hochgeladene Dateiinhalte auslassen. Umgekehrt belegt eine protokollierte Referenzanzahl nicht, dass ein Upstream die Bilder verwendet hat.
- Testen Sie mit einer einfachen Referenz, die markante Beschriftung oder Formen enthält, und fordern Sie eine Hintergrundänderung an, ohne diese Details zu beschreiben. Vergleichen Sie die Ausgabe visuell.
- Bewahren Sie für den Support die Anfrage-ID (
X-Oneapi-Request-Id), die Task-ID falls vorhanden, Modell, Endpunkt, Zeitstempel, bereinigte Anfragefelder und Referenzbilder auf. Teilen Sie niemals Ihren API-Schlüssel.
Bei einer 400-Antwort prüfen Sie die Endpunkt- und Parameterkompatibilität; 401 zeigt einen Authentifizierungsfehler an; 429 zeigt ein Raten-/Kontingentlimit an. Bei Timeouts oder Upstream-Fehlern bewahren Sie die Anfrage-/Task-ID auf und prüfen den vorhandenen Task oder Nutzungsdatensatz, bevor Sie erneut übermitteln.
