GPT-6 Astra is now live on CometAPI →
technology/CometAPI Research

So automatisieren Sie die Bildgenerierung in großem Maßstab

Erstellen Sie einen produktionsreifen Batch-Workflow zur Bildgenerierung mit einem einzigen CometAPI-Schlüssel, inklusive Warteschlangenverwaltung, Modellrouting, Parallelitätslimits, Wiederholversuchen und Speicherung.

CometAPI
Bobby SpencerForschungsteam für KI-Modelle und API
Aktualisiert Sep 6, 2026 10 Min. Lesezeit
So automatisieren Sie die Bildgenerierung in großem Maßstab
Dieses Muster verwenden

Den ersten API-Aufruf ausführen.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

print(response.choices[0].message.content)

Der einfachste Weg, die Bildgenerierung in großem Maßstab zu automatisieren, ohne mehrere verschiedene APIs zu verwalten, besteht darin, den Workflow vom Modellanbieter zu trennen. Legen Sie jede Bildanfrage in eine einzige Warteschlange, leiten Sie jeden Job an eine aktuelle Modell-ID weiter und senden Sie kompatible Anfragen über einen CometAPI-Schlüssel und die OpenAI-kompatible Basis-URL https://api.cometapi.com/v1.

Dieses Tutorial baut diese Pipeline in Python. Es nimmt Produkt-, Anzeigen- und Content-Jobs aus einer JSON-Lines-Warteschlange entgegen, wählt ein Modell aus, begrenzt die Parallelität, wiederholt vorübergehend fehlgeschlagene Versuche, speichert Ergebnisse entweder als URL oder Base64 und protokolliert pro Job die Nutzung sowie die geschätzten Kosten. Das Beispiel hält diese produktionsrelevanten Essentials in einem kompakten Block zusammen, damit Sie den Workflow testen können, ohne den Artikel in eine reine Codereferenz zu verwandeln.

Wie eine einheitliche Image-API die Batch-Generierung vereinfacht

Am Ende sieht der Workflow so aus:

jobs.jsonl → bounded worker pool → CometAPI /v1/images/generations → object storage → manifest.jsonl

Die Warteschlange und die Speicherschicht verbleiben bei Ihnen. Beim Wechseln der Bildmodelle ändert sich der Wert von model, nicht das Authentifizierungssystem oder die Hauptanfragestrecke. Das ist der praktische Vorteil einer einheitlichen Image-API: Die Modellauswahl wird zu einer Routing-Entscheidung innerhalb einer Pipeline statt zu einer separaten Provider-Integration.

Was brauchen Sie, um die Bildgenerierung zu automatisieren?

Sie benötigen Python 3.10 oder neuer, das Paket requests, einen CometAPI-Schlüssel, einen beschreibbaren Ausgabespeicherort und mindestens eine aktuelle Bildmodell-ID.

Installieren Sie die einzige Abhängigkeit:

pip install requests

Setzen Sie Ihren Schlüssel auf dem Server, niemals im Browser-Code oder in einem Repository:

export COMETAPI_KEY="your-key"

Die Basis-URL ist https://api.cometapi.com/v1, und kompatible Text-zu-Bild-Jobs verwenden POST /images/generations. Prüfen Sie vor einer Bereitstellung jedes Modell im Live-Modellkatalog; der Katalog liefert die aktuelle ID, den unterstützten Endpunkt, Funktions- und Preismetadata, ohne dass ein Authorization-Header erforderlich ist.

Stand: 20. August 2026, listete der Live-Katalog diese zwei nützlichen Routen:

WorkloadModel IDWarum es passt
Produktbilder mit kontrollierbaren Ausgabe-Settingsgpt-image-2Gibt Nutzungsdaten und Base64-Bildinhalt über die dokumentierte OpenAI-kompatible Route zurück
Hochvolumige Anzeigen- und Content-Konzeptedoubao-seedream-4-5-251128Verwendet dieselbe Generierungsroute und ist mit Preis pro Anfrage gelistet

