> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Referenzen und Assets

> **Note**
>
> **Anleitung** · Setzt voraus, dass Sie den [Schnellstart zu Image & Video ](/docs/de/eleven-api/guides/cookbooks/image-and-video) abgeschlossen haben.

## Überblick

Die meisten Image-&-Video-Modelle akzeptieren Medien zusammen mit dem Prompt: ein erstes Bild für ein Video, Bilder zum
Bearbeiten oder Audio zum Lippensynchronisieren. Jedes Medienfeld in der API verwendet ein Referenzobjekt statt
Rohdaten in einem festen Format. Jede Referenz hat einen `type`, der angibt, woher das Medium stammt.

| `type`          | Verweist auf                                                          | Felder                        |
| --------------- | --------------------------------------------------------------------- | ----------------------------- |
| `generation`    | Die Ausgabe einer anderen Generierung, abgeschlossen oder noch aktiv. | `generation_id`               |
| `asset`         | Eine in die Assets-API hochgeladene Datei.                            | `asset_id`                    |
| `inline_base64` | Direkt im Request-Body kodierte Medien.                               | `content_base64`, `mime_type` |

Die drei Arten sind überall austauschbar, wo eine Referenz akzeptiert wird. Dasselbe Feld kann also in
einem Request eine Generierung und im nächsten ein hochgeladenes Asset verwenden.

## Eine Generierung mit der nächsten verketten

Eine `generation`-Referenz muss nicht auf eine abgeschlossene Generierung verweisen. Senden Sie die Bildgenerierung,
entnehmen Sie die ID aus der Antwort und übergeben Sie sie direkt an den Video-Request, ohne zu warten: Die
API reiht das Video hinter dem Bild ein und startet es, sobald das Bild fertig ist. Zwischen den beiden Aufrufen
wird nichts hochgeladen.

Setzen Sie `webhook` für die letzte Generierung in der Kette, müssen Sie überhaupt nicht warten. Beide Aufrufe
kehren zurück, sobald ihre Generierung eingereiht ist, der gesamte Graph wird serverseitig ausgeführt und Ihr Endpoint
wird aufgerufen, wenn die letzte Generierung einen Endstatus erreicht.

```python maxLines=0
from elevenlabs import (
    ImageGenerationRequest_Gemini3ProImage,
    ImageReference_Generation,
    VideoGenerationRequest_Veo31FastGenerate001,
    WebhookTarget_All,
)

still = elevenlabs.flows.image.create(
    request=ImageGenerationRequest_Gemini3ProImage(
        prompt="A lighthouse on a cliff at dawn, heavy fog rolling in from the sea",
        aspect_ratio="16:9",
    )
)

# `still` is still pending here. Submitting now queues the video behind it.
clip = elevenlabs.flows.video.create(
    request=VideoGenerationRequest_Veo31FastGenerate001(
        prompt="The fog thickens and the beam sweeps across the water",
        start_frame=ImageReference_Generation(generation_id=still.id),
        duration_secs=8,
        webhook=WebhookTarget_All(),
    )
)

print(clip.id)
```

```typescript maxLines=0
const still = await elevenlabs.flows.image.create({
  modelId: "gemini-3-pro-image",
  prompt: "A lighthouse on a cliff at dawn, heavy fog rolling in from the sea",
  aspectRatio: "16:9",
});

// `still` is still pending here. Submitting now queues the video behind it.
const clip = await elevenlabs.flows.video.create({
  modelId: "veo-3.1-fast-generate-001",
  prompt: "The fog thickens and the beam sweeps across the water",
  startFrame: { type: "generation", generationId: still.id },
  durationSecs: 8,
  webhook: { type: "all" },
});

console.log(clip.id);
```

Nur die letzte Generierung benötigt `webhook`. Wenn Sie ihn auch für das Bild setzen, wird zusätzlich ein Ereignis für
das Zwischenergebnis ausgeliefert. Das ist für Fortschrittsmeldungen nützlich, aber nicht nötig, um die
Kette auszuführen. Wie an anderer Stelle erfordert das Feld einen Webhook, der Generierungsereignisse abonniert hat;
unter [Image-&-Video-Webhooks](/docs/de/eleven-api/guides/how-to/image-and-video/webhooks) erfahren Sie, wie Sie einen einrichten.

