GPT Image 2 API mit Python: ein vollständiges Beispiel
Ein vollständiges GPT Image 2 API-Beispiel in Python: Anfrage senden, Aufgabe abfragen, Bilder speichern, mit Referenzen bearbeiten und Fehler sicher behandeln.
Als Markdown lesenUm die GPT Image 2 API mit Python zu nutzen, sendest du deine Anfrage per POST mit der Bibliothek requests an https://api.seedrouter.ai/v1/images/generations, behältst die zurückgegebene Aufgaben-id, fragst /v1/tasks/{id} ab, bis die Aufgabe completed ist, und lädst die aufgeführten Bild-URLs herunter. Das Skript unten erledigt alle vier Schritte in etwa 40 Zeilen und speichert die Bilder auf der Festplatte.
Es läuft unverändert, sobald SEEDROUTER_API_KEY gesetzt ist. Falls du noch keinen Key hast, hol dir zuerst einen.
Wie sieht ein vollständiges GPT Image 2 Skript aus?
import os
import time
import requests
API = "https://api.seedrouter.ai/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"}
def submit(body):
response = requests.post(f"{API}/images/generations", headers=HEADERS, json=body, timeout=60)
if response.status_code >= 400:
error = response.json()["error"]
raise RuntimeError(f"{response.status_code} {error['code']}: {error['message']}")
return response.json()["id"]
def wait(task_id, limit_seconds=600):
deadline = time.monotonic() + limit_seconds
while time.monotonic() < deadline:
task = requests.get(f"{API}/tasks/{task_id}", headers=HEADERS, timeout=30).json()
if task["status"] == "completed":
return [image["url"] for image in task["output"]["data"]]
if task["status"] == "failed":
raise RuntimeError(f"{task['error']['code']}: {task['error']['message']}")
time.sleep(3)
raise TimeoutError(f"Still running. Resume polling task {task_id}.")
def download(urls, prefix):
paths = []
for index, url in enumerate(urls):
path = f"{prefix}-{index}.png"
with open(path, "wb") as file:
file.write(requests.get(url, timeout=60).content)
paths.append(path)
return paths
task_id = submit({
"model": "gpt-image-2",
"prompt": "A matte ceramic vase on a sunlit table, soft shadows",
"size": "1024x1024",
"quality": "low",
"n": 2,
})
print("task", task_id)
print(download(wait(task_id), "vase"))Starte es mit python example.py. Es gibt zuerst die Aufgaben-ID aus, dann die Pfade zweier PNG-Dateien, vase-0.png und vase-1.png.
Was macht jede Funktion?
submit sendet die Anfrage und gibt die Aufgaben-ID zurück. Eine Fehlerantwort enthält immer ein error-Objekt mit numerischem code und message, sodass dir die Exception sagt, was zu korrigieren ist. Ein 400 mit Code 20001 und der Meldung „Check the size parameter against the API documentation.“ bedeutet zum Beispiel, dass die Größe gegen eine der Regeln im Parameter-Leitfaden verstoßen hat.
wait fragt alle drei Sekunden ab, bis die Aufgabe fertig ist. Eine Frist auf deiner Seite stoppt die Schleife, nicht die Aufgabe: Das Rendering läuft weiter, und du kannst dieselbe ID später erneut abfragen. Eine Aufgabe, die mit failed endet, löst eine Exception mit ihrem Fehlercode aus und wird nicht berechnet.
download holt jede URL, die die Aufgabe zurückgegeben hat, und schreibt sie auf die Festplatte. Ergebnis-URLs dienen der Übergabe, nicht der dauerhaften Speicherung. Speichere also, was du behalten willst. Das Beispiel nutzt requests sowohl für Downloads als auch für API-Aufrufe; bleib durchgehend bei einem HTTP-Client, statt das urllib der Standardbibliothek beizumischen.
Wie änderst du die Bildeinstellungen?
Alles steht im Request-Body. Die Felder, die die meisten zuerst ändern:
| Feld | Beispiel | Wirkung |
|---|---|---|
size | "1536x1024" | Ausgabemaße; auto überlässt die Wahl dem Modell |
quality | "medium" | low, medium, high oder auto |
n | 4 | Anzahl der Bilder, 1 bis 10 |
output_format | "jpeg" | png oder jpeg |
background | "transparent" | Erfordert png |
Wenn du output_format änderst, passe die Endung .png in download entsprechend an. Die vollständige Liste der Felder und Grenzen steht in der GPT Image 2 API-Referenz.
Wie bearbeitest du ein Bild mit Python?
Übergib Referenzbilder als URLs im selben Aufruf. Es gibt keinen eigenen Bearbeitungs-Endpunkt; das Hinzufügen von images macht die Anfrage zu einer Bearbeitung, und eine mask beschränkt die Änderung auf einen Bereich:
task_id = submit({
"model": "gpt-image-2",
"prompt": "Make the vase deep blue. Keep the table and the light unchanged.",
"images": [{"image_url": "https://example.com/vase.png"}],
})Die URLs müssen öffentliche HTTPS-Links zu PNG-, JPEG- oder WebP-Dateien sein. Du kannst bis zu 16 senden. Lokale Dateien und Base64-Strings werden abgelehnt. Lade das Bild also zuerst in deinen eigenen Speicher hoch und übergib seine URL.
Was sollte das Skript tun, wenn beim Senden ein Timeout auftritt?
Sende nicht sofort erneut. Ein Timeout beim POST beweist nicht, dass die Anfrage abgelehnt wurde; die Aufgabe läuft womöglich schon und wird berechnet. Prüfe deine letzten Aufgaben oder wiederhole die Anfrage erst, nachdem du sichergestellt hast, dass keine Aufgabe erstellt wurde. Der Aufgaben-Leitfaden erklärt, wie du die beiden Fälle unterscheidest.
Beim Abfragen ist es anders: Ein Timeout während der Abfrage ist harmlos. Ruf wait einfach erneut mit derselben ID auf.
Häufig gestellte Fragen
Kann ich stattdessen das OpenAI Python SDK verwenden?
Nicht direkt. Diese API liefert Ergebnisse asynchron über eine Aufgaben-ID, während der Bildaufruf des SDK das fertige Bild in der Antwort erwartet. Ein paar Zeilen requests wie oben decken den gesamten Ablauf ab.
Wie führe ich mehrere Prompts aus?
Sende jeden Prompt, speichere alle Aufgaben-IDs und frage sie dann ab. Der Batch-Leitfaden zeigt eine Version, die Neustarts übersteht, ohne doppelt zu bezahlen.
Braucht gpt-image-2-official anderen Code?
Nein. Ändere den model-String und sonst nichts. Die beiden IDs akzeptieren dieselben Felder und geben dieselbe Aufgabenantwort zurück; nur die Abrechnung unterscheidet sich.
Die Aufgaben-ID behalten, der Rest ist Handwerk
Senden, die ID speichern, mit einer Frist abfragen und herunterladen, was zurückkommt. Dieses Muster ist die ganze Integration. Probiere einen Prompt ohne Code im GPT Image 2 Playground aus, bevor du ihn skriptest.