Die Tabelle ist ein Ausgangspunkt, nicht die Aussage, dass die Modelle identische Fähigkeiten besitzen. Größe, Qualität, Format, Referenzbild-Unterstützung und das Antwortverhalten bleiben modellspezifisch. Prüfen Sie den Modelleintag und die verlinkte Dokumentation, bevor Sie optionale Parameter übergeben.

Wie Sie einen Batch-Workflow für Bildgenerierung in Python aufbauen

1. Geben Sie jedem Job eine dauerhafte ID

Verwenden Sie ein JSON-Objekt pro Zeile, damit eine Warteschlange, ein Datenbankexport oder ein Tabellenjob denselben Worker speisen kann:

{"id":"sku-1001","kind":"product","prompt":"Studio product photo of a ceramic coffee dripper on a warm neutral background"}
{"id":"campaign-204","kind":"ad","prompt":"Editorial summer travel image, vivid natural light, wide composition, no text"}
{"id":"blog-088","kind":"content","prompt":"Minimal illustration of a developer automating a creative workflow, no text"}

Die ID wird zum Ausgabedateinamen und zum Manifest-Schlüssel. In der Produktion nutzen Sie sie als Idempotency-Key und überspringen IDs, die bereits als erfolgreich markiert sind, bevor Sie eine Warteschlange erneut verarbeiten.

2. Routen Sie nach Jobtyp und validieren Sie anschließend gegen den Live-Katalog

Das Beispiel ordnet Produktarbeit gpt-image-2 zu und Anzeigen- oder Content-Arbeit doubao-seedream-4-5-251128 zu. Ein Job kann diese Auswahl mit seinem eigenen Feld model überschreiben. Beim Start lädt der Worker den öffentlichen Katalog herunter und verwirft eine ID, die nicht mehr gelistet ist.

Das ist sicherer, als einen anbieter­spezifischen SDK überall in der Anwendung hart zu kodieren. Sie können eine Route in einer Zuordnung ändern, nachdem Sie Qualität, Latenz und Preis für Ihre eigenen Prompts bewertet haben.

3. Begrenzen Sie die Parallelität statt den gesamten Batch zu starten

Der Worker beginnt mit vier gleichzeitigen Anfragen. Diese Zahl ist eine konservative Anwendungseinstellung, kein universelles Servicelimit. Messen Sie Latenz und 429-Antworten für Ihr Konto und erhöhen oder verringern Sie MAX_WORKERS gezielt.

Nur 408, 429 und 5xx-Antworten werden mit exponentiellem Backoff und Jitter wiederholt. Authentifizierungsfehler, ungültige Modell-IDs und nicht unterstützte Parameter schlagen sofort fehl, da das Wiederholen derselben fehlerhaften Anfrage nur Verzögerungen hinzufügt.

4. Normalisieren Sie das Ergebnis vor der Speicherung

Bildmodelle liefern nicht immer dasselbe Containerformat. Die dokumentierte GPT Image-Antwort enthält data[0].b64_json; andere kompatible Modelle liefern möglicherweise data[0].url. Der Worker unterstützt beides, schreibt das Bild zunächst in eine temporäre Datei und benennt sie erst um, nachdem der Download oder das Decodieren erfolgreich war.

Ersetzen Sie in der Produktion das lokale Verzeichnis output/ durch S3, R2, GCS oder einen anderen Objektspeicher. Behandeln Sie eine providergehostete URL nicht als dauerhafte Speicherung, sofern deren Aufbewahrungsrichtlinie dies nicht ausdrücklich zusichert.

5. Protokollieren Sie Nutzung, Versuche und geschätzte Kosten

Jedes Ergebnis wird zu einer kompakten Manifestzeile mit Job-ID, Modell, gespeichertem Pfad, Status und geschätzten Kosten in USD, sofern der Live-Katalog genügend Preisdaten liefert. Fehlgeschlagene Jobs behalten den Fehler statt aus dem Batch zu verschwinden.

Vollständiges Python-Skript für Batch-Bildgenerierung

Speichern Sie Folgendes als batch_image_pipeline.py, legen Sie die Warteschlange daneben als jobs.jsonl ab und führen Sie python3 batch_image_pipeline.py aus.

import base64, json, os, random, time
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
import requests

