> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bettertoken.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# GPT Image mit 1K, 2K, 4K, Quality und Mask verwenden: BetterToken-Testleitfaden

> Praxisleitfaden zu GPT-Image-Größen, Qualität, Mask-Bearbeitung, gelieferten Pixeln, Abrechnungsstufen, Preisen und API-Beispielen aus BetterToken-Tests.

export const GptImageComparison = ({kind, labels, caption, label}) => {
  const comparisonPanels = {
    crops: [["comparison-crop-1k.png", 480, 480], ["comparison-crop-2k.png", 480, 480], ["comparison-crop-4k.png", 480, 480]],
    mask: [["comparison-mask-original.png", 476, 476], ["comparison-mask-overlay.png", 476, 476], ["comparison-mask-result.png", 476, 476]],
    boundary: [["comparison-boundary-original.png", 576, 256], ["comparison-boundary-result.png", 576, 256]],
    circles: [["comparison-circles-original.png", 416, 416], ["comparison-circles-overlay.png", 416, 416], ["comparison-circles-result.png", 416, 416]]
  };
  const panels = comparisonPanels[kind];
  return <div className="bt-image-comparison not-prose">
      <div className="bt-image-comparison-scroll" role="region" aria-label={label} tabIndex={0}>
        <div className="bt-image-comparison-grid" style={{
    gridTemplateColumns: `repeat(${panels.length}, minmax(0, 1fr))`,
    '--bt-comparison-min-width': `${panels.length * 176 + (panels.length - 1) * 16}px`
  }}>
          {labels.map((title, index) => <p className="bt-image-comparison-title" key={`title-${index}`}>{title}</p>)}
          {panels.map(([file, width, height], index) => <a key={file} href={`/images/gpt-image-guide/${file}`} target="_blank" rel="noreferrer">
              <img src={`/images/gpt-image-guide/${file}`} alt={labels[index]} width={width} height={height} loading="lazy" style={{
    borderRadius: '0.5rem'
  }} />
            </a>)}
        </div>
      </div>
      <p className="bt-image-comparison-caption">{caption}</p>
    </div>;
};

Bei der Erstellung von Produktbildern, Werbematerialien oder Designentwürfen mit `gpt-image-2`, `gpt-image-2.5-flare` und `gpt-image-2.5-sunburst` stoßen Entwickler häufig auf einige schwierige Fragen:

* **Warum liefern Aufrufe mit demselben Modell und denselben Parametern zu unterschiedlichen Zeitpunkten verschiedene Ergebnisse?**
* **Warum kommt bei einer Anfrage für 4K oder eine bestimmte Größe manchmal nur ein verkleinertes 1K-Bild zurück?**
* **Greifen lokales Bearbeiten mit `Mask` oder `quality=high` tatsächlich? Nach welchem Maßstab wird schließlich abgerechnet?**

Bei alltäglichen API-Aufrufen reicht es bei Weitem nicht aus, nur zu prüfen, ob der HTTP-Status `200 OK` lautet. Drei Bedingungen müssen gleichzeitig erfüllt sein: **Das Bild wird erzeugt, passt in das Ziellayout und die Kosten sind transparent und vorhersehbar**.

Damit Entwickler das tatsächliche Verhalten dieser 3 Modelle nachvollziehen können, hat BetterToken auf Gateway-Ebene **intelligentes Routing nach Fähigkeiten, Normalisierung von Standardparametern, vorgelagerte Zurückweisung ungültiger Parameter sowie eine transparente Abrechnung anhand der tatsächlich gelieferten Pixel** umgesetzt. Dieser Leitfaden basiert auf den aktuellen Testergebnissen und dem Preisstand vom 2026-10-19. Anhand echter generierter Bilder und Abrechnungen zeigen wir, wie Sie Aufrufe ausführen, welche Ergebnisse Sie erhalten und welche objektiven Grenzen die Modelle weiterhin haben.

> **Hinweis**: Dieser Beitrag konzentriert sich auf `gpt-image-2`, `gpt-image-2.5-flare` und `gpt-image-2.5-sunburst`. Die Modelle der Nano-Banana-Serie haben andere Parameter und ein anderes Abrechnungssystem. Wir behandeln sie separat, damit es nicht zu Verwechslungen kommt.

***

## 1. Warum können dasselbe Modell und dieselben Parameter unterschiedliche Ergebnisse liefern?

In der Praxis unterscheiden sich die tatsächlichen Fähigkeiten und die Stabilität verschiedener Serviceknoten hinter demselben Modellnamen oft. Einige Routen unterstützen nur die grundlegende 1K-Bilderzeugung, andere liefern hochauflösende Bilder mit `2048×2048` oder sogar `3840×2160`. Auch bei der Unterstützung von `quality`-Werten, der Bearbeitung anhand von Referenzbildern und `Mask`-Masken gibt es Unterschiede zwischen den Knoten.

Leitet eine Plattform Anfragen einfach blind anhand des Modellnamens weiter, erleben Entwickler häufig Situationen wie „4K angefordert, aber ein kleines 1K-Bild erhalten“, „Mask mitgesendet und sofort einen Fehler bekommen“ oder „Parameter immer wieder anpassen müssen“. Deshalb brauchen wir einen strengen Teststandard, der getrennt prüft, ob „die API den Parameter annimmt“ und welches „tatsächliche Ergebnis geliefert wird“.

