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

# Seedream 5.5 Bildgenerierung

> Bilder aus Text oder bis zu 10 Referenzen generieren: transparente Hintergründe, konfigurierbare Ebenenzerlegung und Text-OCR über eine asynchrone API.

```bash cURL theme={null}
curl --request POST \
  --url https://api.apimart.ai/v1/images/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "seedream-5-5",
  "prompt": "An orange cat sticker with clean edges",
  "size": "2K",
  "background": "transparent",
  "output_format": "png"
}'
```

```python Python theme={null}
import requests

payload = {
  "model": "seedream-5-5",
  "prompt": "An orange cat sticker with clean edges",
  "size": "2K",
  "background": "transparent",
  "output_format": "png"
}
response = requests.post(
    "https://api.apimart.ai/v1/images/generations",
    headers={"Authorization": "Bearer <token>"},
    json=payload,
    timeout=60,
)
response.raise_for_status()
print(response.json())
```

```javascript JavaScript theme={null}
const payload = {
  "model": "seedream-5-5",
  "prompt": "An orange cat sticker with clean edges",
  "size": "2K",
  "background": "transparent",
  "output_format": "png"
};
const response = await fetch("https://api.apimart.ai/v1/images/generations", {
  method: "POST",
  headers: {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify(payload)
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
```

```json 200 theme={null}
{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_example_seedream55"
    }
  ]
}
```

An `POST /v1/images/generations` senden, die ID aus `data[0].task_id` speichern und das Ergebnis über `GET /v1/tasks/{task_id}` abrufen.

## Modi

| Modus | Aktivierung | Eingabebilder | Prompt |
| - | - | - | - |
| Bildgenerierung | Standard | 0–10 | Erforderlich |
| Ebenenzerlegung | `layer_decomposition: true` | Genau 1 | Optional |

## Authentifizierung

**Authorization** `string` *required*

`Authorization: Bearer <token>` verwenden. `<token>` ist Ihr APIMart API Key.

## Anfrageparameter

**model** `string` *required*

Auf `seedream-5-5` setzen.

**prompt** `string`

Für Text-zu-Bild und Bild-zu-Bild erforderlich. Bei der Zerlegung optional: Das Modell erkennt Motive, Text und Hintergrund automatisch. Ein Prompt kann die zu trennenden Elemente beschreiben.

**image\_urls** `string[]`