BASE_URL = "https://api.cometapi.com/v1"
KEY = os.environ["COMETAPI_KEY"]
WORKERS = int(os.getenv("MAX_WORKERS", "4"))
OUT = Path("output")
ROUTES = {
    "product": "gpt-image-2",
    "ad": "doubao-seedream-4-5-251128",
    "content": "doubao-seedream-4-5-251128",
}

catalog = requests.get("https://api.cometapi.com/api/models", timeout=30)
catalog.raise_for_status()
CATALOG = {model["id"]: model for model in catalog.json()["data"]}

def generate(job):
    model = job.get("model", ROUTES[job["kind"]])
    if model not in CATALOG:
        raise ValueError(f"Unknown model: {model}")
    payload = {"model": model, "prompt": job["prompt"], "n": 1}
    if model == "gpt-image-2":
        payload.update(quality="low", size="1024x1024", output_format="jpeg")

    for attempt in range(4):
        response = requests.post(
            f"{BASE_URL}/images/generations",
            headers={"Authorization": f"Bearer {KEY}"},
            json=payload,
            timeout=180,
        )
        if response.status_code not in {408, 429} and response.status_code < 500:
            break
        time.sleep(2**attempt + random.random())
    response.raise_for_status()
    body = response.json()
    item = body["data"][0]

    if item.get("b64_json"):
        data = base64.b64decode(item["b64_json"])
        extension = body.get("output_format", "png")
    else:
        download = requests.get(item["url"], timeout=120)
        download.raise_for_status()
        data = download.content
        extension = {"image/png": "png", "image/webp": "webp"}.get(
            download.headers.get("content-type"), "jpg"
        )
    path = OUT / f"{job['id']}.{extension}"
    path.write_bytes(data)

    price, usage = CATALOG[model].get("pricing") or {}, body.get("usage", {})
    cost = price.get("per_request")
    if cost is None and price.get("input") is not None:
        cost = (usage.get("input_tokens", 0) * price["input"] +
                usage.get("output_tokens", 0) * price["output"]) / 1_000_000
    return {"id": job["id"], "model": model, "path": str(path),
            "estimated_usd": cost * price.get("ratio", 1) if cost is not None else None}

def safe_generate(job):
    try:
        return {"status": "success", **generate(job)}
    except Exception as error:
        return {"id": job["id"], "status": "failed", "error": str(error)}

OUT.mkdir(exist_ok=True)
jobs = [json.loads(line) for line in Path("jobs.jsonl").read_text().splitlines() if line]
with ThreadPoolExecutor(max_workers=WORKERS) as pool:
    results = list(pool.map(safe_generate, jobs))
with (OUT / "manifest.jsonl").open("w") as manifest:
    manifest.writelines(json.dumps(result) + "\n" for result in results)

Das Skript verwendet zur Laufzeit den aktuellen Katalog, während die zwei Fallback-Zuordnungen Beispiele sind, die am 20. August 2026 verifiziert wurden. Prüfen Sie sie erneut, bevor Sie den Code an einem anderen Datum veröffentlichen oder bereitstellen.

Wie Sie den Batch-Workflow zur Bildgenerierung testen

Beginnen Sie mit einem Job und einem Worker:

MAX_WORKERS=1 python3 batch_image_pipeline.py

Eine erfolgreiche GPT Image-Antwort hat diese Struktur:

{
  "created": 1776841943,
  "output_format": "jpeg",
  "quality": "low",
  "size": "1024x1024",
  "usage": {
    "input_tokens": 16,
    "output_tokens": 208,
    "total_tokens": 224
  },
  "data": [{"b64_json": "<base64-image-data>"}]
}

Der Worker decodiert das Bild, schreibt output/<job-id>.jpeg und fügt output/manifest.jsonl eine Erfolgszeile hinzu. Gibt ein Modell stattdessen eine URL zurück, lädt der Worker sie herunter und speichert den lokalen Pfad im gleichen Manifestformat.

Der Code wurde lokal auf Syntax geprüft. Für einen Live-Generierungsaufruf ist weiterhin Ihr CometAPI-Schlüssel erforderlich. Führen Sie daher den Smoke-Test mit einem Job aus, bevor Sie die Parallelität erhöhen.