***

## 2. Wie haben wir getestet: Was gilt als „unterstützt“?

Damit die Schlussfolgerungen objektiv und zuverlässig sind, umfasste unser Regressionstest für die Produktionsversion **22 standardisierte Testszenarien** (17 gültige Anfragen lieferten erfolgreich 18 Bilder; 5 Szenarien mit ungültigen Parametern wurden erwartungsgemäß abgewiesen, ohne Kosten zu verursachen). Zusätzlich haben wir Produktbilder und Mask-Bearbeitungsbeispiele für häufige E-Commerce-Anwendungsfälle erstellt.

Unsere Prüfkriterien sind einfach:

1. **Pixel der Originaldatei dekodieren**: Wir verlassen uns nicht auf Angaben der API. Für jedes gelieferte Bild dekodieren wir die Originaldatei, lesen Breite und Höhe aus und gleichen anschließend die Abrechnungsstufe in der Antwort mit der tatsächlichen Kontobelastung ab.
2. **Zielgröße überprüfen**: Wir vergleichen die tatsächliche Breite und Höhe mit den jeweils ausdrücklich angeforderten Maßen. Ein größeres zurückgegebenes Maß gilt als bestanden; **ist eine der beiden Seiten mehr als 5% kleiner als das Zielmaß, gilt das Ergebnis als nicht bestanden** (Hinweis: Dieser Maßstab dient der strengen Bewertung von Testergebnissen. Er bedeutet nicht, dass die API gültige Bilder mit abweichenden Maßen automatisch verwirft.) Wenn keine Größe angegeben oder `auto` übergeben wird, gibt es kein festes Ziel für die Bildfläche.
3. **Parameterannahme und tatsächliches Ergebnis getrennt bewerten**: Eine Antwort ohne Fehler bedeutet nur, dass „der Parameter angenommen wurde“. Ob `Mask` eine strikte Bereichsisolation erreicht und ob `quality=high` sichtbar bessere Ergebnisse liefert, muss am endgültigen Bild beurteilt werden.

***

## 3. Was haben die Tests gezeigt: Welche Parameter werden am häufigsten missverstanden?

Der Vergleich von Anfrageparametern, tatsächlich gelieferten Pixeln und der endgültigen Abrechnung zeigt mehrere zentrale Fakten, die Entwickler am häufigsten missverstehen:

| Anfrageszenario | Tatsächlich gelieferte Größe | Abrechnungsstufe und CNY-Einzelpreis | Testergebnis und Bedeutung für die Verwendung |
| :- | :- | :- | :- |
| `gpt-image-2`, `2048x2048`, `quality` nicht angegeben | 2048×2048 | 2K, ¥0.11 | In dieser Anfrage wurde ohne Angabe von `quality` (mit der Standardqualität) erfolgreich ein 2K-Bild erzeugt. |
| `flare`, `2048x2048`, `quality` nicht angegeben | 2048×2048 | 2K, ¥0.15 | Die Lieferung mit `2048×2048` wurde im Test bestätigt. |
| `sunburst`, `2048x2048`, `quality` nicht angegeben | 2048×2048 | 2K, ¥0.15 | Die Lieferung mit `2048×2048` wurde im Test bestätigt. |
| `gpt-image-2`, `1024x1024` | **1024×936** | 1K, ¥0.035 | Ein gültiges Bild wurde geliefert, aber die Höhe war um etwa 8.6% kleiner und verfehlte damit den strengen Größenmaßstab dieser Testrunde. |
| `flare` / `sunburst`, `1024x1024` | **Beide 1254×1254** | **2K, jeweils ¥0.15** | **Eine 1K-Anfrage garantiert keine Abrechnung zu 1K**; das tatsächlich gelieferte quadratische Bild überschritt die angeforderte Größe und wurde der 2K-Stufe zugeordnet. |
| `gpt-image-2`, `1536x1024` | 1536×1024 | 1K, ¥0.035 | Auch ein Querformat mit gewöhnlichem Seitenverhältnis fällt in die 1K-Abrechnungsstufe. |
| `gpt-image-2`, `3840x2160` | **3840×2159** | 4K, ¥0.13 | Die Höhe wich nur um 1 Pixel ab (Abweichung \< 0.05%) und erfüllt damit das Abnahmekriterium für 4K. |
| `gpt-image-2`, gültige Mask + `2048x2048` + `high` | 2048×2048 | 2K, ¥0.11 | Die Mask-Bearbeitungskette funktionierte, aber die präzise Isolation des lokalen Bereichs muss anhand des Bildes geprüft werden. |

Die Tests zeigten außerdem folgendes Verhalten bei Parameterkompatibilität und Fehlerbehandlung:

* **Toleranz bei Standardparametern**: Die Bilderzeugung funktioniert, wenn `quality` und `size` weggelassen, als `null` übergeben oder ausdrücklich auf `"auto"` gesetzt werden.
* **So fordern Sie 4K richtig an**: **„4K“ bezeichnet eine Abrechnungsstufe und bedeutet nicht, dass quadratische Bilder mit `4096x4096` unterstützt werden.** Für ein hochauflösendes Bild der 4K-Stufe verwenden Sie das Querformat `3840x2160`.
* **Ungültige Parameter werden ohne Kosten abgewiesen**: Anfragen mit `4096x4096`, `stream=true`, leerem `quality=""`, leerem `size=""` und `n=0` lieferten alle den Fehler `HTTP 400` und **verursachten keinerlei Kosten**.