Ohne Endpoint für Callbacks lassen Sie `webhook` weg und pollen stattdessen das Ende der Kette. Das
Zwischenbild muss weiterhin nicht separat abgefragt werden — warten Sie einmal auf die letzte Generierung, im
Intervall für ihre Modalität, bei Video höchstens einmal alle 10 Sekunden. Siehe [Richtlinien zum Polling](/docs/de/eleven-api/guides/cookbooks/image-and-video#polling-guidelines).

```python
import time

while True:
    result = elevenlabs.flows.video.get(clip.id)
    if result.status in ("completed", "failed"):
        break
    time.sleep(10)
```

```typescript
let result = await elevenlabs.flows.video.get(clip.id);
while (result.status === "pending" || result.status === "generating") {
  await new Promise((resolve) => setTimeout(resolve, 10000));
  result = await elevenlabs.flows.video.get(clip.id);
}
```

Eine Generierung, die auf noch nicht abgeschlossene Arbeit verweist, wird sofort erstellt und bleibt in `pending`, bis
alles, worauf sie verweist, abgeschlossen ist. Zum Starten ist keine weitere Aktion erforderlich. Ketten
können beliebig tief und breit sein — eine Generierung kann auf mehrere Referenzen warten, die jeweils selbst noch
warten — sodass ein ganzer Graph in einem Durchgang eingereicht und nur an seinen Endpunkten abgefragt werden kann. Die
Wartezeit zählt nicht zum Timeout der Generierung.

Wenn eine referenzierte Generierung fehlschlägt, wird die abhängige nie ausgeführt: Sie schlägt mit dem Grund `dependency_failed`
fehl und nimmt alles mit, was dahinter eingereiht ist. Für nichts in der abgebrochenen Kette werden Kosten berechnet — eine
bereits bezahlte Generierung wird erstattet, und eine Generierung, deren Preis von einer noch nicht vorhandenen referenzierten
Ausgabe abhängt, etwa eine Lippensynchronisierung mit Preis nach Dauer einer ausstehenden Audiogenerierung,
wird erst berechnet, wenn sie startet. Eine `generation_id`, die in Ihrem Workspace nicht existiert,
wird bereits beim Erstellungsaufruf abgelehnt. Ein Tippfehler wird also sofort erkannt statt als fehlgeschlagene
Generierung.

## Medien als Asset hochladen

Laden Sie eine Datei in die Assets-API hoch, wenn das Medium von außerhalb von ElevenLabs stammt und Sie es über mehrere
Generierungen hinweg wiederverwenden möchten. Assets gehören zum Workspace und bleiben bestehen, bis Sie sie löschen.

```python
from elevenlabs import ImageReference_Asset, VideoGenerationRequest_Veo31FastGenerate001

with open("lighthouse.png", "rb") as f:
    asset = elevenlabs.assets.create(asset=f, name="lighthouse.png")

print(asset.asset_id)

clip = elevenlabs.flows.video.create(
    request=VideoGenerationRequest_Veo31FastGenerate001(
        prompt="The beam sweeps across the water as the fog thickens",
        start_frame=ImageReference_Asset(asset_id=asset.asset_id),
    )
)
```

```typescript
import { createReadStream } from "fs";

const asset = await elevenlabs.assets.create({
  asset: createReadStream("lighthouse.png"),
  name: "lighthouse.png",
});

console.log(asset.assetId);

const clip = await elevenlabs.flows.video.create({
  modelId: "veo-3.1-fast-generate-001",
  prompt: "The beam sweeps across the water as the fog thickens",
  startFrame: { type: "asset", assetId: asset.assetId },
});
```

Die Upload-Antwort beschreibt das gespeicherte Asset:

```json
{
  "asset_id": "5xM2KqOnZyce22SPZ9d4",
  "name": "lighthouse.png",
  "mime_type": "image/png",
  "created_at_unix": 1721520000,
  "content_url": "https://storage.googleapis.com/assets/5xM2KqOnZyce22SPZ9d4"
}
```

`content_url` ist eine signierte URL, die etwa eine Stunde gültig ist, und während der Upload noch
verarbeitet wird `null`. Rufen Sie das Asset erneut ab, um eine neue URL zu erhalten.

> **Warning**
>
> Der Zugriff auf die Assets-API mit einem API-Key erfordert den Pro-Plan oder höher, dieselbe Stufe wie die
> Generierungsendpoints.

### Speicherlimits

Hochgeladene Assets zählen zum gesamten Speicherlimit des Workspace, das von Ihrem Plan abhängt:

| Plan       | Asset-Speicher |
| ---------- | -------------- |
| Pro        | 11 GB          |
| Scale      | 33 GB          |
| Business   | 111 GB         |
| Enterprise | 333 GB         |

Nur die von Ihnen hochgeladenen Dateien zählen zum Limit; generierte Ausgaben nicht. Ein Upload, der das
Limit des Workspace überschreiten würde, wird mit dem Fehler `asset_storage_limit_exceeded` abgelehnt, bevor
die Datei gelesen wird. Löschen Sie nicht mehr benötigte Assets, um Speicher freizugeben, oder wenden Sie sich an den
Support, um das Limit erhöhen zu lassen.

### Assets verwalten

Listen Sie Assets mit den neuesten zuerst auf, filtern Sie optional nach Namen und blättern Sie mit dem Cursor
aus der vorherigen Antwort durch die Ergebnisse. `page_size` akzeptiert 1 bis 100 und hat standardmäßig den Wert 30.

```python
page = elevenlabs.assets.list(page_size=20, search="lighthouse")

for asset in page.assets:
    print(asset.asset_id, asset.name, asset.mime_type)

if page.has_more:
    page = elevenlabs.assets.list(page_size=20, search="lighthouse", cursor=page.next_cursor)
```

```typescript
let page = await elevenlabs.assets.list({ pageSize: 20, search: "lighthouse" });

for (const asset of page.assets) {
  console.log(asset.assetId, asset.name, asset.mimeType);
}

if (page.hasMore) {
  page = await elevenlabs.assets.list({
    pageSize: 20,
    search: "lighthouse",
    cursor: page.nextCursor,
  });
}
```

Rufen Sie ein einzelnes Asset anhand seiner ID ab oder löschen Sie es. Das Löschen eines Assets wirkt sich nicht auf
Generierungen aus, die es bereits verwendet haben.

```python
asset = elevenlabs.assets.get("5xM2KqOnZyce22SPZ9d4")
elevenlabs.assets.delete("5xM2KqOnZyce22SPZ9d4")
```

```typescript
const asset = await elevenlabs.assets.get("5xM2KqOnZyce22SPZ9d4");
await elevenlabs.assets.delete("5xM2KqOnZyce22SPZ9d4");
```

## Medien inline übergeben

Eine `inline_base64`-Referenz enthält das Medium im Request-Body und vermeidet damit einen separaten Upload
für einmalige Eingaben. Kodieren Sie die Datei mit dem Standard-Base64-Alphabet und geben Sie ihren MIME-Typ an.

```python
import base64

from elevenlabs import ImageGenerationRequest_GptImage2, ImageReference_InlineBase64

with open("headshot.jpg", "rb") as f:
    encoded = base64.b64encode(f.read()).decode()

generation = elevenlabs.flows.image.create(
    request=ImageGenerationRequest_GptImage2(
        prompt="Replace the background with a softly lit studio backdrop",
        images=[
            ImageReference_InlineBase64(
                content_base64=encoded,
                mime_type="image/jpeg",
            )
        ],
    )
)
```

```typescript
import { readFile } from "fs/promises";

const encoded = (await readFile("headshot.jpg")).toString("base64");

const generation = await elevenlabs.flows.image.create({
  modelId: "gpt-image-2",
  prompt: "Replace the background with a softly lit studio backdrop",
  images: [
    {
      type: "inline_base64",
      contentBase64: encoded,
      mimeType: "image/jpeg",
    },
  ],
});
```

> **Warning**
>
> Inline-Medien werden als temporäres Asset ohne garantierte Aufbewahrung gespeichert und können gelöscht werden, sobald
> die Generierung abgeschlossen ist. Laden Sie die Datei stattdessen in die Assets-API hoch, wenn Sie dieselbe Eingabe
> mehr als einmal referenzieren müssen.

Inline-Inhalte sind nach dem Dekodieren auf 25 MB pro Referenz begrenzt. Größere Dateien gehören in die Assets-
API, die deutlich größere Uploads akzeptiert und nicht den Base64-Größenaufschlag verursacht. Jede Modalität
akzeptiert eine feste Auswahl an MIME-Typen:

| Referenz | Akzeptierte `mime_type`                                             |
| -------- | ------------------------------------------------------------------- |
| Bild     | `image/jpeg`, `image/png`, `image/webp`, `image/heic`, `image/heif` |
| Audio    | `audio/mpeg`, `audio/wav`                                           |
| Video    | `video/mp4`, `video/quicktime`, `video/webm`                        |

## Referenzfelder nach Modell

Referenzfelder sind nach der Rolle benannt, die das Medium spielt. `start_frame` und `end_frame` sind einzelne
Bilder, die ein Video begrenzen. `image` und `audio` sind die erforderlichen Eingaben eines Lippensynchronisierungsmodells,
und die bloßen Pluralformen `images`, `videos` und `audios` sind frei verwendbares Referenzmaterial, auf das das Modell zurückgreift.

Welche Felder ein Modell akzeptiert und welche Kombinationen gültig sind, unterscheidet sich je nach Modell. Ein `end_frame`
erfordert immer einen `start_frame`. Bei Verletzung einer Einschränkung wird ein Validierungsfehler mit Angabe des
betroffenen Feldes zurückgegeben. Die Generierung startet dann nicht und wird nicht berechnet.

### Veo 3.1

Beide Veo-Modelle akzeptieren `start_frame`, `end_frame` und bis zu drei Einträge in `images`. Anders als bei anderen
Modellen enthält jeder Eintrag in `images` sowohl die Referenz als auch die Rolle, die sie spielt:

```json
{
  "images": [
    {
      "image": { "type": "asset", "asset_id": "5xM2KqOnZyce22SPZ9d4" },
      "role": "subject"
    },
    {
      "image": { "type": "asset", "asset_id": "7pQ4LnBvXkR2mT9wYcHd" },
      "role": "style"
    }
  ]
}
```

Eine `subject`-Referenz platziert das Motiv oder Szenenelemente des Bildes im Video; eine `style`-
Referenz überträgt dessen visuellen Stil. Referenzbilder können nicht mit `start_frame` oder
`end_frame` kombiniert werden und erfordern eine Dauer von acht Sekunden.

### Seedance

> **Warning**
>
> ByteDance-Modelle sind standardmäßig deaktiviert und erfordern vor der Nutzung eine ausdrückliche Genehmigung. Enterprise-
> Kunden können sich an den Support wenden, um Zugriff anzufordern.

Die drei Seedance-2.0-Stufen akzeptieren `start_frame`, `end_frame`, bis zu 9 `images`, bis zu 3 `videos`
und bis zu 3 `audios`, vorbehaltlich dieser Einschränkungen:

* Referenzen können nicht mit `start_frame` oder `end_frame` kombiniert werden.
* Referenz-Audio erfordert mindestens ein Referenzbild oder -video, etwa um Lippensynchronisierung zu steuern.
* Die Gesamtzahl der Referenzdateien darf 12 nicht überschreiten.

Seedance 2.5 erhöht die Obergrenzen auf 30 `images`, 10 `videos` und 10 `audios` ohne Gesamtlimit
und hebt die Regel auf, dass Referenz-Audio ein begleitendes Bild oder Video benötigt. Dadurch wird reine Audioeingabe
akzeptiert. Referenzen können weiterhin nicht mit `start_frame` oder `end_frame` kombiniert werden.

### GPT Image

Die GPT-Image-Modelle akzeptieren eine `mask` zusammen mit `images`. Vollständig transparente Bereiche der Maske markieren,
wo das erste Referenzbild bearbeitet werden darf. Eine Maske ohne Referenzbilder wird abgelehnt.

## Nächste Schritte

#### [Webhooks](/docs/de/eleven-api/guides/how-to/image-and-video/webhooks)

Erhalten Sie das Ergebnis einer Generierung, statt es abzufragen.

#### [Image-&-Video-Überblick](/docs/de/overview/capabilities/image-video)

Vergleichen Sie Modellfunktionen, unterstützte Formate und Verfügbarkeit.

#### [API-Referenz](/docs/de/api-reference/flows/image/create)

Entdecken Sie die Endpoints für Bilder, Videos und Assets.