Wie viel kostet die Batch-Bildgenerierung?

Preise müssen mit Zeitstempel versehen sein, da sich Modelltarife ändern. Stand: 20. August 2026, lieferte der Live-CometAPI-Modellkatalog die folgenden Basispreisfelder und ein Abrechnungsverhältnis von 0.8:

  • gpt-image-2: 5 $ pro 1 Mio. Input-Tokens und 30 $ pro 1 Mio. Output-Tokens; mit dem gelisteten Verhältnis ergeben sich effektive Sätze von 4 $ bzw. 24 $ pro 1 Mio. Tokens.
  • doubao-seedream-4-5-251128: 0,04 $ pro Anfrage; mit dem gelisteten Verhältnis ergeben sich 0,032 $ pro Anfrage.

Der CometAPI-Preisleitfaden erläutert die tokenbasierte Abrechnung für Modelle mit offizieller Preisstellung und die aufrufbasierte Abrechnung für Modelle mit Preis pro Anfrage. Das Skript liest den Katalog zur Laufzeit und verwendet dieselbe Regel:

token cost = ratio × (input tokens × input rate + output tokens × output rate) / 1,000,000

request cost = ratio × per-request price

Beispielsweise meldet die oben dokumentierte GPT Image-Antwort 16 Input-Tokens und 208 Output-Tokens. Mit den Katalogwerten vom 20. August ergibt dieses illustrative Ergebnis eine Schätzung von etwa 0,005056 $. Der tatsächliche Gesamtbetrag hängt von Modell, Qualität, Größe, Prompt, Retries und der gemeldeten Nutzung ab. Betrachten Sie die API-Antwort und das Nutzungs-Dashboard Ihres Kontos als Abrechnungsnachweis, nicht eine feste Pro-Bild-Annahme.

Planen Sie auch erfolglose Arbeit ein. Ein Retry nach einem unbestätigten Timeout kann ein zweites kostenpflichtiges Ergebnis erzeugen, und ein technisch erfolgreiches Bild, das die Prüfung nicht besteht, verbraucht trotzdem Budget. Verfolgen Sie sowohl API-Kosten als auch die Annahmequote:

effective cost per accepted image = total batch spend / approved images

Häufige Fehler bei Image-Generation-APIs und wie man sie behebt

SymptomWahrscheinliche UrsacheLösung
401Fehlender oder ungültiger SchlüsselServerseitigen COMETAPI_KEY prüfen
400Ungültiges Modell oder nicht unterstützte OptionLive-Katalog erneut prüfen und modellspezifische Felder entfernen
429Zu hohe ParallelitätMAX_WORKERS verringern und exponentielles Backoff beibehalten
Wiederholte 5xxVorübergehender Upstream-FehlerMit Limit erneut versuchen, dann Job in eine Dead-Letter-Queue verschieben
Kein gespeichertes BildAntwort verwendete einen anderen Containerdata[0] inspizieren und entweder b64_json oder url unterstützen
Doppelte KostenJob wurde nach partiellem Fehler erneut abgespieltDauerhafte IDs verwenden und erst nach erfolgreicher Speicherung bestätigen

Versuchen Sie nicht, jeden Fehler zu wiederholen. Eine permanente 400-Anfrage bleibt ungültig, während eine unbegrenzte 429-Retry-Schleife einen Traffic-Spike in einen Rückstau verwandeln kann.

Best Practices für Bildgenerierung in der Produktion im großen Maßstab

Wechseln Sie von JSON Lines zu einer dauerhaften Warteschlange, wenn mehrere Worker beteiligt sind. Setzen Sie ein Visibility-Timeout, das länger als die maximale Generierungszeit ist, bestätigen Sie einen Job erst, nachdem Bild und Manifest gespeichert sind, und senden Sie erschöpfte Jobs zur Prüfung in eine Dead-Letter-Queue.