***

## 4. Was BetterToken bietet: keine eigene Anpassung jeder Route erforderlich

Um mit komplexen Größenabweichungen und Unterschieden zwischen zugrunde liegenden Knoten umzugehen, übernimmt BetterToken auf Gateway-Ebene vier Aufgaben. Sie müssen keinen separaten Anpassungscode für jede Route schreiben:

1. **Intelligentes Routing nach Fähigkeiten**: Das System gleicht Modell, Zielgröße (z. B. 2K/4K) und das Vorhandensein von Bildbearbeitungs-/`Mask`-Parametern automatisch mit einem verfügbaren Dienst ab, der die jeweiligen Fähigkeiten besitzt.
2. **Einheitliche Schnittstellen und Parameter-Fallbacks**: Die standardisierten Endpunkte `POST /v1/images/generations` (Bilderzeugung) und `POST /v1/images/edits` (Bearbeitung anhand von Referenzbild/Mask) verarbeiten `null`, `auto` und fehlende Parameter automatisch und blockieren ungültige Eingaben direkt auf Gateway-Ebene.
3. **Transparente Ausgabe tatsächlicher Bildgrößen und Abrechnungsdetails**: Zusammen mit den Bilddaten nennt das Feld `bettertoken_image_billing` im Antworttext die **tatsächliche dekodierte Breite und Höhe (`width`/`height`), die Abrechnungsstufe (`billing_resolution`), die Währung und den Abrechnungsbetrag (`settled_amount`)**.
4. **Klare Abgrenzung zweier zentraler Konzepte**:
   * **Unterstützung des `Mask`-Parameters ≠ pixelgenaues Inpainting**: Die API unterstützt das Hochladen eines Referenzbildes und einer Mask zur Bearbeitung, doch einige Testergebnisse veränderten auch geschützte Bereiche außerhalb der Maske. In unserem geometrischen Test mit zwei Kreisen war der linke Kreis transparent und sollte die Farbe ändern, während der rechte Kreis undurchsichtig und geschützt sein sollte; im Ergebnis änderten beide Kreise ihre Farbe. Daher **unterstützen wir ausdrücklich die Übergabe des Mask-Parameters, garantieren aber nicht jedes Mal eine strikte pixelgenaue Bereichsisolation**.
   * **Unterstützung des `quality`-Parameters ≠ Garantie für eine feste Qualitätssteigerung**: Die API nimmt Parameter wie `"auto"` oder `"high"` an und leitet sie korrekt weiter. Da jede Bilderzeugung zufallsabhängig ist, versprechen wir nicht aufgrund eines einzelnen Beispiels, dass `high` die Qualität immer um einen bestimmten Prozentsatz steigert.

> ⚠️ **Zwei tatsächliche Einschränkungen, die Sie vor der Integration kennen sollten**:
>
> 1. **Fähigkeitsbasiertes Routing fixiert die Pixel nicht bei jeder Anfrage strikt**: Aufgrund unterschiedlicher Ausgaben der zugrunde liegenden Dienste können die tatsächlichen Pixel schwanken, selbst wenn die Anfrage an einen passenden Knoten geroutet wurde. Zu den heutigen Beispielen gehört weiterhin eine Anfrage für `1024x1024`, die `1024×936` lieferte, sowie eine Anfrage für `3840x2160`, die `3840×2161` lieferte. Wenn die Bildproportionen für Ihren Geschäftsprozess kritisch sind, schneiden Sie das Bild anhand der tatsächlich zurückgegebenen Maße zu oder verarbeiten es nach.
> 2. **Eine 1K-Anfrage wird nicht zwangsläufig zum 1K-Tarif abgerechnet**: Das Abrechnungssystem legt die Stufe anhand der **Spezifikation des tatsächlich gelieferten gültigen Bildes** fest. Heute lieferten die beiden 2.5-Modelle (und `gpt-image-2` in einigen Fällen) bei einer Anfrage für `1024x1024` Bilder mit mehr Pixeln, nämlich `1254×1254`. Das System ordnete sie der **2K-Stufe** zu und berechnete den entsprechenden Preis.

***

## 5. Unterstützung der drei Modelle: Welches Modell soll ich aufrufen und welchen Wert übergeben?

Die Konfiguration der Fähigkeiten und die Testabdeckung für `gpt-image-2`, `gpt-image-2.5-flare` und `gpt-image-2.5-sunburst` sehen wie folgt aus:

| Fähigkeit | `gpt-image-2` | `gpt-image-2.5-flare` | `gpt-image-2.5-sunburst` |
| :- | :- | :- | :- |
| **1K-Bilderzeugungsanfrage** | Unterstützt (getestet; tatsächliche Größe kann vom Ziel abweichen, z. B. `1024×936` oder `1254×1254`) | Unterstützt (getestet; lieferte in dieser Runde das größere Bild `1254×1254`, abgerechnet mit 2K) | Unterstützt (getestet; lieferte in dieser Runde das größere Bild `1254×1254`, abgerechnet mit 2K) |
| **2K-Bilderzeugung (`2048x2048`)** | **In dieser Testrunde geliefert** | **In dieser Testrunde geliefert** | **In dieser Testrunde geliefert** |
| **4K-Bilderzeugung (`3840x2160`)** | **Querformat in dieser Testrunde geliefert** | Routingkonfiguration für die Unterstützung abgestimmt | Routingkonfiguration für die Unterstützung abgestimmt |
| **Normale Referenzbildbearbeitung (ohne Mask)** | **In dieser Testrunde getestet** (ohne Mask oder mit einer leeren Mask erfolgt normale Bearbeitung) | Noch nicht separat bestätigt (Mask-Unterstützung belegt nicht, dass auch normale Bearbeitung möglich ist) | Noch nicht separat bestätigt (Mask-Unterstützung belegt nicht, dass auch normale Bearbeitung möglich ist) |
| **Lokale Bearbeitung mit Mask** | **2K-Lieferung in dieser Runde getestet** | Unterstützung für 4K-Mask-Bearbeitung konfiguriert (andere Stufen nicht bestätigt) | Unterstützung für 4K-Mask-Bearbeitung konfiguriert (andere Stufen nicht bestätigt) |
| **Bildqualitätsparameter (`quality`)** | Standardwert/`auto`/`high` **alle im Test verifiziert** | Standardwert/`auto` getestet; `high`-Routingkonfiguration abgestimmt | Standardwert/`auto` getestet; `high`-Routingkonfiguration abgestimmt |

*Hinweis: „In dieser Testrunde geliefert“ in der Tabelle bedeutet, dass bei den heutigen Regressionstests und Beispielen direkt Bilder und Abrechnungsbelege geliefert wurden. „Routingkonfiguration für die Unterstützung abgestimmt“ bedeutet, dass die Plattform die Konfiguration für den entsprechenden Fähigkeitskanal angepasst hat, aber in den heutigen Regressionstests nicht alle möglichen Kombinationen erneut angefragt wurden.*

***

## 6. Zwei echte Bildbeispiele: Wie sehen die Ergebnisse tatsächlich aus?