Bis zu 10 Referenzen für die Generierung, genau 1 Bild für die Zerlegung. Öffentliche Bild-URLs oder Base64-Data-URIs werden akzeptiert. Lokale Dateien über den [Bild-Upload](https://docs.apimart.ai/de/api-reference/uploads/images.md) hochladen und die zurückgegebene `url` übergeben.

Referenzen müssen öffentlich erreichbare `http(s)`-URLs oder `data:image/<format>;base64,…` verwenden. Der Formatname in der Data URI muss kleingeschrieben sein.

* Unterstützt: JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC und HEIF. AVIF und JP2 werden nicht unterstützt.
* Pro Bild höchstens **30 MiB (31,457,280 Byte)** und **36 Millionen Pixel insgesamt**. Maßgeblich ist Breite × Höhe, nicht eine Grenze von 6000 Pixeln je Seite.
* Zu viele Bytes oder Pixel führen synchron zu HTTP 400. Bei AVIF und JP2 kann zunächst eine Aufgabe entstehen, die der Upstream anschließend ablehnt; fehlgeschlagene Aufgaben werden erstattet. Formate vorher konvertieren.

Der Bild-Upload-Endpunkt hat eigene Formatgrenzen. Für vom Modell unterstützte, dort aber nicht hochladbare Formate öffentliche URLs oder Data URIs verwenden.

**size** `string`

Generierung: Standard `2K`, mit Auflösungsstufe, Seitenverhältnis oder exakten Pixelmaßen. Zerlegung: Standard `auto`; nur `1K` / `1.5K` / `2K` / `auto`.

Bei der Bildgenerierung entspricht `size: "auto"` der Stufe `2K`. Ein Seitenverhältnis ohne `resolution` verwendet ebenfalls `2K`. Bei exakten Pixelmaßen `resolution` weglassen und positive ganze Zahlen für Breite und Höhe verwenden.

**resolution** `string`

Bei der Generierung: `1K` / `1.5K` / `2K` zusammen mit einem Seitenverhältnis in `size`. Bei der Zerlegung ist dies ein Plattformalias für `size`: `size` hat Vorrang, andernfalls gilt `resolution`; fehlen beide, gilt `auto`. Erlaubt sind `1K` / `1.5K` / `2K` / `auto`. Verhältnisse oder Pixelmaße werden synchron mit HTTP 400 abgelehnt. Kein `3K` / `4K`.

**background** `string`

Generierung: `auto` (Standard), `transparent` oder `opaque`. Transparenz ist sowohl mit Text als auch mit Referenzbildern möglich. Sie erfordert PNG und ist mit `output_format: "jpeg"` unvereinbar. Bei der Zerlegung das Feld vollständig weglassen, auch `auto`.

**output\_format** `string` (default: png)

`png` (Standard) oder `jpeg`. Bei der Zerlegung betrifft dies nur das Basisbild; extrahierte Ebenen sind immer transparente PNGs.

**n** `integer`

Nur `1`. Die Generierung liefert ein Bild pro Anfrage. Die Anzahl bei der Zerlegung wird über `layer_decomposition_options.max_images` gesteuert.

**watermark** `boolean` (default: false)

Optionales Flag zum Hinzufügen eines Wasserzeichens.

**optimize\_prompt\_options** `object`

Nur `{"mode":"standard"}` wird unterstützt. Auch ohne diesen Parameter aktiviert der vorgelagerte Anbieter standardmäßig `standard`; die Optimierung lässt sich in Seedream 5.5 nicht abschalten. `disabled` / `none` / `off` werden vom Anbieter mit HTTP 400 und `must be one of: standard` abgelehnt. `fast` lehnt die Plattform sofort mit HTTP 400 ab.

**layer\_decomposition** `boolean`

`true` zerlegt ein Bild in ein Basisbild und transparente Ebenen. Genau ein Eingabebild und kein `background` erforderlich. `output_format` betrifft nur das Basisbild.

**layer\_decomposition\_options** `object`

Nur mit `layer_decomposition: true` zulässig, andernfalls HTTP 400.

**Anfrageparameter**

**max\_images** `integer` (default: 30)

Ganzzahl von `2` bis `100`, Standard `30`. Obergrenze aller Ausgabebilder einschließlich Basisbild; keine garantierte Anzahl.

**text\_recognition** `boolean` (default: false)

Optionaler boolescher Wert. `true` fordert Rich-Text-OCR für Textebenen an. `text_recognition` kann nur bei erkennbarer regulärer Schrift erscheinen.

Bei aktivierter OCR kann ein mitgesendeter `prompt` dazu führen, dass keine Texterkennung zurückgegeben wird. Wenn OCR Vorrang hat, versuchen Sie es ohne Zerlegungs-Prompt. Ergebnisse sind trotzdem nicht garantiert und bleiben optionale Felder.

## Größenangaben

| Format | Beispiel | Regeln |
| - | - | - |
| Auflösungsstufe | `"size": "2K"` | `1K` / `1.5K` / `2K`; Standard `2K`. Das Modell wählt das Verhältnis anhand des Prompts. |
| Seitenverhältnis + Stufe | `"size": "16:9", "resolution": "1.5K"` | Nur Generierung. Verhältnisse siehe unten; auch `16x9` ist gültig. |
| Exakte Pixelmaße | `"size": "2048x1152"` | Nur Generierung. Gesamtpixel: 921.600–4.624.220; Breite/Höhe: 1/16–16. |

Verhältnisse: `1:1`, `4:3`, `3:4`, `16:9`, `9:16`, `3:2`, `2:3`, `21:9`, `2:1`, `1:2`.

Die Grenzen betreffen Pixelfläche und Seitenverhältnis. Die Zerlegung akzeptiert nur Auflösungsstufen oder `auto`, keine Verhältnisse oder exakten Pixelmaße.

### Ausgabegrößen bei der Zerlegung

* Vorrang: `size` → `resolution` → `auto`. `resolution` ist ein Plattformalias; an den Anbieter geht nur `size`. `size: "1K"` zusammen mit `resolution: "2K"` ergibt `1K`; allein `resolution: "1.5K"` ergibt `1.5K`.

* Bei `1K` / `1.5K` / `2K` werden Basisbild und jede Ebene in der gewählten Stufe ausgegeben, jeweils mit ihrem eigenen Seitenverhältnis. Ein gemessenes `1K`-Basisbild hatte `840×1248` Pixel, jede Ebene ebenfalls etwa 1,05 Millionen Pixel. Dies sind Beispiele, keine festen Maße.

* `auto` verwendet die ursprünglichen Eingabemaße, vergrößert Eingaben unter `1K` auf `1K` und verkleinert Eingaben über `2K` auf `2K`.

## Anfragebeispiele

### Bildbearbeitung und Referenzfusion

```bash theme={null}
curl --request POST \
  --url https://api.apimart.ai/v1/images/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "seedream-5-5",
  "prompt": "Combine the product in the first image with the setting in the second image",
  "image_urls": ["https://example.com/product.png", "https://example.com/setting.jpg"],
  "size": "16:9",
  "resolution": "1.5K",
  "output_format": "png"
}'
```

### Ebenenzerlegung mit Text-OCR

Diese Anfrage liefert höchstens 10 Bilder einschließlich Basisbild. `prompt` ist optional; `background` weglassen. Die Bild-URL durch eine erreichbare Datei ersetzen.

```bash theme={null}
curl --request POST \
  --url https://api.apimart.ai/v1/images/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "seedream-5-5",
  "image_urls": ["https://example.com/poster.png"],
  "layer_decomposition": true,
  "layer_decomposition_options": {
    "max_images": 10,
    "text_recognition": true
  },
  "size": "1K"
}'
```

## Aufgabe abfragen

Den [Aufgabenstatus](https://docs.apimart.ai/de/api-reference/tasks/status.md) in den ersten 30 Sekunden alle 3 Sekunden, danach alle 5–10 Sekunden abfragen. Die Zerlegung kann mehrere Minuten dauern; der Server wartet höchstens 13 Minuten. `task_id` speichern und bis zum Endzustand abfragen, ohne die Generierung erneut einzureichen.

```bash theme={null}
curl --request GET \
  --url 'https://api.apimart.ai/v1/tasks/task_example_seedream55' \
  --header 'Authorization: Bearer <token>'
```

`data.status`: `pending` / `processing` bedeutet laufend, `completed` erfolgreich. Bei `failed` steht die Ursache in `data.error.message`; die Kosten werden automatisch erstattet. Bild-URLs stehen in `data.result.images[].url[]`.

> [!WARNING]
>
> Ergebnisbilder werden **3 Tage** gespeichert; laden Sie sie rechtzeitig herunter. Auch Aufgabenprotokolle bleiben nur 3 Tage erhalten und lassen sich danach nicht mehr über `task_id` abfragen.
>
> `data.result.images[].expires_at` liefert derzeit einen Unix-Zeitstempel in Sekunden für Aufgabenabschluss + 24 Stunden. Diese konservative Angabe liegt vor der tatsächlichen Löschung. Verwenden Sie sie nicht zur Berechnung der tatsächlichen Aufbewahrungsdauer oder eines Lösch-Countdowns.

## Ebenenergebnisse und OCR

Das Beispiel veranschaulicht die Struktur und ist kein aufgezeichneter Modelllauf. Maße, Koordinaten und Text sind Beispiele. Metadaten können fehlen.

```json theme={null}
{
  "code": 200,
  "data": {
    "id": "task_example_seedream55",
    "status": "completed",
    "progress": 100,
    "completed": 1794302642,
    "result": {
      "images": [
        {
          "url": ["https://example.com/base.png", "https://example.com/title.png"],
          "sizes": ["840x1248", "1512x702"],
          "output_formats": ["png", "png"],
          "backgrounds": ["opaque", "transparent"],
          "expires_at": 1794389042,
          "layer_decomposition": true,
          "layers": [
            {
              "z_index": 0,
              "size": "840x1248",
              "output_format": "png",
              "background": "opaque"
            },
            {
              "z_index": 1,
              "size": "1512x702",
              "output_format": "png",
              "background": "transparent",
              "name": "Sale title",
              "description": "Printed sale title",
              "bounding_box": {
                "absolute": [84, 156, 756, 468],
                "normalized": [100, 125, 900, 375]
              },
              "text_recognition": {
                "text": "SUMMER SALE",
                "lines": [
                  {
                    "bounding_box": {
                      "absolute": [126, 156, 714, 468],
                      "normalized": [150, 125, 850, 375]
                    },
                    "runs": [
                      {
                        "text": "SUMMER SALE",
                        "style": {
                          "similar_font_family": "Arial",
                          "foreground_color": "#222222",
                          "bold": true,
                          "italic": false,
                          "underline": false,
                          "strikethrough": false,
                          "shadow": false,
                          "translucent": false
                        }
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
      ]
    }
  }
}
```

In jedem `data.result.images[]` entsprechen sich `url`, `sizes`, `output_formats`, `backgrounds` und `layers` über den Index. Metadatenarrays können fehlen, wenn ihre Länge nicht mit `url` übereinstimmt.

| Feld | Beschreibung |
| - | - |
| `url[]` | Bild-URLs. Im Ebenenmodus ist Index 0 das Basisbild, danach folgen die Ebenen. Dateien zeitnah herunterladen und speichern. |
| `sizes[]` / `output_formats[]` | Tatsächliche Größe und Format jedes Bildes. |
| `backgrounds[]` | Tatsächlicher Hintergrund: `opaque` / `transparent`. Bei `background: "auto"` den Rückgabewert verwenden. |
| `expires_at` | Derzeit ein Unix-Zeitstempel für Aufgabenabschluss + 24 Stunden (86400 Sekunden). Die konservative Angabe entspricht nicht der tatsächlichen Bildlöschung und darf nicht als Lösch-Countdown verwendet werden. |
| `layer_decomposition` | Ob das Ergebnis eine Ebenenzerlegung ist. |
| `layers[i].z_index` | Stapelreihenfolge, Basisbild bei 0. In aufsteigender Reihenfolge zusammensetzen. |
| `layers[i].background` | Basisbild: `opaque`; extrahierte Ebenen: `transparent`. |
| `layers[i].name` / `description` | Optionaler Ebenenname und Beschreibung. |
| `layers[i].bounding_box` | `absolute`: `[left, top, right, bottom]` in Pixeln des Basisbildes. `normalized`: derselbe Rahmen auf 0–1000 normiert. Beim Basisbild nicht vorhanden. |
| `layers[i].text_recognition` | Nur bei aktivierter OCR und erkannter regulärer Schrift möglich; fehlt bei Zierschrift, Handschrift und Ebenen ohne Text. |

Absolute Koordinaten: `x=left`, `y=top`, `w=right-left`, `h=bottom-top`. Für eine Zeichenfläche mit `W × H` normalisierte Koordinaten so umrechnen:

```text theme={null}
x = left / 1000 * W
y = top / 1000 * H
w = (right - left) / 1000 * W
h = (bottom - top) / 1000 * H
```

Ebenendateien werden unabhängig in der gewählten Stufe ausgegeben und können andere Maße als ihre `bounding_box` haben. Zum Zusammensetzen auf die Rahmenmaße `w × h` skalieren und bei `(x, y)` platzieren. Dateipixel nicht direkt als Basisbildkoordinaten verwenden.

### Texterkennungsfelder

`text_recognition` folgt der OCR-Struktur des vorgelagerten Modells. Die Plattform gibt Felder wie `text`, `lines`, `runs` und `style` unverändert weiter.

| Feld | Beschreibung |
| - | - |
| `text` | Gesamter Ebenentext, Zeilen durch `\n` getrennt. |
| `lines[].bounding_box` | Zeilenrahmen im Koordinatensystem des Basisbildes. |
| `lines[].runs[]` | Textabschnitte mit unterschiedlichem Stil in einer Zeile, jeweils mit `text` und `style`. |
| `runs[].style.similar_font_family` | Ähnlichste erkannte Schriftfamilie, sonst `unknown`. |
| `runs[].style.foreground_color` | Textfarbe als `#RRGGBB`. |
| `runs[].style.bold` / `italic` / `underline` / `strikethrough` / `shadow` / `translucent` | Vom Modell geschätzte boolesche Stilmerkmale; Abweichungen sind möglich. |

OCR und Schriftinformationen unterstützen Anzeige, Kopieren und Bearbeitung, können aber vom Original abweichen. Ebenenbilder sind auch ohne OCR nutzbar.

## Abrechnung

Ausgabebilder und Eingabereferenzen werden separat berechnet. **Jede Referenz ist kostenpflichtig, auch die erste** und das einzelne Eingabebild bei der Zerlegung.

* Jedes Ausgabebild wird anhand seiner tatsächlichen Pixelzahl eingestuft: bis einschließlich **2,610,000** Pixel niedrige Stufe, darüber hohe Stufe. `1K` / `1.5K` entsprechen der niedrigen, `2K` der hohen Stufe. Bei exakten Maßen gilt Breite × Höhe.
* Für Bildgenerierung wird der gewählte Ausgabepreis plus Referenzanzahl × Eingabepreis reserviert. Ohne `size` oder mit `auto` gilt die Reservierung für `2K`.
* Zerlegung reserviert `max_images` × Preis der Ausgabestufe **plus ein Eingabebild**. `max_images` ist standardmäßig 30 einschließlich Basis; tatsächlich können weniger Bilder entstehen.
* Für Zerlegung gilt das wirksame `size`, sonst `resolution`: `1K` / `1.5K` reservieren niedrig, `2K` / `auto` hoch. Ohne beide gilt `auto` mit hoher Reservierung.
* Abgerechnet werden tatsächliche Ausgabeanzahl, Pixelstufe jedes Bildes und Eingabeanzahl; Differenzen werden erstattet oder nachberechnet. Basis und jede Ebene zählen einzeln. Nicht alle Ausgaben pauschal nach der angeforderten Stufe abrechnen. Fehlgeschlagene Aufgaben werden vollständig erstattet.

Siehe [Modellpreise](https://apimart.ai/pricing).

## Häufige Parameterfehler

Die Liste umfasst Plattform- und Anbieterprüfungen. Bei Einreichungsfehlern `error.message`, bei asynchronen Aufgabenfehlern `data.error.message` lesen.

| Fehlerauszug | Lösung |
| - | - |
| `does not support optimize_prompt_options.mode=fast` | Die Plattform liefert synchron HTTP 400. Nur `standard` ist gültig; ohne Angabe bleibt die Optimierung aktiv. |
| `must be one of: standard` | HTTP 400 vom Anbieter: `disabled` / `none` / `off` werden nicht unterstützt; Abschalten ist nicht möglich. |
| `only supports background auto, transparent or opaque` | `auto`, `transparent` oder `opaque` verwenden. |
| `cannot combine background=transparent with output_format=jpeg` | Für Transparenz `output_format: "png"` verwenden. |
| `does not accept background when layer_decomposition=true` | Bei Zerlegung `background` einschließlich `auto` entfernen. |
| `layer_decomposition_options requires layer_decomposition=true` | Das Objekt nur im Zerlegungsmodus senden. |
| `layer_decomposition_options.max_images must be within [2, 100]` | `max_images`: Ganzzahl 2–100, inklusive Basisbild. |
| `invalid layer_decomposition_options` | Ganzzahliges `max_images`, keine Zeichenfolge oder Dezimalzahl; boolesches `text_recognition`. |
| `with layer_decomposition=true requires exactly 1 input image` | Genau ein Eingabebild für die Zerlegung angeben. |
| `only supports size 1K, 1.5K, 2K or auto` | Bei Zerlegung gilt zuerst `size`, sonst `resolution`. Nur `1K` / `1.5K` / `2K` / `auto`; Verhältnisse oder Pixelmaße führen synchron zu HTTP 400. |
| `` `n` must be 1 `` | `n` auf `1` setzen; keine Stapelgenerierung. |
| `does not support stream` / `does not support tools` | `sequential_image_generation`, `stream` und `tools` entfernen. |
| `supports up to 10 reference images` | Höchstens 10 Referenzbilder angeben. |
| `reference image too large for seedream-5-5` | Je Referenz höchstens 30 MiB und insgesamt 36 Millionen Pixel. Vor dem Wiederholen komprimieren oder verkleinern. |
| `does not support size` / `requires total pixels` / `requires aspect ratio` | Pixelzahl, Seitenverhältnis und Größenangabe prüfen. 3K / 4K sind nicht unterstützt. |
| `` `prompt` parameter is required `` | Bildgenerierung benötigt einen Prompt. Nur bei Zerlegung darf er fehlen. |

## Gründe für fehlgeschlagene Aufgaben

Bei `data.status = failed` die Felder `data.error.message` und `data.error.reason` auswerten. Kosten werden automatisch erstattet. Fehlt `reason` oder ist der Wert unbekannt, `message` als Rückfall verwenden.

| `data.error.reason` | Maßnahme |
| - | - |
| `content_policy_violation` | Eingabe oder Ausgabe bestand die Inhaltsprüfung nicht. Prompt oder Bilder ändern. |
| `invalid_parameter` / `unsupported_option` | Nicht unterstützter Parameter oder Kombination. Anfrage anpassen. |
| `invalid_media` | Beschädigtes oder nicht unterstütztes Eingabebild. Prüfen und konvertieren. |
| `media_unreachable` | Bild-URL nicht erreichbar. Öffentlichen Zugriff prüfen oder erneut hochladen. |
| `generation_timeout` | Zeitüberschreitung bei der Generierung. Später wiederholen. |
| `service_unavailable` | Dienst vorübergehend ausgelastet. Später wiederholen. |
| `delivery_failed` / `internal_error` / `unknown_error` | Auslieferungs- oder interner Plattformfehler. Meldung beachten und später wiederholen. |


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