Halten Sie optionale Steuerungen in modellspezifischer Konfiguration. Eine gemeinsame Payload sollte nur gemeinsame Felder wie model, prompt und n: 1 enthalten; fügen Sie quality, size oder output_format erst hinzu, nachdem die Dokumentation des ausgewählten Modells diese bestätigt. Wenn Sie Fallback-Routing hinzufügen, wählen Sie ein Modell, das dieselbe Aufgabe unterstützt, und bauen Sie die Payload für dieses Modell neu, statt anbieter­spezifische Optionen blind zu wiederholen.

Speichern Sie den API-Schlüssel in einem Secret Manager, beschränken Sie die Prompt-Eingabe, scannen Sie generierte Assets gemäß Ihrer Richtlinie und halten Sie Provider-URLs aus langfristigen Produktdatensätzen heraus. Protokollieren Sie Job-ID, Modell-ID, Latenz, Versuche, Nutzung, Speicherpfad, Prüfergebnis und das Datum des Katalog-Snapshots. Diese Felder ermöglichen den Vergleich von Modellen anhand der Kosten pro akzeptiertem Bild statt nur des Preises pro Aufruf.

Setzen Sie schließlich Budget-Leitplanken: eine maximale Batchgröße, ein Retry-Limit pro Job, eine tägliche Ausgabenwarnung und eine Stop-Bedingung, wenn die Freigaberate sinkt. Ein schlechtes Prompt schneller zu skalieren, ist keine Optimierung.

FAQs zur Automatisierung der Bildgenerierung im großen Maßstab

Was ist der einfachste Weg, Bildgenerierung im großen Maßstab zu automatisieren, ohne mehrere APIs zu verwalten?

Verwenden Sie eine einzige Warteschlangen- und Speicher-Workflow, und senden Sie dann kompatible Bildanfragen über einen CometAPI-Schlüssel und https://api.cometapi.com/v1/images/generations. Ändern Sie die Modell-ID in Ihrer Routing-Schicht, statt separate Authentifizierungen und Provider-SDKs zu pflegen.

Kann ich eine Anfrage senden und mehrere Bildmodelle gleichzeitig generieren lassen?

Das Beispiel sendet ein Modell pro Job. Fan-out ist ein Anwendungs-Workflow: Duplizieren Sie einen Job mit unterschiedlichen IDs und Modellwerten und vergleichen Sie dann die gespeicherten Ausgaben. So bleiben Kosten und Prüfstatus jedem Modell zuordenbar.

Welche Parallelität sollte ich verwenden?

Es gibt keine universelle Zahl für jedes Konto und jedes Modell. Beginnen Sie mit einem kleinen begrenzten Pool wie vier Workern, überwachen Sie Latenz und 429-Antworten und optimieren Sie evidenzbasiert.

Sollte ich die zurückgegebene URL oder das Bild selbst speichern?

Speichern Sie das Bild in Ihrem eigenen Objektspeicher. Eine zurückgegebene URL kann temporär sein, während GPT Image-Modelle möglicherweise Base64-Inhalt statt einer URL zurückgeben.

Wie wähle ich das günstigste Modell?

Berechnen Sie die Kosten pro akzeptiertem Bild, nicht nur den Preis pro Aufruf. Berücksichtigen Sie Token- oder Anfragegebühren, Retries, fehlgeschlagene Downloads, abgelehnte Assets, Nachbearbeitung und manuelle Prüfung. Prüfen Sie den Live-Modellkatalog an dem Tag, an dem Sie veröffentlichen oder bereitstellen.

Wo sollte ich Endpunkt und Antwortformat verifizieren?

Verwenden Sie den CometAPI-Quickstart, die Modellkatalog-Dokumentation, die Image-Generierungsreferenz und den Preisleitfaden.

Weiterlernen

Diesen Artikel mit der nächsten Entscheidung verknüpfen.

Alle Themen anzeigen
Veröffentlicht am Sep 6, 2026
Zuletzt aktualisiert Sep 6, 2026
3 Aufrufe
Auf Klarheit, Quellenangabe und aktuelle API-Terminologie geprüft.

Bereit, die KI-Entwicklungskosten um 20 % zu senken?

In wenigen Minuten kostenlos starten. Inklusive kostenlosem Testguthaben. Keine Kreditkarte erforderlich.

Mehr lesen