Um die tatsächliche Bildqualität zu zeigen, folgten wir dem Ansatz im [offiziellen OpenAI-Leitfaden für Bild-Prompts](https://developers.openai.com/api/docs/guides/image-prompting): **„konkretes Motiv + Materialstruktur + Lichtrichtung + Komposition und Seitenverhältnis + Ausschlüsse“**. Über die echte BetterToken-API haben wir die folgenden beiden E-Commerce-Beispiele erzeugt (Originalausgaben erhalten, ohne Nachbearbeitung).

### Beispiel A: E-Commerce-Produktfotografie mit Größen- und Detailvergleich von 1K / 2K / 4K

**Szenenbeschreibung (Konzept auf Chinesisch)**:

> Erzeuge ein realistisches E-Commerce-Studiofoto: Ein korallroter Keramikbecher (Henkel nach rechts) steht auf einer hellgrauen Steinplatte, links daneben liegt ein gefaltetes beiges Leinentuch. Auf dem Becher steht gut lesbar der weiße Text „BETTER DAY“. Weiches Seitenlicht von links oben; feine Reflexionen der Keramikglasur, Leinenfasern und natürliche Kontaktschatten erhalten. Der ganze Becher ist mittig im Bild, vor einem schlichten neutralen Hintergrund, ohne weitere Gegenstände, Wasserzeichen oder zusätzlichen Text.

**Tatsächlich verwendeter englischer Prompt**:

```text theme={null}
Photorealistic ecommerce studio photograph. A coral-red ceramic mug with a handle on the right sits on a pale gray stone tabletop, with a folded beige linen cloth to its left. The mug reads "BETTER DAY" in clear white lettering. Soft directional light from upper left, subtle glaze reflections, visible linen fibers and natural contact shadows. Entire mug in frame, centered composition, simple neutral background. No other objects, no watermark, no additional text.
```

Wir verwendeten `gpt-image-2` (`quality="high"`, jeweils 1 Bild pro Anfrage) und ließen den obigen Prompt unverändert. Anstatt durch das Wort „4K“ im Prompt eine höhere Auflösung vorzutäuschen, forderten wir drei Größenstufen ausschließlich über den Parameter `size` an:

| Angeforderte Größe (`size`) | Tatsächlich gelieferte Größe | Tatsächliche Abrechnungsstufe / Kosten | Dauer pro Anfrage |
| :- | :- | :- | :- |
| `1024x1024` | **1254×1254** | **2K / ¥0.11** | 34.35 Sekunden |
| `2048x2048` | **2048×2048** | **2K / ¥0.11** | 31.97 Sekunden |
| `3840x2160` | **3840×2161** | **4K / ¥0.13** | 24.36 Sekunden |

**1. Originalausgabe der Anfrage `1024x1024` (tatsächlich geliefert: `1254×1254`):**

<Frame>
  <img src="https://mintcdn.com/bettertoken-d796114e/hPGTCgdK9IohJYOA/images/gpt-image-guide/product-1k-0.png?fit=max&auto=format&n=hPGTCgdK9IohJYOA&q=85&s=975ebb5653a1a0e6847310d8448a56d9" alt="GPT Image 2 Produktbild: 1024×1024 angefordert, 1254×1254 zurückgegeben" style={{ borderRadius: '0.5rem' }} width="1254" height="1254" data-path="images/gpt-image-guide/product-1k-0.png" />
</Frame>

**2. Originalausgabe der Anfrage `2048x2048` (tatsächlich geliefert: `2048×2048`):**

<Frame>
  <img src="https://mintcdn.com/bettertoken-d796114e/hPGTCgdK9IohJYOA/images/gpt-image-guide/product-2k-0.png?fit=max&auto=format&n=hPGTCgdK9IohJYOA&q=85&s=a290e92bd7db319ed801c06640c7ba8d" alt="GPT Image 2 Produktbild: angefordert und geliefert mit 2048×2048" style={{ borderRadius: '0.5rem' }} width="2048" height="2048" data-path="images/gpt-image-guide/product-2k-0.png" />
</Frame>

**3. Originalausgabe der Anfrage `3840x2160` (tatsächlich geliefert: `3840×2161`):**

<Frame>
  <img src="https://mintcdn.com/bettertoken-d796114e/hPGTCgdK9IohJYOA/images/gpt-image-guide/product-4k-0.png?fit=max&auto=format&n=hPGTCgdK9IohJYOA&q=85&s=1e68f4d96829d9e52f9fa88aceac3c27" alt="GPT Image 2 Produktbild im Querformat: 3840×2160 angefordert, 3840×2161 zurückgegeben" style={{ borderRadius: '0.5rem' }} width="3840" height="2161" data-path="images/gpt-image-guide/product-4k-0.png" />
</Frame>

**4. Vergleich von Ausschnitten der drei Bilder in Originalgröße (Schrift auf dem Becher und Materialdetails):**

<Frame>
  <GptImageComparison kind="crops" label="Vergleich von Ausschnitten der 3 Produktbilder mit 100% der Originalpixel" labels={["1K angefordert · 1254² erhalten","2K angefordert · 2048² erhalten","4K angefordert · 3840×2161 erhalten"]} caption="Jedes Feld zeigt einen 480×480-Ausschnitt in Originalauflösung. Die Bilder wurden unabhängig mit unterschiedlichen Kompositionen erzeugt. Die Seitenskalierung ändert keine Dateipixel." />
</Frame>

**Testbeobachtungen**:

* **Hohe Vollständigkeit des Bildes**: Alle drei Bilder zeigen die Reflexionen der korallroten Glasur, den Henkel auf der rechten Seite, die hellgraue Steinplatte, die beigen Leinenfasern und die gut lesbare weiße Aufschrift „BETTER DAY“.
* **Abweichungen durch unabhängige Stichproben**: Jede Generierung ist eine unabhängige Stichprobe. Deshalb unterscheiden sich die Proportionen des Bechers, die Strichstärke und die Faltung des Tuchs auf natürliche Weise (im 4K-Querformat steht der Text beispielsweise in zwei Zeilen). Die Ausschnitte zeigen die tatsächlichen Details der jeweiligen Bilder und sind kein optischer Schärfetest mit identischer Komposition.
* **Abrechnungsgrenze direkt sichtbar**: Obwohl die erste Anfrage `1024x1024` lautete, wurde ein hochauflösendes quadratisches Bild mit `1254×1254` geliefert. Daher wurde es wie das zweite Bild mit `2048×2048` in der **2K-Stufe (¥0.11)** abgerechnet.

***

### Beispiel B: Lokale Produktumfärbung mit Mask – tatsächlicher Effekt und Grenzen

Als Eingabebild verwendeten wir das erste Produktbild aus Beispiel A (`1254×1254`) und erstellten eine gleich große Mask-Datei mit Alphakanal [mask-mug.png](/images/gpt-image-guide/mask-mug.png): **Nur der polygonale Bereich des Becherkörpers ist transparent (darf neu gezeichnet werden); Henkel, innere Becherkante und Hintergrund sind undurchsichtig (sollen erhalten bleiben). Die Aufschrift befindet sich im transparenten Bereich; der Prompt verlangt, sie zu erhalten.**

<Frame>
  <GptImageComparison kind="mask" label="Originalbild, Darstellung der Mask-Überlagerung und Bearbeitungsergebnis" labels={["Original","Grüne Überlagerung: bearbeitbarer Bereich","Tatsächliches Ergebnis"]} caption="Nur für die Vergleichsanordnung verkleinert. Auch der Tassenrand außerhalb der Maske änderte seine Farbe. Die ursprünglichen API-Ausgaben bleiben separat erhalten." />
</Frame>

<Frame>
  <img src="https://mintcdn.com/bettertoken-d796114e/hPGTCgdK9IohJYOA/images/gpt-image-guide/mask-diagram.png?fit=max&auto=format&n=hPGTCgdK9IohJYOA&q=85&s=7d648791e31a2358ee47907bc3755fae" alt="Darstellung des Mask-Bereichs: Schwarz steht für den transparenten bearbeitbaren Bereich, Weiß für den undurchsichtigen geschützten Bereich" style={{ borderRadius: '0.5rem' }} width="1254" height="1254" data-path="images/gpt-image-guide/mask-diagram.png" />
</Frame>

*(Hinweis: Das Bild oben ist eine Schwarz-Weiß-Visualisierung. Schwarz steht für den bearbeitbaren Bereich, Weiß für den geschützten Bereich. Über die API wird tatsächlich `mask-mug.png` mit Alphakanal hochgeladen.)*

**Szenenbeschreibung (Konzept auf Chinesisch)**:

> Ändere nur den korallroten Becherkörper innerhalb der transparenten Maske in dunkles Marineblau. Erhalte Keramikstruktur, Beleuchtung und Reflexionen. Die weiße Aufschrift „BETTER DAY“, den roten Henkel, das Leinentuch, die Tischplatte, den Hintergrund und die gesamte Komposition unverändert lassen. Keine Gegenstände hinzufügen oder entfernen.

**Tatsächlich verwendeter englischer Prompt (Modell: `gpt-image-2`, `size="2048x2048"`, `quality="high"`)**:

```text theme={null}
Change only the coral-red mug body inside the transparent mask to deep navy blue. Preserve ceramic texture, lighting and reflections. Keep the white "BETTER DAY" lettering, red handle, linen cloth, tabletop, background and composition unchanged. Do not add or remove any objects. Do not change anything outside the transparent mask.
```

**Tatsächliches Bearbeitungsergebnis (`2048×2048`, 38.51 Sekunden, Kosten ¥0.11):**

<Frame>
  <img src="https://mintcdn.com/bettertoken-d796114e/hPGTCgdK9IohJYOA/images/gpt-image-guide/product-mask-0.png?fit=max&auto=format&n=hPGTCgdK9IohJYOA&q=85&s=1a3ba294610d624bd6a09bc7c03aa228" alt="GPT Image 2 Mask-Bearbeitung: Becherkörper dunkelblau, Henkel bleibt rot, aber die innere Becherkante wurde ebenfalls umgefärbt" style={{ borderRadius: '0.5rem' }} width="2048" height="2048" data-path="images/gpt-image-guide/product-mask-0.png" />
</Frame>

**Detailvergleich der Änderungen außerhalb des geschützten Bereichs:**

<Frame>
  <GptImageComparison kind="boundary" label="Vergrößerter geschützter Mask-Bereich: Becherkante und Innenwand liegen außerhalb der transparenten Maske, wurden aber ebenfalls blau" labels={["Original: roter Rand und rote Innenwand","Nach Bearbeitung: Rand und Innenwand ebenfalls blau"]} caption="Entsprechende Bereiche sind zur Ansicht vergrößert oder skaliert, nicht für einen pixelgenauen Vergleich. Beide Bereiche liegen außerhalb der transparenten Maske." />
</Frame>

**Gegenbeispiel: das Regressionstestsample „beide Kreise verfärbt“ (Mask angenommen ≠ präzise Isolation)**

<Frame>
  <GptImageComparison kind="circles" label="Gegenbeispiel aus dem Regressionstest: Nur der linke Kreis war transparent und sollte geändert werden, doch auch der geschützte rechte Kreis änderte seine Farbe" labels={["Original: zwei rote Kreise","Grün: nur links darf bearbeitet werden","Ergebnis: beide Kreise wurden blau"]} caption="Vorhandene BetterToken-API-Beispiele. Das geschützte Objekt rechts wurde ebenfalls verändert. Die Bilder sind nur für das Layout verkleinert." />
</Frame>

**Testbeobachtungen (Grenzen offen dargestellt)**:

* **Die zentrale Farbänderung wurde erreicht**: Die Außenseite des Becherkörpers wurde erfolgreich dunkel marineblau, die keramischen Glanzlichter blieben erhalten. **Der rote Henkel außerhalb der Maske, das Leinentuch links und der Hintergrund blieben im Wesentlichen erhalten; die Aufschrift „BETTER DAY“ innerhalb der Maske blieb lesbar.**
* **Strenge Mask-Grenze nicht eingehalten (Änderungen außerhalb der Maske)**: Bei genauer Betrachtung der Kante und Innenwand fällt auf, dass auch die ursprünglich im undurchsichtigen Schutzbereich liegenden korallroten Bereiche dunkelblau wurden. Beim noch extremeren geometrischen Test „beide Kreise verfärbt“ änderte sich ebenfalls die Farbe des nicht maskierten rechten Kreises.
* **Empfehlung zur Verwendung**: Achten Sie beim Hochladen von Referenzbild und Mask auf identische Bildflächen (transparent für zu ändernde und undurchsichtig für zu erhaltende Bereiche) und nennen Sie im Prompt sowohl „was geändert“ als auch „was erhalten“ werden soll. Bei industriellen oder kommerziellen Bildern mit Markenlogos, kleinem Verpackungstext oder strengen Kantenanforderungen **prüfen Sie die Grenzen der geschützten Bereiche nach der Generierung unbedingt vergrößert**.

***

## 7. Preise und tatsächliche Nutzungskosten: Was wird am Ende berechnet?

BetterToken setzt auf transparente Preise. Die folgende Tabelle zeigt den öffentlichen Preisstand vom **2026-10-19** (CNY gilt für Unternehmenskonten in RMB, USD für reguläre USD-Konten. Beide Preise werden unabhängig festgelegt und nicht zum aktuellen Wechselkurs umgerechnet):

| Modell | Preis 1K / Bild | Preis 2K / Bild | Preis 4K / Bild |
| :- | :- | :- | :- |
| **`gpt-image-2`** (CNY / USD) | ¥0.035 / \$0.0062 | ¥0.11 / \$0.0194 | ¥0.13 / \$0.0229 |
| **`gpt-image-2.5-flare`** (CNY / USD) | ¥0.035 / \$0.0062 | ¥0.15 / \$0.0265 | ¥0.18 / \$0.0318 |
| **`gpt-image-2.5-sunburst`** (CNY / USD) | ¥0.035 / \$0.0062 | ¥0.15 / \$0.0265 | ¥0.18 / \$0.0318 |

Zu den oben genannten öffentlichen Einzelpreisen ergeben sich bei 100 generierten Bildern, die tatsächlich alle in die entsprechende Abrechnungsstufe fallen, folgende Richtkosten für 100 Aufrufe (arithmetische Schätzung):

| Modell | Kosten für 100 1K-Bilder | Kosten für 100 2K-Bilder | Kosten für 100 4K-Bilder |
| :- | :- | :- | :- |
| **`gpt-image-2`** (CNY / USD) | ¥3.50 / \$0.62 | ¥11.00 / \$1.94 | ¥13.00 / \$2.29 |
| **`flare` oder `sunburst`** (CNY / USD) | ¥3.50 / \$0.62 | ¥15.00 / \$2.65 | ¥18.00 / \$3.18 |

> 💡 **Wichtig für die Budgetplanung: Kalkulieren Sie nach der „tatsächlich gelieferten Abrechnungsstufe“ und nicht nach dem „Anfrageparameter“!**
>
> Wie die obigen Tests zeigen, lieferten einige heutige Anfragen an `flare`, `sunburst` oder `gpt-image-2` mit der Anforderung `1024x1024` (1K) Bilder mit `1254×1254`. Das System ordnete diese daher der **2K-Stufe** zu (es wurden ¥0.15 oder ¥0.11 statt ¥0.035 für 1K berechnet). Wenn alle 100 Anfragen `1024x1024` an `flare` `1254×1254` liefern, kosten diese 100 Bilder zu den aktuellen Preisen **¥15.00 (arithmetische Schätzung)**.
>
> Außerdem berücksichtigt die Stufenzuordnung die Zielgröße und eine angemessene Toleranzgrenze (zum Beispiel wird `3840×2159` normalerweise 4K und `1536×1024` 1K zugeordnet). Codieren Sie keine eigene Neuberechnung in Ihre Geschäftslogik, die lediglich prüft, ob „die längste Seite größer als 1024 ist“. **Maßgeblich für jede Abrechnung ist das Feld `bettertoken_image_billing` im Antworttext.**

### Warum sollte man nicht nur auf den vermeintlich „niedrigen Preis pro Bild“ schauen?

Beim Vergleich der Kosten von Bild-APIs verschiedener Plattformen sollten Entwickler drei Kostenarten berücksichtigen:

1. **Preise lassen sich nur vergleichen, wenn die tatsächliche Ausgabe die Zielgröße erreicht**: Eine Anfrage, die mit „4K-Unterstützung zum sehr niedrigen Preis“ beworben wird, aber tatsächlich nur ein verkleinertes 1024-Bild liefert, eignet sich nicht für eine Produktionsumgebung, die hochauflösende Bilder benötigt. Sie ist kein gültiger 4K-Preisvergleich.
2. **Kosten für Fehlschläge und Nacharbeit einberechnen**: Die Tests mit ungültigen Parametern waren in dieser Runde kostenlos. Wird ein erfolgreich geliefertes Bild als unbefriedigend bewertet, gilt eine erneute Generierung als neue Anfrage und sollte separat budgetiert werden. 4 Produkt- und Mask-Beispielbilder in diesem Beitrag (3 Bilderzeugungen + 1 Bearbeitung) wurden jeweils mit einer Anfrage geliefert. Beim Mask-Beispiel traten die oben beschriebenen Farbänderungen außerhalb der Maske auf. Die Einzelpreise betrugen ¥0.11, ¥0.11, ¥0.13 und ¥0.11; **die tatsächlichen Gesamtkosten für alle 4 Bilder beliefen sich auf nur ¥0.46** – exakt wie auf der Abrechnung und beim Kontostand abgezogen. Erzwingen instabile Routen oder inkompatible Parameter wiederholte Generierungen, steigen die tatsächlichen Gesamtkosten für ein brauchbares Asset trotz eines niedrigen Einzelpreises.
3. **Versteckte Kosten für technische Anpassungen senken**: Die einheitlichen Parameterkonventionen, das intelligente Routing nach Fähigkeiten und die Echtzeitfelder für echte Pixel und Abrechnung von BetterToken verringern den Entwicklungsaufwand für die Anpassung einzelner Dienste und die eigene Erfassung von Größen- und Kostendaten.

***

## 8. Direkt kopierbare Aufrufbeispiele

Speichern Sie Ihren BetterToken API Key in der Umgebungsvariable `BETTERTOKEN_API_KEY`. Anschließend können Sie die folgenden Befehle direkt kopieren und mit den Aufrufen beginnen.

### Beispiel 1: JSON-Anfrage zum Erzeugen eines hochauflösenden Produktbildes (`POST /v1/images/generations`)

Das folgende Beispiel ruft `gpt-image-2` auf, um ein hochauflösendes Produktbild mit `2048x2048` zu erzeugen (`model` lässt sich direkt durch `gpt-image-2.5-flare` oder `gpt-image-2.5-sunburst` ersetzen):

```bash theme={null}
curl https://bettertoken.ai/v1/images/generations -o response.json \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
  "model": "gpt-image-2",
  "prompt": "Photorealistic ecommerce studio photograph. A coral-red ceramic mug with a handle on the right sits on a pale gray stone tabletop, with a folded beige linen cloth to its left. The mug reads \"BETTER DAY\" in clear white lettering. Soft directional light from upper left, subtle glaze reflections, visible linen fibers and natural contact shadows. Entire mug in frame, centered composition, simple neutral background. No other objects, no watermark, no additional text.",
  "size": "2048x2048",
  "quality": "high",
  "n": 1,
  "response_format": "b64_json",
  "output_format": "png"
}
JSON
```

* **Größenvorgabe**: Für ein 4K-Querformat ändern Sie `"size"` zu `"3840x2160"` (verwenden Sie nicht `"4096x4096"`). Zulässige Größen müssen derzeit alle folgenden Bedingungen erfüllen: Breite und Höhe sind beide durch 16 teilbar, die längste Seite beträgt höchstens 3840, das Verhältnis von langer zu kurzer Seite ist höchstens 3:1 und die Gesamtpixelzahl liegt zwischen `655,360` und `8,294,400`.
* **Dateiformat erkennen**: Auch wenn in der Anfrage `"output_format": "png"` angegeben ist, können einige zugrunde liegende Knoten Binärdaten im JPEG-Format zurückgeben. Ermitteln Sie beim Speichern oder Verarbeiten das tatsächliche Bildformat anhand des Datei-Headers (Magic Bytes), anstatt die Dateiendung fest vorzugeben.

### Beispiel 2: Lokale Bearbeitung per Multipart mit Referenzbild und Mask (`POST /v1/images/edits`)

Bereiten Sie das Originalbild `product-1k-0.png` und die transparente Mask `mask-mug.png` in derselben Größe vor (wenn Sie nur eine normale Bearbeitung anhand eines Referenzbildes benötigen, entfernen Sie die Zeile `-F "mask=..."`):

```bash theme={null}
curl https://bettertoken.ai/v1/images/edits -o response.json \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -F "model=gpt-image-2" \
  -F "image=@product-1k-0.png;type=image/png" \
  -F "mask=@mask-mug.png;type=image/png" \
  -F 'prompt=Change only the coral-red mug body inside the transparent mask to deep navy blue. Preserve ceramic texture, lighting and reflections. Keep the white "BETTER DAY" lettering, red handle, linen cloth, tabletop, background and composition unchanged. Do not add or remove any objects. Do not change anything outside the transparent mask.' \
  -F "size=2048x2048" \
  -F "quality=high" \
  -F "n=1" \
  -F "response_format=b64_json"
```

### Beispiel 3: Tatsächlich gelieferte Pixel und Abrechnungsdaten auslesen (Antwortstruktur und Parsing-Code)

Zusätzlich zu `data[].b64_json` enthält der Antworttext von BetterToken das Erweiterungsfeld `bettertoken_image_billing`:

```json theme={null}
{
  "created": 1792398084,
  "data": [
    {
      "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
    }
  ],
  "bettertoken_image_billing": {
    "currency": "CNY",
    "settled_amount": "0.11",
    "outputs": [
      {
        "index": 0,
        "width": 2048,
        "height": 2048,
        "billing_resolution": "2K",
        "currency": "CNY",
        "amount": "0.11"
      }
    ]
  }
}
```

Mit dem folgenden Python-Code können Sie **das Bild dekodieren, das tatsächliche Format erkennen, die tatsächliche Größe auslesen und die Abrechnung abgleichen**:

```python theme={null}
import base64
import io
import json
from pathlib import Path
from PIL import Image  # 需要 Pillow

# 将 API 的 JSON 响应保存为 response.json 后执行。
resp_json = json.loads(Path("response.json").read_text())
if "error" in resp_json:
    raise RuntimeError(resp_json["error"])

billing = resp_json["bettertoken_image_billing"]
outputs = {item["index"]: item for item in billing["outputs"]}
for index, item in enumerate(resp_json["data"]):
    img_bytes = base64.b64decode(item["b64_json"], validate=True)
    with Image.open(io.BytesIO(img_bytes)) as image:
        image.load()
        width, height = image.size
        ext = {"PNG": "png", "JPEG": "jpg", "WEBP": "webp"}.get(image.format)
        if ext is None:
            raise ValueError(f"未处理的图片格式：{image.format}")
    Path(f"output_{index}.{ext}").write_bytes(img_bytes)
    info = outputs[index]
    print(f"图片 {index}：原图 {width}×{height}；计费档位 {info['billing_resolution']}")
    print(f"单张费用：{info['amount']} {info['currency']}")
    if (width, height) != (info["width"], info["height"]):
        print("图片像素与响应尺寸不一致，请保留结果并联系支持。")
print(f"本次结算：{billing['settled_amount']} {billing['currency']}")

```

***

**Referenzen**:

* [Offizielle OpenAI-Dokumentation: Image Prompting Guide](https://developers.openai.com/api/docs/guides/image-prompting)
* [OpenAI Cookbook: Beispiele für Bildgenerierung und -bearbeitung mit hoher Eingabetreue](https://developers.openai.com/cookbook/examples/generate_images_with_high_input_fidelity)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.