

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Generierung kreativer Inhalte mit Amazon Nova
<a name="content-generation"></a>

**Anmerkung**  
Diese Dokumentation bezieht sich auf Amazon Nova Version 1. Amazon Nova 2 ist jetzt mit neuen Modellen und erweiterten Funktionen erhältlich. Neue Funktionen und Aktualisierungen der Dokumentation werden im Amazon Nova 2-Benutzerhandbuch veröffentlicht. Weitere Informationen finden Sie unter [Was ist neu in Amazon Nova 2.](https://docs.aws.amazon.com/nova/latest/nova2-userguide/whats-new.html)

Mit Amazon Nova können Sie originelle Bilder und Videos in einer Vielzahl von Stilen erstellen. Die folgenden Abschnitte beschreiben die Anforderungen und den Prozess, die für die Erstellung von Bildern oder Videos erforderlich sind. Eine Anleitung zum Prompt-Engineering finden Sie unter [Bewährte Methoden für Prompts in Amazon Nova Canvas](prompting-image-generation.md) und [Bewährte Methoden für die Promptverwendung in Amazon Nova Reel](prompting-video-generation.md). 

**Topics**
+ [Bilder mit Amazon Nova Canvas generieren](image-generation.md)
+ [Videos mit Amazon Nova Reel generieren](video-generation.md)

# Bilder mit Amazon Nova Canvas generieren
<a name="image-generation"></a>

Mit dem Amazon-Nova-Canvas-Modell können Sie mithilfe von Text-Prompts realistische Bilder in Studioqualität generieren. Sie können Amazon Nova Canvas für text-to-image Bildbearbeitungsanwendungen verwenden.

Amazon Nova Canvas unterstützt die folgenden Features:
+ Text-to-image (T2I) -Generierung — Geben Sie eine Texteingabeaufforderung ein und generieren Sie ein neues Bild als Ausgabe. Das generierte Bild erfasst die in der Text-Prompt beschriebenen Konzepte.
+ Bildkonditionierung – Verwendet ein eingegebenes Referenzbild, um die Bilderzeugung zu steuern. Das Modell erzeugt ein Ausgabebild, das mit dem Layout und der Komposition des Referenzbildes übereinstimmt und gleichzeitig dem Text-Prompt folgt.
+ Farbgesteuerte Inhalte – Sie können eine Liste mit Hex-Farbcodes zusammen mit einem Prompt bereitstellen. Es kann ein Bereich von 1 bis 10 Hex-Codes angegeben werden. Das zurückgegebene Bild enthält die vom Benutzer bereitgestellte Farbpalette.
+ Bildvariation: Verwendet 1 bis 5 Bilder und einen optionalen Prompts als Eingabe. Es generiert ein neues Bild, das Eigenschaften der Referenzbilder wie Stil, Farbpalette und Motiv übernimmt.
+ Inpainting – Verwendet ein Bild und eine Segmentierungsmaske als Eingabe (entweder vom Benutzer oder vom Modell geschätzt) und rekonstruiert den die Maske definierten Bereich. Verwenden Sie Inpainting, um maskierte Pixel durch neu generierten Inhalt zu ersetzen.
+ Outpainting – Verwendet ein Bild und eine Segmentierungsmaske als Eingabe (entweder vom Benutzer oder vom Modell geschätzt) und generiert neue Inhalte, die den maskierten Bereich nahtlos erweitern und so den Bildhintergrund effektiv ersetzen.
+ Hintergrundentfernung – Identifiziert automatisch mehrere Objekte im Eingabebild und entfernt den Hintergrund. Das Ausgabebild hat einen transparenten Hintergrund.
+ Motivkonsistenz – Motivkonsistenz wird durch Feinabstimmung des Modells mit Referenzbildern erreicht, um das ausgewählte Motiv (z. B. Haustier, Schuh oder Handtasche) in den generierten Bildern beizubehalten.
+ Inhaltsherkunft – Verwenden Sie öffentlich zugängliche Tools wie [Content Credentials Verify](https://contentcredentials.org/verify), um zu überprüfen, ob ein Bild mit Amazon Nova Canvas erstellt wurde. Damit wird angezeigt, dass das Bild generiert wurde, es sei denn, die Metadaten wurden entfernt.
+ Wasserzeichen – Fügt allen generierten Bildern ein unsichtbares Wasserzeichen hinzu, um die Verbreitung von Fehlinformationen zu reduzieren, den Schutz des Urheberrechts zu unterstützen und die Nutzung von Inhalten zu verfolgen. Die Wasserzeichen-Erkennung dient dazu, zu bestätigen, ob ein Bild von einem Amazon-Nova-Modell generiert wurde, das die Existenz dieses Wasserzeichens überprüft.


|  | Amazon Nova Canvas | 
| --- |--- |
| Modell-ID | Amazon. nova-canvas-v1:0 | 
| Eingabemodalitäten | Text, Bild | 
| Ausgabemodalitäten | Image | 
| Max. Prompt-Länge | 1024 Zeichen | 
| Max. Ausgabeauflösung (Generierungsaufgaben) | 4,19 Millionen Pixel (d. h. 2 048x2 048, 2 816x1 536) | 
| Max. Ausgabeauflösung (Bearbeitungsaufgaben) | Muss alle der folgenden Bedingungen erfüllen:   4 096 Pixel an der längsten Seite   Seitenverhältnis zwischen 1:4 und 4:1   Gesamtpixelzahl von 4,19 Millionen oder weniger    | 
| Unterstützende Eingabebildtypen | PNG, JPEG | 
| Unterstützte Sprachen | Englisch | 
| Regionen | USA Ost (Nord-Virginia), Europa (Irland) und Asien-Pazifik (Tokio) | 
| Modell API aufrufen | Ja | 
| Feinabstimmung | Ja | 
| Bereitgestellter Durchsatz | Nein | 

**Topics**
+ [Bildgenerierung und -bearbeitung](image-gen-access.md)
+ [Virtuelles Anprobieren](image-gen-vto.md)
+ [Visuelle Stile](image-gen-styles.md)
+ [Anfrage- und Antwortstruktur für die Bildgenerierung](image-gen-req-resp-structure.md)
+ [Fehlerbehandlung](image-gen-errors.md)
+ [Codebeispiele](image-gen-code-examples.md)

# Bildgenerierung und -bearbeitung
<a name="image-gen-access"></a>

Amazon Nova Canvas ist über die Bedrock [InvokeModel API](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) verfügbar und unterstützt die folgenden Inferenzparameter und Modellantworten bei der Durchführung von Modellinferenzen.

**Topics**
+ [Format für Anfrage und Antwort bei der Bildgenerierung](#image-gen-req-resp-format)
+ [Eingabebilder für die Bilderzeugung](#image-gen-input-images)
+ [Maskenbilder](#image-gen-masking)
+ [Unterstützte Bildauflösungen](#image-gen-resolutions)

## Format für Anfrage und Antwort bei der Bildgenerierung
<a name="image-gen-req-resp-format"></a>

Wenn Sie mit dem Amazon Nova Canvas-Modell einen [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)Anruf tätigen, ersetzen Sie das `body` Feld der Anfrage durch das Format, das Ihrem Anwendungsfall entspricht. Alle Aufgaben haben ein gemeinsames `imageGenerationConfig`-Objekt, aber jede Aufgabe hat ein für diese Aufgabe spezifisches Parameterobjekt. Die folgenden Anwendungsfälle werden unterstützt: 


| Aufgabentyp-Wert | Aufgabenparameterfeld | Aufgabenkategorie | Description | 
| --- | --- | --- | --- | 
| TEXT\$1IMAGE nur mit Text | textToImageParams | Generation | Generieren Sie ein Bild mithilfe einer Text-Prompt. | 
| TEXT\$1IMAGE mit Bildkonditionierung | textToImageParams | Generation | Stellen Sie ein konditionierendes Eingabebild zusammen mit einem Text-Prompt bereit, um ein Bild zu generieren, das dem Layout und der Komposition des konditionierenden Bildes entspricht. | 
| COLOR\$1GUIDED\$1GENERATION | colorGuidedGenerationParams | Generation | Stellen Sie eine Liste mit Farbwerten im Hexadezimalformat (z. B. \$1FF9800) zusammen mit einer Texteingabeaufforderung und einem optionalen Referenzbild bereit, um ein Bild zu generieren, das der angegebenen Farbpalette entspricht. | 
| IMAGE\$1VARIATION | imageVariationParams | Generation | Geben Sie ein oder mehrere Eingabebilder an – mit oder ohne Text-Prompt –, um das generierte Bild zu beeinflussen. Kann verwendet werden, um den visuellen Stil des generierten Bildes zu beeinflussen (bei Verwendung mit einem Text-Prompt), um Variationen eines einzelnen Bildes zu generieren (bei Verwendung ohne Text-Prompt) und für andere kreative Effekte und Kontrollmöglichkeiten. | 
| INPAINTING | inPaintingParams | Bearbeitung | Bearbeiten Sie ein Bild, indem Sie den Bereich innerhalb einer maskierten Region bearbeiten. Kann zum Hinzufügen, Entfernen oder Ersetzen von Bildelementen verwendet werden. | 
| OUTPAINTING | outPaintingParams | Bearbeitung | Bearbeiten Sie ein Bild, indem Sie den Bereich außerhalb einer maskierten Region bearbeiten. Kann verwendet werden, um den Hintergrund hinter einem Motiv zu ersetzen. | 
| BACKGROUND\$1REMOVAL | backgroundRemovalParams | Bearbeitung | Entfernt automatisch den Hintergrund eines Bilds und ersetzt den Hintergrund durch transparente Pixel. Dies kann nützlich sein, wenn Sie das Bild später mit anderen Elementen in einer Bildbearbeitungsanwendung, einer Präsentation oder einer Website kombinieren möchten. Der Hintergrund kann auch ganz einfach durch benutzerdefinierten Code in eine einfarbige Fläche geändert werden. | 
| VIRTUAL\$1TRY\$1ON | virtualTryOnParams | Bearbeitung | Stellen Sie ein Quellbild und ein Referenzbild bereit und überlagern Sie ein Objekt aus dem Referenzbild mit dem Quellbild. Kann verwendet werden, um Kleidung und Accessoires an verschiedenen Models oder in verschiedenen Posen zu visualisieren, den Stil und das Aussehen eines Objekts, Artikels oder Kleidungsstücks zu verändern oder Stile und Designs von einem Objekt auf ein anderes zu übertragen.  | 

## Eingabebilder für die Bilderzeugung
<a name="image-gen-input-images"></a>

Bei vielen Aufgabentypen müssen ein oder mehrere Eingabebilder in die Anfrage aufgenommen werden. Jedes in der Anfrage verwendete Bild muss als Base64-Zeichenfolge codiert werden. Im Allgemeinen können Bilder im PNG- oder JPEG-Format vorliegen und müssen 8 Bit pro Farbkanal (RGB) aufweisen. PNG-Bilder können einen zusätzlichen Alphakanal enthalten, jedoch darf dieser Kanal keine transparenten oder durchscheinenden Pixel enthalten. Spezifische Informationen zu den unterstützten Abmessungen von Eingabebildern finden Sie unter [Unterstützte Bildauflösungen](#image-gen-resolutions).

Ein *Maskenbild* ist ein Bild, das den Bereich für Inpainting oder Outpainting angibt. Dieses Bild kann nur rein schwarze und rein weiße Pixel enthalten.

Bei Inpainting-Anfragen wird der Bereich, der schwarz gefärbt ist, *Maske* genannt und wird geändert werden. Der Rest des Maskenbilds darf nur rein weiße Pixel enthalten. Reinweiße Pixel kennzeichnen den Bereich außerhalb der Maske.

Bei Outpainting-Anfragen wird der Bereich, der weiß eingefärbt ist, vom Modell geändert.

Maskenbilder dürfen keine Pixel enthalten, die nicht rein schwarz oder rein weiß sind. Wenn Sie ein JPEG-Bild als Maske verwenden, muss es mit einer Qualität von 100 % komprimiert werden, um zu vermeiden, dass bei der Komprimierung nicht weiße oder nicht schwarze Pixel entstehen.

Beispiele für die Kodierung oder Dekodierung eines Bildes in eine bzw. aus einer Base64-Zeichenkette finden Sie in den [Codebeispielen](https://docs.aws.amazon.com/nova/latest/userguide/image-gen-code-examples.html).

## Maskenbilder
<a name="image-gen-masking"></a>

Wenn Sie ein Bild bearbeiten, können Sie mit einer Maske die zu bearbeitenden Bereiche definieren. Sie können eine Maske auf eine von drei Arten definieren:
+ `maskPrompt` – Verfassen Sie einen Text-Prompt in natürlicher Sprache, in der Sie die Teile des Bildes beschreiben, die maskiert werden sollen.
+ `maskImage` – Ein Schwarz-Weiß-Bild, bei dem rein schwarze Pixel den Bereich innerhalb der Maske und rein weiße Pixel den Bereich außerhalb der Maske darstellen.

  Bei Inpainting-Anfragen werden die schwarzen Pixel je nach Modell geändert. Bei Outpainting-Anfragen werden die weißen Pixel verändert.
+ `garmentBasedMask` – Eine bildbasierte Maske, die einen zu ersetzenden Bereich definiert, zusammen mit einigen begrenzten Gestaltungsoptionen.

Sie können ein Bildbearbeitungsprogramm verwenden, um Masken zu zeichnen, oder diese mit Ihrem eigenen benutzerdefinierten Code erstellen. Verwenden Sie andernfalls das maskPrompt-Feld, damit das Modell auf die Maske schließen kann.

## Unterstützte Bildauflösungen
<a name="image-gen-resolutions"></a>

Für eine Generierungsaufgabe kann jede beliebige Ausgangsauflösung festgelegt werden, sofern die folgenden Anforderungen erfüllt sind:
+ Jede Seite muss zwischen 320 und 4 096 Pixeln (einschließlich) liegen.
+ Jede Seite muss gleichmäßig durch 16 teilbar sein.
+ Das Seitenverhältnis muss zwischen 1:4 und 4:1 liegen. Das heißt, eine Seite darf nicht mehr als viermal so lang sein wie die andere Seite.
+ Die Gesamtpixelzahl muss weniger als 4 194 304 betragen.

Die meisten dieser Einschränkungen gelten auch für Eingabebilder. Die Seiten der Bilder müssen jedoch nicht gleichmäßig durch 16 teilbar sein.

# Virtuelles Anprobieren
<a name="image-gen-vto"></a>

*Virtuelle Anprobe* ist ein bildgesteuerter Anwendungsfall der Inpainting-Technik, bei dem die Inhalte eines Referenzbildes auf der Grundlage einer Maskenvorlage in ein Quellbild eingeblendet werden. Amazon Nova Canvas wurde für Kleidungsstücke, Accessoires, Möbel und ähnliche Objekte optimiert. Das Modell lässt sich auch auf andere Anwendungsfälle gut übertragen, beispielsweise auf das Hinzufügen eines Logos oder Textes zu einem Bild. 

Mit der API „Virtuelle Anprobe“ können Sie bis zu fünf Bilder generieren. Standardmäßig wird nur ein Bild generiert.

Um eine virtuelle Anprobe durchzuführen, müssen Sie drei Bilder bereitstellen:
+ *Quellbild* – Das Originalbild, das Sie bearbeiten möchten. Dies könnte beispielsweise ein Bild, eine Person oder ein Raum sein.
+ *Referenzbild* – Das Bild, das den Gegenstand, das Objekt oder den Artikel enthält, den Sie in das Quellbild einfügen möchten. Dies kann beispielsweise eine Jacke, eine Schüssel oder ein Sofa enthalten. Bei Kleidungsstücken kann das Referenzbild Kleidungsstücke mit oder ohne Körper enthalten und mehrere Produkte umfassen, die verschiedene Outfit-Komponenten darstellen (z. B. Hemden, Hosen und Schuhe in einem einzigen Bild).
+ *Maskenbild* – Das Bild, das definiert, welchen Teil der Quelle Sie ändern möchten. Ein Maskenbild ist ein Schwarz-Weiß-Bild, das verwendet wird, um zu definieren, welcher Teil des Quellbildes geändert werden soll. Schwarze Pixel kennzeichnen den Bereich des Quellbildes, der geändert werden soll, während weiße Pixel die Bereiche des Bildes anzeigen, die unverändert bleiben sollen. Sie können entweder Ihr eigenes Maskenbild bereitstellen oder das Modell anhand anderer von Ihnen angegebener Eingabeparameter eines erstellen lassen.

  Die Maskenbilder können bei Bedarf als Teil der Ausgabe zurückgegeben werden.

Hier finden Sie einige Beispiele zur Funktionsweise des Modells.

------
#### [ Upper body clothing ]

Die folgenden Bilder veranschaulichen, wie Amazon Nova ein Oberbekleidungsstück auf ein Model überlagert.


| Quellbild | Referenzbild | Ausgabe | 
| --- |--- |--- |
|  ![\[Ein Mann mit Sonnenbrille, der nach links blickt und ein blaues Hemd trägt.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/vto1_source.jpg)  |  ![\[Ein rosarotes Hemd mit Knöpfen.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/vto1_ref.jpg)  |  ![\[Ein Mann mit Sonnenbrille, der nach links blickt und ein rosarotes Hemd mit Knöpfen trägt.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/vto1_output.png)  | 

------
#### [ Couch in a room ]

Die folgenden Bilder veranschaulichen, wie Amazon Nova ein Sofa in einen Raum mit Möbeln einfügt.


| Quellbild | Referenzbild | Ausgabe | 
| --- |--- |--- |
|  ![\[Ein modernes graues Sofa aus der Mitte des Jahrhunderts in einem Raum, umgeben von weiteren Dekorationselementen.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/vto2_source.jpg)  |  ![\[Eine orangefarbene Couch vor weißem Hintergrund.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/vto2_ref.jpg)  |  ![\[Eine orangefarbene Couch in einem Raum, umgeben von anderen Dekorationen.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/vto2_output.png)  | 

------

Im Gegensatz zu anderen Amazon-Nova-Canvas-Aufgabentypen unterstützt die virtuelle Anprobe keine Text-Prompts oder negative Text-Prompts.

## Das Maskenbild definieren
<a name="image-gen-vto-mask"></a>

Sie können entweder direkt ein Maskenbild bereitstellen, indem Sie `maskType: "IMAGE"` angeben, oder das Modell es automatisch anhand von Hilfseingaben wie `maskType: "GARMENT"` oder `maskType: "PROMPT"` berechnen lassen.

Wenn ein Maskentyp von `"GARMENT"` angegeben wird, erstellt Amazon Nova Canvas eine kleidungsbewusste Maske auf der Grundlage eines von Ihnen angegebenen `garmentClass`-Eingabeparameterwerts. In den meisten Fällen ist eine der folgenden übergeordneten Bekleidungsklassen möglich:
+ `"UPPER_BODY"` – Erzeugt eine Maske mit voller Armlänge.
+ `"LOWER_BODY"` – Erzeugt eine Maske mit voller Beinlänge ohne Abstand zwischen den Beinen.
+ `"FOOTWEAR"` – Erzeugt eine Maske, die dem im Quellbild gezeigten Schuhprofil entspricht.
+ `"FULL_BODY"` – Erzeugt eine Maske, die der Kombination von `"UPPER_BODY"` und `"LOWER_BODY"` entspricht.

Sie können den `"PROMPT"`-Maskentyp verwenden, um mit natürlicher Sprache das Element im Quellbild zu beschreiben, das Sie ersetzen möchten. Dies ist nützlich für Szenarien, die nicht mit Bekleidung in Zusammenhang stehen. Dieses Feature nutzt dieselbe automatische Maskenfunktion, die im `"INPAINTING"`-Aufgabentyp über den Parameter `maskPrompt` vorhanden ist.

**Warnung**  
Mit dem Maskentyp `"PROMPT"` erstellte Masken passen sich genau an die Form des von Ihnen beschriebenen Objekts an. Dies kann in vielen Fällen zu Problemen führen, da das hinzugefügte Produkt möglicherweise nicht die gleiche Form oder Größe wie das zu ersetzende Produkt aufweist. Aus diesem Grund bietet die API für das viertuelle Anprobieren auch einen optionalen `maskShape`-Parameter, der auf `"BOUNDING_BOX"` gesetzt werden kann. Wir empfehlen, diese Einstellung (die Standardeinstellung) in den meisten Fällen zu verwenden, wenn Sie den Maskentyp `"PROMPT"` nutzen.

## Generieren neuer Posen, Hände oder Gesichter
<a name="image-gen-vto-exclusions"></a>

Sie können das Modell anweisen, die Pose, die Hände oder das Gesicht der Person im Quellbild beizubehalten oder neu zu generieren. Wenn Sie sich dafür entscheiden, diese Elemente beizubehalten, werden sie automatisch aus dem Maskenbild entfernt, unabhängig davon, welchen `maskType` Sie ausgewählt haben.

In den folgenden Situationen möchten Sie möglicherweise Pose, Hände oder Gesicht beibehalten:
+ Sie entwickeln eine Anwendung, mit der Endbenutzer ihre eigenen Masken zeichnen können. Durch die Beibehaltung dieser Features wird verhindert, dass Endbenutzer versehentlich Hände oder Gesicht in die Maske einbeziehen.
+ Sie verwenden `maskShape: BOUNDING_BOX`, möchten jedoch keine neuen Hände oder Gesichter generieren. Mit `preserveFace: ON` oder `preserveHands: ON` werden diese Features automatisch aus der Maske entfernt.
+ Sie verwenden `maskType:GARMENT` und `maskShape: BOUNDING_BOX` mit einem Model, das sich nicht in einer aufrechten Körperhaltung befindet. In diesem Fall kann der Maskenbegrenzungsrahmen das Gesicht überlappen und wir empfehlen die Verwendung von `preserveFace: ON`. 

Umgekehrt kann es in den folgenden Situationen sinnvoll sein, die Pose, die Hände oder das Gesicht neu zu generieren:
+ Bei Kleidungsstücken, die den Hals bedecken, kann `preserveFace: ON` einen so großen Teil des Halses aussparen, dass sich dies nachteilig auf das Ergebnis auswirkt.
+ Wenn das Model Schuhe mit hohen Absätzen trägt und das Referenzbild Schuhe mit flachen Absätzen zeigt oder umgekehrt. In diesem Fall führt die Beibehaltung der Körperhaltung zu unnatürlich aussehenden Ergebnissen.
+ Ebenso wie im vorherigen Beispiel kann das Erzeugen neuer Posen oder Handhaltungen beim Anprobieren von Handtaschen oder anderen Accessoires zu natürlicheren Ergebnissen führen.

## Stilmerkmale
<a name="image-gen-vto-styling"></a>

Mit dem Parameter `garmentStyling` können Sie bestimmte Stilmerkmale von Kleidungsstücken, die Sie beispielsweise in einem Fotoshooting vorfinden, beibehalten oder verändern. Amazon Nova Canvas kann beispielsweise das Design eines Hemdes so ändern, dass die Ärmel entweder hoch- oder heruntergekrempelt werden, oder es kann das Hemd so modifizieren, dass es eingesteckt ist oder nicht. Die folgenden Optionen sind verfügbar:
+ `"longSleeveStyle"` – Steuert, ob die Ärmel eines Langarmhemdes hoch- oder heruntergekrempelt werden.
  + `"SLEEVE_DOWN"` – Kann angewendet werden, wenn das Quellbild ein Langarmhemd (Ärmel hoch oder runter), ein Kurzarmhemd oder ein Hemd ohne Ärmel zeigt.
  + `"SLEEVE_UP"` – Kann angewendet werden, wenn das Quellbild ein Langarmhemd mit hochgekrempelten Ärmeln, ein Kurzarmhemd oder ein Hemd ohne Ärmel zeigt.
+ `"tuckingStyle"` – Steuert, ob ein Kleidungsstück für den Oberkörper in die Hose gesteckt oder locker getragen wird.
  + `"UNTUCKED"` – Kann unabhängig davon angewendet werden, ob das Hemd auf dem Ausgangsbild in die Hose gesteckt ist oder nicht.
  + `"TUCKED"` – Kann angewendet werden, wenn auf dem Quellbild das Hemd eingesteckt ist.
+ `"outerLayerStyle"` – Steuert, ob ein Kleidungsstück für den Oberkörper offen oder geschlossen getragen wird. Die Standardeinstellung ist `"CLOSED"`, was für die meisten Kleidungsstücke (wie Hemden und Pullover) geeignet ist. Bei Oberbekleidung wie Jacken gewährleistet die Einstellung dieses Werts auf `"OPEN"`, dass das ursprüngliche Kleidungsstück für den Oberkörper aus dem Quellbild beibehalten und das neue Oberbekleidungsstück darüber gelegt wird. Wenn Sie den Wert `"CLOSED"` für ein Oberbekleidungsstück verwenden, wird das Kleidungsstück möglicherweise nicht immer als geschlossen dargestellt. Dies liegt daran, dass ein Wert von `"CLOSED"` lediglich sicherstellt, dass jedes Oberbekleidungsstück im Ausgangsbild ersetzt wird, was gelegentlich dazu führen kann, dass eine offene äußere Schicht entsteht, unter der eine neue darunterliegende Schicht sichtbar wird.
  + `"CLOSED"`
  + `"OPEN"`

Weitere Informationen finden Sie unter den `garmentStyling`-Parametern in [Anfrage- und Antwortstruktur für die Bildgenerierung](image-gen-req-resp-structure.md).

## Bilder zusammenfügen
<a name="image-gen-vto-stitching"></a>

Mit der virtuellen Anprobe können Sie festlegen, wie Bilder zusammengefügt werden, um das Endergebnis zu erzeugen. Sie können sich zwischen `"BALANCED"`, `"SEAMLESS"` und `"DETAILED"` entscheiden. Jeder Zusammenführungsstil verfolgt einen anderen Ansatz, wie die Elemente zu einem endgültigen Bild zusammengefügt werden, wobei jeder Stil seine eigenen Vorteile und Nachteile aufweist.
+ `"BALANCED"` – Schützt alle nicht maskierten Pixel im Originalbild und stellt sicher, dass sie dem Original zu 100 % entsprechen. In bestimmten Fällen kann es zu einer geringfügigen Abweichung in der Farbe oder Textur des Ausgabebildes kommen, die sich als eine Art „Geisterbild“ der Maskenform darstellt. Dies tritt am wahrscheinlichsten auf, wenn die Person auf einem einfarbigen oder gleichmäßig strukturierten Hintergrund abgebildet ist. Um dies zu vermeiden, können Sie stattdessen den `"SEAMLESS"`-Stil verwenden.
+ `"SEAMLESS"` – Stellt sicher, dass im endgültigen Bild keine sichtbare Nahtstelle zwischen den maskierten und nicht maskierten Bildbereichen vorhanden ist. Der Nachteil besteht darin, dass sich alle Pixel im Bild geringfügig verändern und manchmal feine Details in den nicht maskierten Bereichen des Bildes verloren gehen.
+ `"DETAILED"` – Kann feine Details wie Logos und Text erheblich verbessern, insbesondere wenn der maskierte Bereich im Vergleich zum Gesamtbild relativ klein ist. Das Modell erreicht dies, indem es eine Inpainting-Bearbeitung an einer stark beschnittenen Version des Originalbildes mit höherer Auflösung durchführt, welche nur den maskierten Bereich enthält. Anschließend wird das Ergebnis wieder mit dem Originalbild zusammengeführt. Wie im `"BALANCED"`-Modus kann dies manchmal zu einer sichtbaren Naht führen.

# Visuelle Stile
<a name="image-gen-styles"></a>

Mit Amazon Nova Canvas können Sie Bilder in einer Vielzahl von vordefinierten Stilen generieren. Verwenden Sie für den `"TEXT_TO_IMAGE"`-Aufgabentyp den Parameter `style`, um einen vordefinierten visuellen Stil auszuwählen. Wählen Sie aus den folgenden verfügbaren Stilen:
+ `"3D_ANIMATED_FAMILY_FILM"` – Ein Stil, der an 3D-Animationsfilme erinnert. Mit realistischem Rendering und Figuren mit karikaturhaften oder übertriebenen körperlichen Merkmalen. Mit diesem Stil lassen sich Bilder erstellen, die sich auf Personen, Objekte oder Requisiten konzentrieren, sowie Bilder, die sich auf die Umgebung oder Kulisse sowohl in Innen- als auch in Außenbereichen konzentrieren.
+ `"DESIGN_SKETCH"` – Ein Stil, der sich durch handgezeichnete Strichzeichnungen ohne umfangreiche Verwaschungen oder Füllungen auszeichnet und nicht übermäßig verfeinert ist. Dieser Stil wird verwendet, um Konzepte und Ideen zu vermitteln. Er ist nützlich für Mode- und Produktdesignskizzen sowie für Architekturskizzen.
+ `"FLAT_VECTOR_ILLUSTRATION"` – Ein flächiger Illustrationsstil, der in der Geschäftskommunikation weit verbreitet ist. Er ist auch nützlich für Symbol- und ClipArt-Bilder.
+ `"GRAPHIC_NOVEL_ILLUSTRATION"` – Ein lebendiger Tinten-Illustrationsstil. Charaktere haben keine übertriebenen Gesichtszüge, wie es bei einigen anderen eher cartoonartigen Stilen der Fall ist.
+ `"MAXIMALISM"` – Hell, detailliert, auffällig und komplex mit starken Formen und reichhaltigen Details. Dieser Stil kann für eine Vielzahl von Motiven verwendet werden, beispielsweise für Illustrationen, Fotografie, Innenarchitektur, Grafikdesign oder Verpackungsdesign.
+ `"MIDCENTURY_RETRO"` – Spielt auf Grafikdesigntrends der 1940er bis 1960er Jahre an.
+ `"PHOTOREALISM"` – Realistischer Fotografie-Stil, einschließlich verschiedener Repertoires wie Stockfotografie, redaktionelle Fotografie, journalistische Fotografie und mehr. Dieser Stil zeichnet sich durch realistische Beleuchtung, Tiefenschärfe und Komposition aus, die zum jeweiligen Repertoire passen. Die häufigsten Motive sind Menschen, jedoch können auch Tiere, Landschaften und andere Naturmotive dargestellt werden.
+ `"SOFT_DIGITAL_PAINTING"` – Dieser Stil ist sorgfältiger ausgearbeitet und detaillierter als eine Skizze. Er beinhaltet Schattierung, Dreidimensionalität und Textur, die in anderen Stilen möglicherweise fehlen.

**Anmerkung**  
Amazon Nova Canvas ist nicht auf die Stile in dieser Liste beschränkt. Sie können viele andere visuelle Stile erzielen, indem Sie den `style`-Parameter weglassen und den gewünschten Stil in Ihrem Prompt beschreiben. Optional können Sie den `negativeText`-Parameter verwenden, um die Stilmerkmale weiter von unerwünschten Merkmalen abzugrenzen.

Die folgenden Bilder zeigen dasselbe Bild, generiert in jedem der zuvor beschriebenen Stile.

## Animierter 3D-Familienfilm
<a name="styles-collapsable1"></a>

![\[Das Bild zeigt einen Elefanten im 3D-Animationsfilmstil.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/3D_ANIMATED_FAMILY_FILM.png)


## Designskizze
<a name="styles-collapsable2"></a>

![\[Das Bild zeigt einen Elefanten im Stil einer Designskizze.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/DESIGN_SKETCH.png)


## Flache Vektor-Illustration
<a name="styles-collapsable3"></a>

![\[Das Bild zeigt einen Elefanten im Stil einer flachen Vektorillustration.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/FLAT_VECTOR_ILLUSTRATION.png)


## Illustration für einen grafischen Roman
<a name="styles-collapsable4"></a>

![\[Das Bild zeigt einen Elefanten im grafischen Romanstil.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/GRAPHIC_NOVEL_ILLUSTRATION.png)


## Maximalismus
<a name="styles-collapsable5"></a>

![\[Das Bild zeigt einen Elefanten im Maximalismus-Stil.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/MAXIMALISM.png)


## Retro-Stil der Mitte des letzten Jahrhunderts
<a name="styles-collapsable6"></a>

![\[Das Bild zeigt einen Elefanten im Retro-Stil der Mitte des letzten Jahrhunderts.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/MIDCENTURY_RETRO.png)


## Fotorealismus
<a name="styles-collapsable7"></a>

![\[Das Bild zeigt einen Elefanten im Fotorealismus-Stil.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/PHOTOREALISM.png)


## Weiche digitale Malerei
<a name="styles-collapsable8"></a>

![\[Das Bild zeigt einen Elefanten im weichen digitalen Malstil.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/SOFT_DIGITAL_PAINTING.png)


# Anfrage- und Antwortstruktur für die Bildgenerierung
<a name="image-gen-req-resp-structure"></a>

**Bildgenerierung**  
In den folgenden Beispielen werden verschiedene Anwendungsfälle für die Bildgenerierung vorgestellt. Jedes Beispiel enthält eine Erläuterung der Felder, die für die Bildgenerierung verwendet werden.

------
#### [ Text-to-image request ]

```
{
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "text": string,
        "negativeText": string,
        "style": "3D_ANIMATED_FAMILY_FILM" |
        "DESIGN_SKETCH" | "FLAT_VECTOR_ILLUSTRATION" |
        "GRAPHIC_NOVEL_ILLUSTRATION" | "MAXIMALISM" |
        "MIDCENTURY_RETRO" | "PHOTOREALISM" |
        "SOFT_DIGITAL_PAINTING"
    },
    "imageGenerationConfig": {
        "width": int,
        "height": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}
```

Die folgenden `textToImageParams`-Felder werden in dieser Anfrage verwendet:
+ `text` (Erforderlich): Ein Text-Prompt zum Generieren des Bildes. Der Prompt muss zwischen 1 und 1 024 Zeichen lang sein.
+ `negativeText` (Optional): Ein Text-Prompt, um festzulegen, was nicht in das Bild aufgenommen werden soll. Der Wert muss 1-1 024 Zeichen lang sein.
+ `style` (Optional) – Gibt den Stil an, der zum Generieren dieses Bilds verwendet wird. Weitere Informationen finden Sie unter [Visuelle Stile](image-gen-styles.md).

**Anmerkung**  
Vermeiden Sie es, negierende Wörter („nein“, „nicht“, „ohne“ usw.) in Ihren `text`- und `negativeText`-Werten zu verwenden. Wenn Sie beispielsweise keine Spiegel in einem Bild haben möchten, verwenden Sie das Wort „Spiegel“ im `text`-Feld, anstatt „keine Spiegel“ oder „ohne Spiegel“ in das `negativeText`-Feld aufzunehmen.

------
#### [ Text-to-image request with image conditioning ]

```
{
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "conditionImage": string (Base64 encoded image),
        "controlMode": "CANNY_EDGE" | "SEGMENTATION", 
        "controlStrength": float,
        "text": string,
        "negativeText": string,
        "style": "3D_ANIMATED_FAMILY_FILM" |
        "DESIGN_SKETCH" | "FLAT_VECTOR_ILLUSTRATION" |
        "GRAPHIC_NOVEL_ILLUSTRATION" | "MAXIMALISM" |
        "MIDCENTURY_RETRO" | "PHOTOREALISM" |
        "SOFT_DIGITAL_PAINTING"
    },
    "imageGenerationConfig": {
        "width": int,
        "height": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}
```

Die folgenden `textToImageParams`-Felder werden in dieser Anfrage verwendet:
+ `conditionImage` (Erforderlich) – Ein JPEG- oder PNG-Bild, welches das Layout und die Zusammensetzung des generierten Bilds bestimmt. Das Bild muss als Base64-Zeichenfolge formatiert sein. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.
+ `controlMode` (Optional) – Gibt an, welcher Konditionierungsmodus verwendet werden soll. Der Standardwert ist „CANNY\$1EDGE“.
  + `CANNY_EDGE` – Die Elemente des generierten Bildes folgen genau den markanten Konturen oder „Edges“ des Konditionierungsbildes.
  + `SEGMENTATION` – Das Konditionierungsbild wird automatisch analysiert, um auffällige Formen im Inhalt zu identifizieren. Diese Analyse führt zu einer Segmentierungsmaske, welche die Generierung steuert, sodass ein Bild entsteht, das sich eng an das Layout des Konditionierungsbildes anlehnt, dem Modell jedoch mehr Freiheit innerhalb der Grenzen jedes Inhaltsbereichs gewährt.
+ `controlStrength` (Optional) – Gibt an, wie ähnlich das Layout und die Zusammensetzung des generierten Bildes dem `conditionImage` sein sollen. Der Bereich liegt zwischen 0 und 1,0. Niedrigere Werte führen zu mehr Zufälligkeit. Der Standardwert ist 0,7.
+ `text` (Erforderlich): Ein Text-Prompt zum Generieren des Bildes. Der Prompt muss zwischen 1 und 1 024 Zeichen lang sein.
+ `negativeText` (Optional): Ein Text-Prompt, um festzulegen, was nicht in das Bild aufgenommen werden soll. Der Wert muss 1-1 024 Zeichen lang sein.
+ `style` (Optional) – Gibt den Stil an, der zum Generieren dieses Bilds verwendet wird. Weitere Informationen finden Sie unter [Visuelle Stile](image-gen-styles.md).

**Anmerkung**  
Vermeiden Sie es, negierende Wörter („nein“, „nicht“, „ohne“ usw.) in Ihren `text`- und `negativeText`-Werten zu verwenden. Wenn Sie beispielsweise keine Spiegel in einem Bild haben möchten, verwenden Sie das Wort „Spiegel“ im `text`-Feld, anstatt „keine Spiegel“ oder „ohne Spiegel“ in das `negativeText`-Feld aufzunehmen.

------
#### [ Color guided image generation request ]

```
{
    "taskType": "COLOR_GUIDED_GENERATION",
    "colorGuidedGenerationParams": {
        "colors": string[] (list of hexadecimal color values),
        "referenceImage": string (Base64 encoded image),
        "text": string,
        "negativeText": string
    },
    "imageGenerationConfig": {
        "width": int,
        "height": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}
```

Die folgenden `colorGuidedGenerationParams`-Felder werden in dieser Anfrage verwendet:
+ `colors` (Erforderlich) – Eine Liste mit bis zu 10 Farbcodes, welche die gewünschte Farbpalette für Ihr Bild definieren. Ausgedrückt als Hexadezimalwerte in der Form „\$1RRGGBB“. Zum Beispiel ist "\$100FF00" rein grün und „\$1 FCF2 AB“ ist warmes Gelb. Die `colors`-Liste hat die stärkste Wirkung, wenn kein `referenceImage` angegeben wird. Andernfalls werden sowohl die Farben in der Liste als auch die Farben aus dem Referenzbild in der endgültigen Ausgabe verwendet.
+ `referenceImage` (Optional) – Ein JPEG- oder PNG-Bild, das als Motiv- und Stilreferenz verwendet werden soll. Die Farben des Bildes werden zusammen mit den Farben aus der `colors`-Liste ebenfalls in die endgültige Ausgabe übernommen. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.
+ `text` (Erforderlich): Ein Text-Prompt zum Generieren des Bildes. Der Prompt muss zwischen 1 und 1 024 Zeichen lang sein.
+ `negativeText` (Optional): Ein Text-Prompt, um festzulegen, was nicht in das Bild aufgenommen werden soll. Der Wert muss 1-1 024 Zeichen lang sein.

**Anmerkung**  
Vermeiden Sie es, negierende Wörter („nein“, „nicht“, „ohne“ usw.) in Ihren `text`- und `negativeText`-Werten zu verwenden. Wenn Sie beispielsweise keine Spiegel in einem Bild haben möchten, verwenden Sie das Wort „Spiegel“ im `text`-Feld, anstatt „keine Spiegel“ oder „ohne Spiegel“ in das `negativeText`-Feld aufzunehmen.

------
#### [ Image variation request ]

```
{
    "taskType": "IMAGE_VARIATION",
    "imageVariationParams": {
        "images": string[] (list of Base64 encoded images),
        "similarityStrength": float,
        "text": string,
        "negativeText": string
    },
    "imageGenerationConfig": {
        "height": int,
        "width": int,
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}
```

Die folgenden `imageVariationParams`-Felder werden in dieser Anfrage verwendet:
+ `images` (Erforderlich) – Eine Liste mit 1–5 Bildern, die als Referenz verwendet werden können. Jedes muss im JPEG- oder PNG-Format vorliegen und als Base64-Zeichenfolgen kodiert sein. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.
+ `similarityStrength` (Optional) – Gibt an, inwiefern das generierte Bild den Eingabebildern ähneln soll. Gültige Werte liegen zwischen 0,2 und 1,0, wobei niedrigere Werte für mehr Zufälligkeit verwendet werden.
+ `text` (Erforderlich): Ein Text-Prompt zum Generieren des Bildes. Der Prompt muss zwischen 1 und 1 024 Zeichen lang sein. Wenn Sie dieses Feld auslassen, entfernt das Modell Elemente innerhalb des maskierten Bereichs. Sie werden durch eine nahtlose Erweiterung des Bildhintergrunds ersetzt.
+ `negativeText` (Optional): Ein Text-Prompt, um festzulegen, was nicht in das Bild aufgenommen werden soll. Der Wert muss 1-1 024 Zeichen lang sein.

**Anmerkung**  
Vermeiden Sie es, negierende Wörter („nein“, „nicht“, „ohne“ usw.) in Ihren `text`- und `negativeText`-Werten zu verwenden. Wenn Sie beispielsweise keine Spiegel in einem Bild haben möchten, verwenden Sie das Wort „Spiegel“ im `text`-Feld, anstatt „keine Spiegel“ oder „ohne Spiegel“ in das `negativeText`-Feld aufzunehmen.

------

**Bildbearbeitung**  
In den folgenden Beispielen werden verschiedene Anwendungsfälle für die Bildbearbeitung vorgestellt. Jedes Beispiel enthält eine Erläuterung der Felder, die für die Bildbearbeitung verwendet werden.

------
#### [ Inpainting request ]

```
{
    "taskType": "INPAINTING",
    "inPaintingParams": {
        "image": string (Base64 encoded image),
        "maskPrompt": string,
        "maskImage": string (Base64 encoded image),
        "text": string,
        "negativeText": string
    },
    "imageGenerationConfig": {
        "numberOfImages": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int
    }
}
```

Die folgenden `inPaintingParams`-Felder werden in dieser Anfrage verwendet:
+ `image` (Erforderlich) – Die JPEG- oder PNG-Datei, die Sie ändern möchten, formatiert als Base64-Zeichenfolge. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.
+ `maskPrompt` oder `maskImage` (Erforderlich) – Sie müssen entweder den `maskPrompt`- oder den `maskImage`-Parameter angeben, aber nicht beide.

  Der `maskPrompt` ist ein Text-Prompt in natürlicher Sprache, der die Bereiche des Bildes beschreibt, die bearbeitet werden sollen. 

  Das `maskImage` ist ein Bild, das die Bereiche des Bildes definiert, die bearbeitet werden sollen. Das Maskenbild muss dieselbe Größe wie das Eingabebild haben. Zu bearbeitende Bereiche sind rein schwarz schattiert und Bereiche, die ignoriert werden sollen, sind rein weiß schattiert. Im Maskenbild sind keine anderen Farben zulässig.

  Beachten Sie, dass die Anforderungen an das In- und Outpainting in Bezug auf die Farbanforderungen der Maskenbilder entgegengesetzt sind.
+ `text` (Erforderlich) – Ein Text-Prompt, der beschriebt, was innerhalb des maskierten Bereichs generiert werden soll. Der Prompt muss zwischen 1 und 1 024 Zeichen lang sein. Wenn Sie dieses Feld auslassen, entfernt das Modell Elemente innerhalb des maskierten Bereichs. Sie werden durch eine nahtlose Erweiterung des Bildhintergrunds ersetzt.
+ `negativeText` (Optional): Ein Text-Prompt, um festzulegen, was nicht in das Bild aufgenommen werden soll. Der Wert muss 1-1 024 Zeichen lang sein.

**Anmerkung**  
Vermeiden Sie es, negierende Wörter („nein“, „nicht“, „ohne“ usw.) in Ihren `text`- und `negativeText`-Werten zu verwenden. Wenn Sie beispielsweise keine Spiegel in einem Bild haben möchten, verwenden Sie das Wort „Spiegel“ im `text`-Feld, anstatt „keine Spiegel“ oder „ohne Spiegel“ in das `negativeText`-Feld aufzunehmen.

------
#### [ Outpainting request ]

```
{
    "taskType": "OUTPAINTING",
    "outPaintingParams": {
        "image": string (Base64 encoded image),
        "maskPrompt": string,
        "maskImage": string (Base64 encoded image),
        "outPaintingMode": "DEFAULT" | "PRECISE",
        "text": string,
        "negativeText": string
    },
    "imageGenerationConfig": {
        "numberOfImages": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int
    }
}
```

Die folgenden `outPaintingParams`-Felder werden in dieser Anfrage verwendet:
+ `image` (Erforderlich) – Die JPEG- oder PNG-Datei, die Sie ändern möchten, formatiert als Base64-Zeichenfolge. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.
+ `maskPrompt` oder `maskImage` (Erforderlich) – Sie müssen entweder den `maskPrompt`- oder den `maskImage`-Parameter angeben, aber nicht beide.

  Der `maskPrompt` ist ein Text-Prompt in natürlicher Sprache, der die Bereiche des Bildes beschreibt, die bearbeitet werden sollen. 

  Das `maskImage` ist ein Bild, das die Bereiche des Bildes definiert, die bearbeitet werden sollen. Das Maskenbild muss dieselbe Größe wie das Eingabebild haben. Zu bearbeitende Bereiche sind rein schwarz schattiert und Bereiche, die ignoriert werden sollen, sind rein weiß schattiert. Im Maskenbild sind keine anderen Farben zulässig.

  Beachten Sie, dass die Anforderungen an das In- und Outpainting in Bezug auf die Farbanforderungen der Maskenbilder entgegengesetzt sind.
+ `outPaintingMode` – Legt fest, wie die von Ihnen bereitgestellte Maske interpretiert wird.

  Verwenden Sie `DEFAULT` für einen reibungslosen Übergang zwischen dem maskierten Bereich und dem nicht maskierten Bereich. Einige der ursprünglichen Pixel werden als Ausgangspunkt für den neuen Hintergrund verwendet. Dieser Modus ist generell besser, wenn Sie möchten, dass der neue Hintergrund ähnliche Farben wie der ursprüngliche Hintergrund verwendet. Sie können jedoch einen Halo-Effekt erzielen, wenn Ihr Prompt einen neuen Hintergrund erfordert, der sich erheblich vom ursprünglichen Hintergrund unterscheidet.

  Verwenden Sie `PRECISE`, um die Maskengrenzen strikt einzuhalten. Dieser Modus ist generell besser, wenn Sie wesentliche Änderungen am Hintergrund vornehmen.
+ `text` (Erforderlich) – Ein Text-Prompt, der beschriebt, was innerhalb des maskierten Bereichs generiert werden soll. Der Prompt muss zwischen 1 und 1 024 Zeichen lang sein. Wenn Sie dieses Feld auslassen, entfernt das Modell Elemente innerhalb des maskierten Bereichs. Sie werden durch eine nahtlose Erweiterung des Bildhintergrunds ersetzt.
+ `negativeText` (Optional): Ein Text-Prompt, um festzulegen, was nicht in das Bild aufgenommen werden soll. Der Wert muss 1-1 024 Zeichen lang sein.

**Anmerkung**  
Vermeiden Sie es, negierende Wörter („nein“, „nicht“, „ohne“ usw.) in Ihren `text`- und `negativeText`-Werten zu verwenden. Wenn Sie beispielsweise keine Spiegel in einem Bild haben möchten, verwenden Sie das Wort „Spiegel“ im `text`-Feld, anstatt „keine Spiegel“ oder „ohne Spiegel“ in das `negativeText`-Feld aufzunehmen.

------
#### [ Background removal request ]

```
{
    "taskType": "BACKGROUND_REMOVAL",
    "backgroundRemovalParams": {
        "image": string (Base64 encoded image)
    }
}
```

Das folgende `backgroundRemovalParams`-Feld wird in dieser Anfrage verwendet:
+ `image` (Erforderlich) – Die JPEG- oder PNG-Datei, die Sie ändern möchten, formatiert als Base64-Zeichenfolge. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.

Die `BACKGROUND_REMOVAL`-Aufgabe gibt ein PNG-Bild mit voller 8-Bit-Transparenz zurück. Dieses Format ermöglicht eine reibungslose, saubere Isolierung der Vordergrundobjekte und erleichtert die Zusammenführung des Bildes mit anderen Elementen in einer Bildbearbeitungsanwendung, einer Präsentation oder einer Website. Der Hintergrund kann mit einem einfachen benutzerdefinierten Code leicht in eine einfarbige Fläche geändert werden.

------
#### [ Virtual try-on ]

```
{
    "taskType": "VIRTUAL_TRY_ON",
    "virtualTryOnParams": {
        "sourceImage": string (Base64 encoded image),
        "referenceImage": string (Base64 encoded image),
        "maskType": "IMAGE" | "GARMENT" | "PROMPT",
        "imageBasedMask":{
            "maskImage": string (Base64 encoded image),
        },
        "garmentBasedMask":{
            "maskShape": "CONTOUR" | "BOUNDING_BOX" | "DEFAULT",
            "garmentClass": "UPPER_BODY" | "LOWER_BODY" |
            "FULL_BODY" | "FOOTWEAR" | "LONG_SLEEVE_SHIRT" |
            "SHORT_SLEEVE_SHIRT" | "NO_SLEEVE_SHIRT" |
            "OTHER_UPPER_BODY" | "LONG_PANTS" | "SHORT_PANTS" |
            "OTHER_LOWER_BODY" | "LONG_DRESS" | "SHORT_DRESS" |
            "FULL_BODY_OUTFIT" | "OTHER_FULL_BODY" | "SHOES" |
            "BOOTS" | "OTHER_FOOTWEAR",
            "garmentStyling":{ 
                "longSleeveStyle": "SLEEVE_DOWN" | "SLEEVE_UP",
                "tuckingStyle": "UNTUCKED" | "TUCKED",
                "outerLayerStyle": "CLOSED" | "OPEN",
            }
        },
        "promptBasedMask":{
            "maskShape": "BOUNDING_BOX" | "CONTOUR" | "DEFAULT",
            "maskPrompt": string,
        },
        "maskExclusions": { 
            "preserveBodyPose": "ON" | "OFF" | "DEFAULT",
            "preserveHands": "ON" | "OFF" | "DEFAULT",
            "preserveFace": "OFF" | "ON" | "DEFAULT"
        },
        "mergeStyle" : "BALANCED" | "SEAMLESS" | "DETAILED" ,
        "returnMask": boolean,
    },
    "imageGenerationConfig": {
        "numberOfImages": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int
    }
}
```

Die folgenden `virtualTryOnParams`-Felder werden in dieser Anfrage verwendet:
+ `sourceImage` (Erforderlich) – Die JPEG- oder PNG-Datei, die Sie ändern möchten, formatiert als Base64-Zeichenfolge. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.
+ `referenceImage` (Erforderlich) – Die JPEG- oder PNG-Datei, die das Objekt enthält, das Sie dem Quellbild überlagern möchten, formatiert als Base64-Zeichenfolge. Siehe [Eingabebilder für die Bilderzeugung](image-gen-access.md#image-gen-input-images) für zusätzliche Anforderungen.
+ `maskType` (Erforderlich) – Gibt an, ob die Maske als Bild, Prompt oder Kleidungsmaske bereitgestellt wird.
+ `imageBasedMask` – Erforderlich, wenn `maskType` als `"IMAGE"` angegeben ist.

  Das `maskImage` ist ein Bild, das die Bereiche des Bildes definiert, die bearbeitet werden sollen. Das Maskenbild muss dieselbe Größe wie das Eingabebild haben. Zu bearbeitende Bereiche sind rein schwarz schattiert und Bereiche, die ignoriert werden sollen, sind rein weiß schattiert. Im Maskenbild sind keine anderen Farben zulässig.
+ `garmentBasedMask` – Erforderlich, wenn `maskType` als `"GARMENT"` angegeben ist.
  + `maskShape` (Optional) – Definiert die Form des Maskenbegrenzungsrahmens. Die Form und Größe des Begrenzungsrahmens können sich darauf auswirken, wie das Referenzbild auf das Quellbild übertragen wird.
  + `garmentClass` (Erforderlich) – Definiert das Kleidungsstück, das übertragen wird. Dieser Parameter ermöglicht es dem Modell, sich auf bestimmte Teile des Referenzbilds zu konzentrieren, die Sie übertragen möchten. 
  + `garmentStyling` (Optional) – Stellt dem Modell Stilmerkmale für bestimmte Kleidungsstücke bereit. Die Parameter `longSleeveStyle` und `tuckingStyle` gelten ausschließlich für Kleidung für den Oberkörper. Der Parameter `outerLayerStyle` gilt ausschließlich für die äußere Lage der Oberkörperbekleidung.
+ `promptBasedMask` (Erforderlich) – Erforderlich, wenn `maskType` `"PROMPT"` ist.
  + `maskShape` (Optional) – Definiert die Form des Maskenbegrenzungsrahmens. Die Form und Größe des Begrenzungsrahmens können sich darauf auswirken, wie das Referenzbild auf das Quellbild übertragen wird.
  + `maskPrompt` (Erforderlich) – Ein Text-Prompt in natürlicher Sprache, der die Bereiche des Bildes beschreibt, die bearbeitet werden sollen.
+ `maskExclusions` (Optional) – Wenn eine Person im Quellbild erkannt wird, bestimmen diese Parameter, ob ihre Körperhaltung, Hände und ihr Gesicht im Ausgabebild beibehalten oder neu generiert werden sollen.
+ `mergeStyle` (Optional) – Legt fest, wie die Quell- und Referenzbilder miteinander verbunden werden. Jeder Zusammenführungsstil verfolgt einen anderen Ansatz, wie die Elemente zu einem endgültigen Bild zusammengefügt werden, wobei jeder Stil seine eigenen Vorteile und Nachteile aufweist.
  + `"BALANCED"` – Schützt alle nicht maskierten Pixel im Originalbild und stellt sicher, dass sie dem Original zu 100 % entsprechen. In bestimmten Fällen kann es zu einer geringfügigen Abweichung in der Farbe oder Textur des Ausgabebildes kommen, die sich als eine Art „Geisterbild“ der Maskenform darstellt. Dies tritt am wahrscheinlichsten auf, wenn die Person auf einem einfarbigen oder gleichmäßig strukturierten Hintergrund abgebildet ist. Um dies zu vermeiden, können Sie stattdessen den `"SEAMLESS"`-Stil verwenden.
  + `"SEAMLESS"` – Stellt sicher, dass im endgültigen Bild keine sichtbare Nahtstelle zwischen den maskierten und nicht maskierten Bildbereichen vorhanden ist. Der Nachteil besteht darin, dass in diesem Modus alle Pixel im Bild leicht verändert werden, was manchmal zu einem Verlust feiner Details in den nicht maskierten Bereichen des Bildes führen kann.
  + `"DETAILED"` – Kann feine Details wie Logos und Text erheblich verbessern, insbesondere wenn der maskierte Bereich im Vergleich zum Gesamtbild relativ klein ist. Das Modell erreicht dies, indem es eine Inpainting-Bearbeitung an einer stark beschnittenen Version des Originalbildes mit höherer Auflösung durchführt, welche nur den maskierten Bereich enthält. Anschließend wird das Ergebnis wieder mit dem Originalbild zusammengeführt. Wie im `"BALANCED"`-Modus kann dies manchmal zu einer sichtbaren Naht führen.
+ `returnMask` (Optional) – Gibt an, ob das Maskenbild zusammen mit dem Ausgabebild zurückgegeben wird.

------

**Antworttext**  
Die Antwort enthält eines oder mehrere der folgenden Felder:

```
{
    "images": "images": string[] (list of Base64 encoded images),
    "maskImage": string (Base64 encoded image),
    "error": string
}
```
+ `images` – Bei Erfolg wird eine Liste von Base64-kodierten Zeichenfolgen zurückgegeben, die jedes generierte Bild darstellen. Diese Liste enthält nicht immer dieselbe Anzahl von Bildern, welche Sie angefordert haben. Einzelne Bilder können nach der Generierung blockiert werden, wenn sie nicht den Richtlinien zur Inhaltsmoderation von AWS Responsible AI (RAI) entsprechen. Es werden nur Bilder zurückgegeben, die den RAI-Richtlinien entsprechen.
+ `maskImage` – Wenn Sie angegeben haben, dass das Maskenbild mit der Ausgabe zurückgegeben werden soll, wird es an dieser Stelle zurückgegeben.
+ `error` – Wenn ein Bild nicht der RAI-Richtlinie entspricht, wird dieses Feld zurückgegeben. Andernfalls ist dieses Feld in der Antwort leer.

Das `imageGenerationConfig`-Feld ist allen Aufgabentypen gemeinsam, außer `BACKGROUND_REMOVAL`. Dies ist optional und umfasst die folgenden Felder. Wenn Sie dieses Objekt auslassen, werden die Standardkonfigurationen verwendet.
+ `width` und `height` (Optional) – Definieren die Größe und das Seitenverhältnis des generierten Bilds. Der Standardwert für beide ist 1 024.

  Die Werte `width` und `height` sollten nicht für die Aufgabentypen `"INPAINTING"`, `"OUTPAINTING"` oder `"VIRTUAL_TRY_ON"` angegeben werden.

  Die vollständige Liste der unterstützten Auflösungen finden Sie unter [Unterstützte Bildauflösungen](image-gen-access.md#image-gen-resolutions).
+ `quality` (Optional) – Legt die Qualität fest, die beim Erstellen des Bildes verwendet werden soll – „Standard“ (Standard) oder „Premium“.
+ `cfgScale` (Optional) – Gibt an, inwiefern das Modell dem Prompt entsprechen soll. Die Werte reichen von 1,1 bis einschließlich 10, wobei der Standardwert 6,5 beträgt.
  + Niedrige Werte (1,1–3) – Mehr kreative Freiheit für die KI, potenziell ästhetischer, jedoch mit geringem Kontrast und weniger promptkonformen Ergebnissen.
  + Mittlere Werte (4–7) – Ausgewogener Ansatz, der in der Regel für die meisten Generationen empfohlen wird.
  + Hohe Werte (8–10) – Strikte Einhaltung der Prompts, was zu präziseren Ergebnissen führen kann, jedoch manchmal auf Kosten der natürlichen Ästhetik und einer erhöhten Farbsättigung
+ `numberOfImages` (Optional) – Die Anzahl der zu generierenden Bilder.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/image-gen-req-resp-structure.html)
+ `seed` (Optional) – Bestimmt die anfängliche Einstellung für das Rauschen im Generierungsprozess. Das Ändern des Seed-Wertes bei Beibehaltung aller anderen Parameter erzeugt ein völlig neues Bild, das weiterhin Ihrem Prompt, den Abmessungen und anderen Einstellungen entspricht. Es ist üblich, mit verschiedenen Seed-Werten zu experimentieren, um das optimale Bild zu erzielen.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/image-gen-req-resp-structure.html)

**Wichtig**  
Auflösung (`width` und `height`), `numberOfImages` und `quality` haben alle einen Einfluss auf die Zeit, die für die Generierung benötigt wird. Das AWS -SDK hat einen `read_timeout`-Standardwert von 60 Sekunden, der bei Verwendung höherer Werte für diese Parameter leicht überschritten werden kann. Daher wird empfohlen, die `read_timeout` Ihrer Aufrufe auf mindestens 5 Minuten (300 Sekunden) zu erhöhen. Die Codebeispiele veranschaulichen, wie dies durchgeführt werden kann.

# Fehlerbehandlung
<a name="image-gen-errors"></a>

Es gibt drei Haupttypen von Fehlern, die Sie in Ihrem Anwendungscode behandeln möchten. Es handelt sich hierbei um Eingabevalidierungsfehler, Fehler bei der Eingabeabweisung durch AWS verantwortungsvolle KI (RAI) und Fehler bei der Ausgabeabweisung durch RAI. Diese Fehler treten ausschließlich bei Amazon Nova Canvas auf.

Eingabevalidierungsfehler treten auf, wenn Sie einen nicht unterstützten Wert für einen Eingabeparameter verwenden. Beispielsweise ein Breitenwert, der nicht mit einer der unterstützten Auflösungen übereinstimmt, ein Eingabebild, das die maximal zulässige Größe überschreitet, oder ein `maskImage`, das andere Farben als reines Schwarz und Weiß enthält. Alle Eingabevalidierungsfehler werden als `ValidationException` ausgedrückt, die eine Meldungszeichenfolge enthält, welche die Ursache des Problems beschreibt.

Fehler bei der RAI-Eingabeablenkung treten auf, wenn festgestellt wird, dass einer der eingegebenen Textwerte oder Bilder gegen die Richtlinie für verantwortungsvolle KI verstößt. AWS Diese Fehler werden als `ValidationException` mit einer der folgenden Meldungen ausgedrückt:
+ Eingabetext-Validierungsmeldung – „Diese Anfrage wurde von unseren Inhaltsfiltern blockiert. Bitte passen Sie Ihren Text-Prompt an, um eine neue Anfrage zu senden.“
+ Eingabebild-Validierungsmeldung – „Diese Anfrage wurde von unseren Inhaltsfiltern blockiert. Bitte passen Sie Ihr Eingabebild an, um eine neue Anfrage zu senden.“

Fehler bei der RAI-Ausgabe treten auf, wenn ein Bild generiert wird, dieses aber nicht den Richtlinien AWS für verantwortungsvolle KI entspricht. Wenn dies der Fall ist, wird keine Ausnahme verwendet. Stattdessen wird eine erfolgreiche Antwort zurückgegeben, deren Struktur ein Fehlerfeld enthält, das eine Zeichenfolge mit einem der folgenden Werte ist:
+ Falls alle angeforderten Bilder gegen die RAI-Richtlinie verstoßen: „Alle generierten Bilder wurden von unseren Inhaltsfiltern blockiert.“
+ Wenn einige, jedoch nicht alle angeforderten Bilder gegen die RIA-Richtlinie verstoßen – „Einige der generierten Bilder wurden von unseren Inhaltsfiltern blockiert.“

# Codebeispiele
<a name="image-gen-code-examples"></a>

Die folgenden Beispiele enthalten Beispielcode für verschiedene Bildgenerierungsaufgaben.

------
#### [ Text to image generation ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate an image from a text prompt with the Amazon Nova Canvas model (on demand).
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.config import Config

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Nova Canvas"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_image(model_id, body):
    """
    Generate an image using Amazon Nova Canvas model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        image_bytes (bytes): The image generated by the model.
    """

    logger.info(
        "Generating image with Amazon Nova Canvas model %s", model_id)

    bedrock = boto3.client(
        service_name='bedrock-runtime',
        config=Config(read_timeout=300)
    )

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    base64_image = response_body.get("images")[0]
    base64_bytes = base64_image.encode('ascii')
    image_bytes = base64.b64decode(base64_bytes)

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Image generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated image with Amazon Nova Canvas model %s", model_id)

    return image_bytes


def main():
    """
    Entrypoint for Amazon Nova Canvas  example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    model_id = 'amazon.nova-canvas-v1:0'

    prompt = """A photograph of a cup of coffee from the side."""

    body = json.dumps({
        "taskType": "TEXT_IMAGE",
        "textToImageParams": {
            "text": prompt
        },
        "imageGenerationConfig": {
            "numberOfImages": 1,
            "height": 1024,
            "width": 1024,
            "cfgScale": 8.0,
            "seed": 0
        }
    })

    try:
        image_bytes = generate_image(model_id=model_id,
                                     body=body)
        image = Image.open(io.BytesIO(image_bytes))
        image.show()

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred:", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating image with Amazon Nova Canvas  model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Inpainting ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use inpainting to generate an image from a source image with 
the Amazon Nova Canvas  model (on demand).
The example uses a mask prompt to specify the area to inpaint.
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.config import Config

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Nova Canvas"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_image(model_id, body):
    """
    Generate an image using Amazon Nova Canvas  model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        image_bytes (bytes): The image generated by the model.
    """

    logger.info(
        "Generating image with Amazon Nova Canvas model %s", model_id)

    bedrock = boto3.client(
        service_name='bedrock-runtime',
        config=Config(read_timeout=300)
    )

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    base64_image = response_body.get("images")[0]
    base64_bytes = base64_image.encode('ascii')
    image_bytes = base64.b64decode(base64_bytes)

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Image generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated image with Amazon Nova Canvas model %s", model_id)

    return image_bytes


def main():
    """
    Entrypoint for Amazon Nova Canvas example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        model_id = 'amazon.nova-canvas-v1:0'

        # Read image from file and encode it as base64 string.
        with open("/path/to/image", "rb") as image_file:
            input_image = base64.b64encode(image_file.read()).decode('utf8')

        body = json.dumps({
            "taskType": "INPAINTING",
            "inPaintingParams": {
                "text": "Modernize the windows of the house",
                "negativeText": "bad quality, low res",
                "image": input_image,
                "maskPrompt": "windows"
            },
            "imageGenerationConfig": {
                "numberOfImages": 1,
                "height": 512,
                "width": 512,
                "cfgScale": 8.0
            }
        })

        image_bytes = generate_image(model_id=model_id,
                                     body=body)
        image = Image.open(io.BytesIO(image_bytes))
        image.show()

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating image with Amazon Nova Canvas  model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Outpainting ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use outpainting to generate an image from a source image with 
the Amazon Nova Canvas  model (on demand).
The example uses a mask image to outpaint the original image.
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.config import Config

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Nova Canvas"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_image(model_id, body):
    """
    Generate an image using Amazon Nova Canvas  model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        image_bytes (bytes): The image generated by the model.
    """

    logger.info(
        "Generating image with Amazon Nova Canvas model %s", model_id)

    bedrock = boto3.client(
        service_name='bedrock-runtime',
        config=Config(read_timeout=300)
    )

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    base64_image = response_body.get("images")[0]
    base64_bytes = base64_image.encode('ascii')
    image_bytes = base64.b64decode(base64_bytes)

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Image generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated image with Amazon Nova Canvas model %s", model_id)

    return image_bytes


def main():
    """
    Entrypoint for Amazon Nova Canvas  example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        model_id = 'amazon.nova-canvas-v1:0'

        # Read image and mask image from file and encode as base64 strings.
        with open("/path/to/image", "rb") as image_file:
            input_image = base64.b64encode(image_file.read()).decode('utf8')
        with open("/path/to/mask_image", "rb") as mask_image_file:
            input_mask_image = base64.b64encode(
                mask_image_file.read()).decode('utf8')

        body = json.dumps({
            "taskType": "OUTPAINTING",
            "outPaintingParams": {
                "text": "Draw a chocolate chip cookie",
                "negativeText": "bad quality, low res",
                "image": input_image,
                "maskImage": input_mask_image,
                "outPaintingMode": "DEFAULT"
            },
            "imageGenerationConfig": {
                "numberOfImages": 1,
                "height": 512,
                "width": 512,
                "cfgScale": 8.0
            }
        }
        )

        image_bytes = generate_image(model_id=model_id,
                                     body=body)
        image = Image.open(io.BytesIO(image_bytes))
        image.show()

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating image with Amazon Nova Canvas  model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Image variation ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate an image variation from a source image with the
Amazon Nova Canvas  model (on demand).
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.config import Config

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Nova Canvas"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_image(model_id, body):
    """
    Generate an image using Amazon Nova Canvas  model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        image_bytes (bytes): The image generated by the model.
    """

    logger.info(
        "Generating image with Amazon Nova Canvas model %s", model_id)

    bedrock = boto3.client(
        service_name='bedrock-runtime',
        config=Config(read_timeout=300)
    )

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    base64_image = response_body.get("images")[0]
    base64_bytes = base64_image.encode('ascii')
    image_bytes = base64.b64decode(base64_bytes)

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Image generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated image with Amazon Nova Canvas model %s", model_id)

    return image_bytes


def main():
    """
    Entrypoint for Amazon Nova Canvas  example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        model_id = 'amazon.nova-canvas-v1:0'

        # Read image from file and encode it as base64 string.
        with open("/path/to/image", "rb") as image_file:
            input_image = base64.b64encode(image_file.read()).decode('utf8')

        body = json.dumps({
            "taskType": "IMAGE_VARIATION",
            "imageVariationParams": {
                "text": "Modernize the house, photo-realistic, 8k, hdr",
                "negativeText": "bad quality, low resolution, cartoon",
                "images": [input_image],
                "similarityStrength": 0.7,  # Range: 0.2 to 1.0
            },
            "imageGenerationConfig": {
                "numberOfImages": 1,
                "height": 512,
                "width": 512,
                "cfgScale": 8.0
            }
        })

        image_bytes = generate_image(model_id=model_id,
                                     body=body)
        image = Image.open(io.BytesIO(image_bytes))
        image.show()

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating image with Amazon Nova Canvas  model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Image conditioning ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate image conditioning from a source image with the
Amazon Nova Canvas model (on demand).
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.config import Config

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Nova Canvas"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_image(model_id, body):
    """
    Generate an image using Amazon Nova Canvas model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        image_bytes (bytes): The image generated by the model.
    """

    logger.info(
        "Generating image with Amazon Nova Canvas model %s", model_id)

    bedrock = boto3.client(
        service_name='bedrock-runtime',
        config=Config(read_timeout=300)
    )

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    base64_image = response_body.get("images")[0]
    base64_bytes = base64_image.encode('ascii')
    image_bytes = base64.b64decode(base64_bytes)

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Image generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated image with Amazon Nova Canvas model %s", model_id)

    return image_bytes


def main():
    """
    Entrypoint for Amazon Nova Canvas example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        model_id = 'amazon.nova-canvas-v1:0'

        # Read image from file and encode it as base64 string.
        with open("/path/to/image", "rb") as image_file:
            input_image = base64.b64encode(image_file.read()).decode('utf8')

        body = json.dumps({
            "taskType": "TEXT_IMAGE",
            "textToImageParams": {
                "text": "A robot playing soccer, anime cartoon style",
                "negativeText": "bad quality, low res",
                "conditionImage": input_image,
                "controlMode": "CANNY_EDGE"
            },
            "imageGenerationConfig": {
                "numberOfImages": 1,
                "height": 512,
                "width": 512,
                "cfgScale": 8.0
            }
        })

        image_bytes = generate_image(model_id=model_id,
                                     body=body)
        image = Image.open(io.BytesIO(image_bytes))
        image.show()

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating image with Amazon Nova Canvas  model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Color guided content ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate an image from a source image color palette with the
Amazon Nova Canvas   model (on demand).
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.config import Config

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Nova Canvas"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_image(model_id, body):
    """
    Generate an image using Amazon Nova Canvas  model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        image_bytes (bytes): The image generated by the model.
    """

    logger.info(
        "Generating image with Amazon Nova Canvas model %s", model_id)

    bedrock = boto3.client(
        service_name='bedrock-runtime',
        config=Config(read_timeout=300)
    )

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    base64_image = response_body.get("images")[0]
    base64_bytes = base64_image.encode('ascii')
    image_bytes = base64.b64decode(base64_bytes)

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Image generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated image with Amazon Nova Canvas model %s", model_id)

    return image_bytes


def main():
    """
    Entrypoint for Amazon Nova Canvas  example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        model_id = 'amazon.nova-canvas-v1:0'

        # Read image from file and encode it as base64 string.
        with open("/path/to/image", "rb") as image_file:
            input_image = base64.b64encode(image_file.read()).decode('utf8')

        body = json.dumps({
            "taskType": "COLOR_GUIDED_GENERATION",
            "colorGuidedGenerationParams": {
                "text": "digital painting of a girl, dreamy and ethereal, pink eyes, peaceful expression, ornate frilly dress, fantasy, intricate, elegant, rainbow bubbles, highly detailed, digital painting, artstation, concept art, smooth, sharp focus, illustration",
                "negativeText": "bad quality, low res",
                "referenceImage": input_image,
                "colors": ["#ff8080", "#ffb280", "#ffe680", "#ffe680"]
            },
            "imageGenerationConfig": {
                "numberOfImages": 1,
                "height": 512,
                "width": 512,
                "cfgScale": 8.0
            }
        })

        image_bytes = generate_image(model_id=model_id,
                                     body=body)
        image = Image.open(io.BytesIO(image_bytes))
        image.show()

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating image with Amazon Nova Canvas  model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Background removal ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate an image with background removal with the
Amazon Nova Canvas   model (on demand).
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.config import Config

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Nova Canvas"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_image(model_id, body):
    """
    Generate an image using Amazon Nova Canvas  model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        image_bytes (bytes): The image generated by the model.
    """

    logger.info(
        "Generating image with Amazon Nova Canvas model %s", model_id)

    bedrock = boto3.client(
        service_name='bedrock-runtime',
        config=Config(read_timeout=300)
    )

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    base64_image = response_body.get("images")[0]
    base64_bytes = base64_image.encode('ascii')
    image_bytes = base64.b64decode(base64_bytes)

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Image generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated image with Amazon Nova Canvas model %s", model_id)

    return image_bytes


def main():
    """
    Entrypoint for Amazon Nova Canvas  example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        model_id = 'amazon.nova-canvas-v1:0'

        # Read image from file and encode it as base64 string.
        with open("/path/to/image", "rb") as image_file:
            input_image = base64.b64encode(image_file.read()).decode('utf8')

        body = json.dumps({
            "taskType": "BACKGROUND_REMOVAL",
            "backgroundRemovalParams": {
                "image": input_image,
            }
        })

        image_bytes = generate_image(model_id=model_id,
                                     body=body)
        image = Image.open(io.BytesIO(image_bytes))
        image.show()

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating image with Amazon Nova Canvas  model {model_id}.")


if __name__ == "__main__":
    main()
```

------

# Videos mit Amazon Nova Reel generieren
<a name="video-generation"></a>

Mit Amazon Nova Reel können Sie realistische Videos in Studioqualität erstellen, indem Sie text- und bildbasierte Prompts verwenden. Das Modell unterstützt die text-to-video Generierung und die Generierung von text-and-image Videos. Videos mit einer Länge von bis zu zwei Minuten werden in Schritten von sechs Sekunden mit einer Auflösung von 1280 x 720 und 24 Bildern pro Sekunde erstellt.

Amazon Nova Reel unterstützt die folgenden Features:
+ Text-to-video (T2V) -Generierung — Geben Sie eine Textaufforderung ein und generieren Sie ein neues Video als Ausgabe. Das generierte Video erfasst die im Text-Prompt beschriebenen Konzepte.
+ Text- und Image-to-video (I2V-) Generierung — Verwendet ein eingegebenes Referenzbild als Leitfaden für die Videogenerierung. Das Modell generiert ein Ausgabevideo, welches das Referenzbild als Start-Keyframe verwendet und ein Video erzeugt, das mit dem Text-Prompt übereinstimmt.
+ Inhaltsherkunft – Verwenden Sie öffentlich zugängliche Tools wie [Content Credentials Verify](https://contentcredentials.org/verify), um zu überprüfen, ob ein Bild mit Amazon Nova Reel 1.1 erstellt wurde. Damit wird angezeigt, dass das Bild generiert wurde, es sei denn, die Metadaten wurden entfernt.


|  | Amazon Nova Reel | 
| --- |--- |
| Modell-ID | Amazon. nova-reel-v1:1 | 
| Eingabemodalitäten | Text, Bild | 
| Ausgabemodalitäten | video | 
| Text im Eingabekontextfenster | Text-to-video: 512 Zeichen Multi-Shot automatisiert: 4 000 Zeichen Multi-Shot manuell: 512 Zeichen pro Einstellung | 
| Unterstützte Sprachen | Englisch | 
| Regionen | Amazon Nova Reel 1.0 ist in den Regionen USA Ost (Nord-Virginia), Europa (Irland) und Asien-Pazifik (Tokio) verfügbar. Amazon Nova Reel 1.1 ist nur in USA-Ost (Nord-Virginia) verfügbar. | 
| Videoauflösung | 1 280 x 720 | 
| Frames pro Sekunde | 24 | 
| Videodauer (Sekunden) | In Schritten von 6 Sekunden, bis zu zwei Minuten | 
| API für asynchronen Modellaufruf | [Ja](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_StartAsyncInvoke.html) | 
| Modell API aufrufen | Nein | 
| Feinabstimmung | Nein | 
| Bereitgestellter Durchsatz | Nein | 

Um Videos zu generieren, die länger als sechs Sekunden sind, müssen Sie `amazon.nova-reel-v1:1` als Modell-ID verwenden.

**Topics**
+ [Videogenerierung, Zugang und Nutzung](video-gen-access.md)
+ [Fehlerbehandlung](video-gen-errors.md)
+ [Beispiele für die Generierung von Single-Shot-Videos](video-gen-code-examples.md)
+ [Beispielcodes zur Erstellung von Multi-Shot-Videos](video-gen-code-examples2.md)
+ [Storyboarding-Videos mit Amazon Nova Reel](video-generation-storyboard.md)

# Videogenerierung, Zugang und Nutzung
<a name="video-gen-access"></a>

Die Erstellung eines Videos mit Amazon Nova Reel ist ein asynchroner Prozess, der in der Regel etwa 90 Sekunden für ein 6-Sekunden-Video und etwa 14 bis 17 Minuten für ein 2-Minuten-Video dauert. Nachdem Sie die Generierung eines Videos gestartet haben, wird das Video in einen Amazon-S3-Bucket in Ihrem Konto geschrieben. Da in Ihrem Namen eine Datei in einen Amazon S3 S3-Bucket Amazon Bedrock geschrieben wird, benötigt die AWS Rolle, die Sie verwenden, Berechtigungen, die so konfiguriert sind, dass sie die entsprechenden Amazon Bedrock Amazon S3 S3-Aktionen und die `s3:PutObject` Aktion zulassen. Für die Generierung eines Videos sind mindestens folgende Aktionsberechtigungen erforderlich:
+ `bedrock:InvokeModel`
+ `s3:PutObject`

Wir empfehlen jedoch die folgenden zusätzlichen Maßnahmen, damit Sie den Status von Videogenerierungsaufträgen verfolgen können:
+ `bedrock:GetAsyncInvoke`
+ `bedrock:ListAsyncInvokes`

Nach Abschluss der Videogenerierung werden das Video und die einzelnen Aufnahmen in dem von Ihnen angegebenen Amazon-S3-Bucket gespeichert. Amazon Nova erstellt für jede Aufruf-ID einen Ordner. Dieser Ordner enthält die Dateien manifest.json, output.mp4 und generation-status.json, die durch die Anfrage zur Videogenerierung erstellt wurden. 

**Topics**
+ [Einen Auftrag zur Videogenerierung starten](#video-gen-start-a-job)
+ [Eingabeparameter für die Videogenerierung](#video-gen-input-params)
+ [Der Fortschritt der Videogenerierungsaufträge wird überprüft](#video-gen-check-progress)
+ [Zugriff auf die Ergebnisse eines Videogenerierungsauftrags](#video-gen-read-results)

## Einen Auftrag zur Videogenerierung starten
<a name="video-gen-start-a-job"></a>

Um die Erstellung eines Videos zu initiieren, rufen Sie `start_async_invoke()` auf. Dadurch wird ein neuer Aufruf-Auftrag erstellt. Nach Abschluss des Auftrags speichert Amazon Nova das erstellte Video automatisch in einem von Ihnen angegebenen Amazon-S3-Bucket.

`start_async_invoke()` verwendet die folgenden Argumente:
+ **modelld** (Erforderlich) – Die zu verwendende Modell-ID. Für Amazon Nova Reel ist dies „Amazon. nova-reel-v1:1“
+ **modelInput** (Erforderlich) – Definiert alle für das Amazon-Nova-Reel-Modell spezifischen Parameter zur Videogenerierung. Weitere Informationen finden Sie unter [Eingabeparameter für die Videogenerierung](#video-gen-input-params).
+ **outputDataConfig**(Erforderlich) — Definiert, wo das generierte Video gespeichert werden soll. Der Wert muss die folgende Struktur aufweisen:

  ```
  {
      "s3OutputDataConfig": {
          "s3Uri": string (S3 URL starting with "s3://")
      }
  }
  ```

## Eingabeparameter für die Videogenerierung
<a name="video-gen-input-params"></a>

In den folgenden Parameterbeschreibungen finden Sie Informationen zum Generieren von Videos mit Amazon Nova Reel.

------
#### [ Text-to-video generation ]

Die folgende Struktur definiert einen Videogenerierungsauftrag für Amazon Nova Reel:

```
{
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {
        "text": string,
        "images": ImageSource[] (list containing a single ImageSource)
    },
    "videoGenerationConfig": {
        "durationSeconds": int,
        "fps": int,
        "dimension": string, 
        "seed": int
    }
}
```

Diese Eingabeparameter sind erforderlich, um den Videogenerierungsauftrag zu erstellen:
+ **text** (Erforderlich): Ein Text-Prompt zum Generieren des Bildes. Muss zwischen 1 und 512 Zeichen lang sein.
+ **images** (Optional) – Ein einzelnes JPEG- oder PNG-Bild, das als Start-Keyframe des Ausgabevideos verwendet wird. Dieses Eingabebild wird zusammen mit dem Text-Prompt verwendet, um das Video zu generieren. Das Bild muss als eine base64-Zeichenfolge formatiert oder in einem Amazon-S3-Bucket gespeichert sein.

  Bilder können im PNG- oder JPEG-Format vorliegen und müssen 8 Bit pro Farbkanal (RGB) aufweisen. PNG-Bilder können einen zusätzlichen Alphakanal enthalten, jedoch darf dieser Kanal keine transparenten oder durchscheinenden Pixel enthalten. Derzeit akzeptiert das Modell nur Bilder mit einer Größe von 1 280 (Breite) x 720 (Höhe).

  In einem Amazon-S3-Bucket enthaltene Bilder dürfen 25 MB nicht überschreiten.
+ **durationSeconds** (Erforderlich) – Dauer des Ausgabevideos. 6 ist derzeit der einzige unterstützte Wert.
+ **fps** (Erforderlich) – Bildrate des Ausgabevideos. 24 ist derzeit der einzige unterstützte Wert.
+ **dimension** (Erforderlich) – Breite und Höhe des Ausgabevideos. „1 280x720" ist derzeit der einzige unterstützte Wert.
+ **seed**: (Optional) – Bestimmt die anfängliche Einstellung für das Rauschen im Generierungsprozess. Das Ändern des Seed-Wertes bei Beibehaltung aller anderen Parameter erzeugt ein völlig neues Video, das weiterhin Ihrem Prompt, den Abmessungen und anderen Einstellungen entspricht. Es ist üblich, mit verschiedenen Seed-Werten zu experimentieren, um das optimale Bild zu erzielen.

  Der Seed-Wert muss zwischen 0 und 2 147 483 646 liegen, und der Standardwert ist 42.

**imageSource-Schema**  
Wenn Sie ein Bild als Eingabe verwenden, nutzen Sie bitte die folgende Struktur, um das Bild in Ihre Anfrage einzubinden:

```
{
    "format": "png" | "jpeg"
    "source": {
        "bytes": string (base64 encoded image)
    }
}
```
+ **format** (Erforderlich) – Muss dem Format des Eingabebilds entsprechen. Entweder „PNG“ oder „JPEG“.
+ **source** (Erforderlich)
  + **bytes** (Erforderlich) – Das Eingabebild ist als Base64-Zeichenfolge kodiert. Das Bild muss eine Auflösung von 1 280 x 720 haben.

------
#### [ Automated long video generation ]

Mit der Aufgabe `MULTI_SHOT_AUTOMATED` können Sie Videos mit einer Länge von bis zu zwei Minuten in Schritten von sechs Sekunden erstellen, indem Sie lediglich einen Text-Prompt eingeben. Sie können einen Text-Prompt mit bis zu 4 000 Zeichen angeben, aber kein Eingabebild.

```
{
    "taskType": "MULTI_SHOT_AUTOMATED",
    "multiShotAutomatedParams": {
        "text": string,
    },
    "videoGenerationConfig": {
        "durationSeconds": int,
        "fps": int,
        "dimension": string, 
        "seed": int
    }
}
```

Diese Eingabeparameter sind erforderlich, um den Videogenerierungsauftrag zu erstellen:
+ **text** (Erforderlich): Ein Text-Prompt zum Generieren des Bildes. Muss zwischen 1 und 4 000 Zeichen lang sein.
+ **durationSeconds** (Erforderlich) – Dauer des Ausgabevideos. Ein Vielfaches von 6 zwischen 12 und 120 (einschließlich).
+ **fps** (Erforderlich) – Bildrate des Ausgabevideos. 24 ist derzeit der einzige unterstützte Wert.
+ **dimension** (Erforderlich) – Breite und Höhe des Ausgabevideos. „1 280x720" ist derzeit der einzige unterstützte Wert.
+ **seed**: (Optional) – Bestimmt die anfängliche Einstellung für das Rauschen im Generierungsprozess. Das Ändern des Seed-Wertes bei Beibehaltung aller anderen Parameter erzeugt ein völlig neues Bild, das weiterhin Ihrem Prompt, den Abmessungen und anderen Einstellungen entspricht. Es ist üblich, mit verschiedenen Seed-Werten zu experimentieren, um das optimale Bild zu erzielen.

  Der Seed-Wert muss zwischen 0 und 2 147 483 646 liegen, und der Standardwert ist 42.

------
#### [ Manual long video generation ]

Mit der Aufgabe `MULTI_SHOT_MANUAL` können Sie Videos mit einer Länge von bis zu zwei Minuten mit mehreren Text-Prompts und Eingabebildern erstellen. Für jede sechs Sekunden lange Einstellung im Video können Sie einen Text-Prompt mit einem optionalen Eingabebild bereitstellen. Die Dauer des Videos wird anhand der von Ihnen angegebenen Anzahl von Einstellungen bestimmt.

```
model_input = {
  "taskType": "MULTI_SHOT_MANUAL",
  "multiShotManualParams": {
    "shots": [
      {
        "text": "Information for shot 1"
      },
      {
        "text": "Information for shot 2",
        "image": {
          "format": "png", # Must be "png" or "jpeg"
          "source": {
            "bytes": "<base64 image string>"
          },
        },
      },
      {
        "text": "Information for shot 3",
        "image": {
            "format": "png",  # Must be "png" or "jpeg"
            "source": {
                "s3Location": {
                    "uri": "<S3 URI string>",
                    "bucketOwner": "<S3 bucket owner string>" # Optional
                }
            }
        }
      },
    ]
  },
  "videoGenerationConfig": {
        "fps": int,
        "dimension": string, 
        "seed": int
    }
}
```

Diese Eingabeparameter sind erforderlich, um den Videogenerierungsauftrag zu erstellen:
+ **shots** (Erforderlich) – Enthält Informationen zu den Text-Prompts und Eingabebildern, die für die Videogenerierung verwendet werden.
+ **text** (Erforderlich): Ein Text-Prompt zum Generieren des Bildes. Muss zwischen 1 und 512 Zeichen lang sein.
+ **image** (Optional) – Enthält Informationen über das Eingabebild, das für diese Einstellung verwendet wurde. Das Bild kann entweder als Base64-Zeichenfolge im `bytes`-Feld oder als Amazon-S3-URI im `s3Location`-Feld bereitgestellt werden.

  Bilder können im PNG- oder JPEG-Format vorliegen und müssen 8 Bit pro Farbkanal (RGB) aufweisen. PNG-Bilder können einen zusätzlichen Alphakanal enthalten, jedoch darf dieser Kanal keine transparenten oder durchscheinenden Pixel enthalten. Derzeit akzeptiert das Modell nur Bilder mit einer Größe von 1 280 (Breite) x 720 (Höhe).

  In einem Amazon-S3-Bucket enthaltene Bilder dürfen 25 MB nicht überschreiten.
+ **fps** (Erforderlich) – Bildrate des Ausgabevideos. 24 ist derzeit der einzige unterstützte Wert.
+ **dimension** (Erforderlich) – Breite und Höhe des Ausgabevideos. „1 280x720" ist derzeit der einzige unterstützte Wert.
+ **seed**: (Optional) – Bestimmt die anfängliche Einstellung für das Rauschen im Generierungsprozess. Das Ändern des Seed-Wertes bei Beibehaltung aller anderen Parameter erzeugt ein völlig neues Bild, das weiterhin Ihrem Prompt, den Abmessungen und anderen Einstellungen entspricht. Es ist üblich, mit verschiedenen Seed-Werten zu experimentieren, um das optimale Bild zu erzielen.

  Der Seed-Wert muss zwischen 0 und 2 147 483 646 liegen, und der Standardwert ist 42.

------

Der Vorgang der Videogenerierung führt dazu, dass die folgenden Dateien in das von Ihnen angegebene Amazon-S3-Ziel geschrieben werden:
+ **manifest.json** – Eine Datei, die zu Beginn des Auftrags erstellt wird und die Anforderungs-ID enthält.
+ **video-generation-status.json** — Diese Datei wird geschrieben, unabhängig davon, ob der Job erfolgreich ist oder fehlschlägt. Wenn ein Auftrag fehlschlägt, enthält er detaillierte Informationen darüber, welcher Teil des Auftrags fehlgeschlagen ist und welche Maßnahmen zur Behebung des Fehlers zu ergreifen sind.
+ **output.mp4** – Das komplette Multi-Shot-Video. Wird nur geschrieben, wenn der Auftrag erfolgreich ist.
+ **shot\$1N.mp4** – Jede einzelne Einstellung wird auch als eigenes Video bereitgestellt. Der Dateiname folgt dem Format „shot\$10001.mp4“ „shot\$10002.mp4“ usw. Diese Dateien werden nur geschrieben, wenn der gesamte Auftrag erfolgreich ist.

## Der Fortschritt der Videogenerierungsaufträge wird überprüft
<a name="video-gen-check-progress"></a>

Es gibt zwei Möglichkeiten, den Fortschritt eines Videogenerierungsauftrags zu überprüfen. Wenn Sie über einen Verweis auf den Aufruf-ARN verfügen, der beim Starten des Aufrufs zurückgegeben wurde, können Sie die `get_async_invoke()`-Methode der Amazon Bedrock -Laufzeit verwenden.

```
response = bedrock_runtime.get_async_invoke(
    invocationArn="arn:AWS:bedrock:us-east-1:account-id:async-invoke/invocation-id"
)

status = response["status"]
print(f"Status: {status}")
```

Der Status eines Jobs lautet „Abgeschlossen“, "InProgress„oder „Fehlgeschlagen“. Weitere Informationen zur Verwendung der `get_async_invoke()`-Methode finden Sie in der Async-Invoke-API-Dokumentation.

Wenn Sie keinen Verweis auf den Aufruf-ARN haben oder wenn Sie den Status mehrerer Jobs gleichzeitig überprüfen möchten, können Sie die `list_async_invokes()` Methode der Amazon Bedrock Runtime verwenden.

```
invocations_details = bedrock_runtime.list_async_invokes(
    maxResults=10,  # (Optional)
    statusEquals="InProgress",  # (Optional) Can be "Completed", "InProgress", or "Failed". Omit this argument to list all jobs, regardless of status.
    # Note: There are other supported arguments not demonstrated here.
)

print(json.dumps(invocations_details, indent=2, default=str))
```

Weitere Informationen zur Verwendung der `list_async_invokes()`-Methode finden Sie in der Async-Invoke-API-Dokumentation.

## Zugriff auf die Ergebnisse eines Videogenerierungsauftrags
<a name="video-gen-read-results"></a>

Nach dem erfolgreichen Abschluss oder Scheitern eines Videogenerierungsauftrags wird eine JSON-Datei zu Ihrem Amazon-S3-Bucket hinzugefügt. Diese Datei enthält Metadaten zu den Einstellungen, die für das Video erstellt wurden. Die Datei erhält die Bezeichnung `video-generation-status.json`.

Für eine erfolgreiche Anfrage zur Videogenerierung enthält die Datei die Position jeder einzelnen Einstellung, aus der das vollständige Video besteht. Bei einer fehlgeschlagenen Anfrage enthält die Datei die Fehlermeldung und zusätzliche Details darüber, warum der Versuch fehlgeschlagen ist.

Das Schema dieser JSON-Datei ist unten aufgeführt.

```
{
    "schemaVersion": string,
    "shots": [{
            "status": enum, // where success is generation + upload
            "location": string,
            "failureType": enum,
            "failureMessage": string,
        },
        ...
    ],
    "fullVideo": {
        "status": enum, // where success is generation + upload
        "location": string,
        "failureType": enum,
        "failureMessage": string,
    }
}
```
+ **schemaVersion** – Die Version des JSON-Schemas.
+ **shots** – Stellt Informationen zu jeder Einstellung im Video bereit.
  + **status** – Der Abschlussstatus (ERFOLGREICH oder FEHLGESCHLAGEN) der Einstellung.
  + **location** – Der Dateiname und der Amazon-S3-Speicherort, an dem die Einstellung gespeichert wird. Der Speicherort ist erst verfügbar, wenn alle Einstellungen erfolgreich generiert und das vollständige Video an den Amazon-S3-Speicherort hochgeladen wurde. 
  + **failureType** – Gibt den Grund für den Fehler an.
  + **failureMessage** – Stellt weitere Informationen zur Fehlerursache bereit.
+ **fullVideo** – Stellt Informationen zum vollständigen Video bereit.
  + **status** – Der Abschlussstatus (ERFOLGREICH oder FEHLGESCHLAGEN) des vollständigen Videos.
  + **location** – Der Dateiname und der Amazon-S3-Speicherort, an dem das vollständige Video gespeichert wird.
  + **failureType** – Gibt den Grund für den Fehler an.
  + **failureMessage** – Stellt weitere Informationen zur Fehlerursache bereit.

Mögliche Fehlergründe und Meldungen sind
+ INTERNAL\$1SERVER\$1EXCEPTION – „Auf Serverseite ist etwas schiefgelaufen.“
+ RAI\$1VIOLATION\$1OUTPUT\$1VIDEO\$1DEFLECTION – „Der generierte Inhalt wurde von unseren Inhaltsfiltern blockiert.“
+ RATE\$1LIMIT\$1EXCEEDED – „Die Servicekapazitätsgrenze wurde erreicht. Bitte versuchen Sie es später noch einmal.“
+ ABGEBROCHEN – „Die Anfrage wurde abgebrochen.“

# Fehlerbehandlung
<a name="video-gen-errors"></a>

Es gibt drei Haupttypen von Fehlern, die Sie in Ihrem Anwendungscode behandeln möchten. Es handelt sich hierbei um Eingabevalidierungsfehler, Fehler bei der Eingabeabweisung durch AWS verantwortungsvolle KI (RAI) und Fehler bei der Ausgabeabweisung durch RAI. Diese Fehler treten ausschließlich bei Amazon Nova Reel auf.

Eingabevalidierungsfehler treten auf, wenn Ihre Anfrage fehlerhaft ist oder wenn Sie einen nicht unterstützten Wert für einen Eingabeparameter verwenden, beispielsweise einen `duration`-Wert, der nicht mit einem der unterstützten Werte übereinstimmt, oder ein Eingabe-`image`, dessen Auflösung nicht genau 1 280 x 720 beträgt. Alle Eingabevalidierungsfehler werden als **ValidationException** ausgedrückt, die eine Meldungszeichenfolge enthält, welche die Ursache des Problems beschreibt. Diese Ausnahme wird ausgelöst, wenn die `start_async_invoke()` Methode der Amazon Bedrock Runtime aufgerufen wird.

RAI-Eingabeabweisungsfehler treten auf, wenn der eingegebene Textwert oder das Eingabebild als Verstoß gegen die [AWS -Kernprinzipien einer verantwortungsvollen KI](https://aws.amazon.com/ai/responsible-ai/) eingestuft werden. Diese Fehler werden als **ValidationException** mit einer der folgenden Meldungen ausgedrückt:
+ **Eingabetext**-Validierungsmeldung: „Diese Anfrage wurde von unseren Inhaltsfiltern blockiert. Bitte passen Sie Ihren Text-Prompt an, um eine neue Anfrage zu senden.“
+ **Eingabebild**-Validierungsmeldung: „Diese Anfrage wurde von unseren Inhaltsfiltern blockiert. Bitte passen Sie Ihr Eingabebild an, um eine neue Anfrage zu senden.“

Abweisungsfehler bei der RAI-Ausgabe treten auf, wenn ein Video generiert wird, diese jedoch als nicht konform mit [unseren Kernbereichen für verantwortungsvolle KI](https://aws.amazon.com/ai/responsible-ai/) eingestuft wird. Wenn dies der Fall ist, wird keine Ausnahme verwendet. Stattdessen wird der Job als „Fehlgeschlagen“ markiert und die Datei wird nicht in Amazon S3 geschrieben. Bei der Abfrage des Auftragsstatus (beispielsweise mithilfe von `get_invoke()`) enthält die Antwort den `status`-Feldwert „Fehlgeschlagen“ und einen `failureMessage`-Feldwert „Das generierte Video wurde durch unsere Inhaltsfilter blockiert.“

# Beispiele für die Generierung von Single-Shot-Videos
<a name="video-gen-code-examples"></a>

Die folgenden Beispiele enthalten Beispielcode für verschiedene Aufgaben zur Erstellung von Single-Shot-Videos (6 Sekunden).

------
#### [ Text to video ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

import json
import boto3

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client("bedrock-runtime")

model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {
        "text": "Closeup of a large seashell in the sand, gentle waves flow around the shell. Camera zoom in."
    },
    "videoGenerationConfig": {
        "durationSeconds": 6,
        "fps": 24,
        "dimension": "1280x720",
        "seed": 0,  # Change the seed to get a different result
    },
}
try:
    # Start the asynchronous video generation job.
    invocation = bedrock_runtime.start_async_invoke(
        modelId="amazon.nova-reel-v1:1",
        modelInput=model_input,
        outputDataConfig={
            "s3OutputDataConfig": {
                "s3Uri": "s3://my-nova-videos"
            }
        }
    )

    # Print the response JSON.
    print("Response:")
    print(json.dumps(invocation, indent=2, default=str))

except Exception as e:
    # Implement error handling here.
    message = e.response["Error"]["Message"]
    print(f"Error: {message}")
```

------
#### [ Image to video ]

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
import json
import boto3
import base64

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client("bedrock-runtime")

# Load the input image as a Base64 string. Note, the image resolution 
# must be exactly 1280x720.
input_image_path = "images/first-frame.png"
with open(input_image_path, "rb") as f:
    input_image_bytes = f.read()
    input_image_base64 = base64.b64encode(input_image_bytes).decode("utf-8")

model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {
        "text": "Dolly forward over a gentle river",
        "images": [
            {
                "format": "png",
                "source": {
                    "bytes": input_image_base64
                }
            }
        ]
        },
    "videoGenerationConfig": {
        "durationSeconds": 6,
        "fps": 24,
        "dimension": "1280x720",
        "seed": 0
    },
}

# Start the asynchronous video generation job.
invocation = bedrock_runtime.start_async_invoke(
    modelId="amazon.nova-reel-v1:1",
    modelInput=model_input,
    outputDataConfig={
        "s3OutputDataConfig": {
            "s3Uri": "s3://my-nova-videos"
        }
    },
)

# Print the response JSON.
print("Response:")
print(json.dumps(invocation, indent=2, default=str))
```

------
#### [ Query job status ]

```
import json
import boto3

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client("bedrock-runtime")

invocation = bedrock_runtime.get_async_invoke(
    invocationArn="arn:AWS:bedrock:us-east-1:account-id:async-invoke/invocation-id"
)

# Print the JSON response
print(json.dumps(invocation, indent=2, default=str))

invocation_arn = invocation["invocationArn"]
status = invocation["status"]
if (status == "Completed"):
    bucket_uri = invocation["outputDataConfig"]["s3OutputDataConfig"]["s3Uri"]
    video_uri = bucket_uri + "/output.mp4"
    print(f"Video is available at: {video_uri}")

elif (status == "InProgress"):
    start_time = invocation["submitTime"]
    print(f"Job {invocation_arn} is in progress. Started at: {start_time}")

elif (status == "Failed"):
    failure_message = invocation["failureMessage"]
    print(f"Job {invocation_arn} failed. Failure message: {failure_message}")
```

------
#### [ Listing jobs ]

```
import json
import boto3

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client("bedrock-runtime")

# List the 10 most recently completed jobs.
completed_jobs = bedrock_runtime.list_async_invokes(
    maxResults=10,  # (Optional)
    statusEquals="Completed",  # (Optional) Can be "Completed", "InProgress", or "Failed". 
    # Omit this argument to list all jobs, regardless of status.
    # Note: There are other supported arguments not demonstrated here.
)

# Print the JSON response
print(json.dumps(completed_jobs, indent=2, default=str))

# Loop through the completed jobs and print their invocation ARNs.
for job in completed_jobs["asyncInvokeSummaries"]:
    print(job["invocationArn"])
```

------
#### [ Text to video using REST API ]

```
# Invoke the Amazon Nova Reel model to create a video and monitor the status
# of the async job.

# tested with Python 3.12
import json
import time
import uuid
import boto3
import requests as req
import botocore.session

from botocore.auth import SigV4Auth
from typing import Dict, List, Tuple
from botocore.awsrequest import AWSRequest

## ------ Initialize constants to invoke the general async function to call REST APIs for Bedrock ------------
SERVICE_NAME: str = 'bedrock'
MAX_TIME: int = 3600
BUCKET_FOR_VIDEO_CONTENT: str = "s3://your-bucket-name-here"
# Region and model id to use
REGION: str = 'us-east-1'
MODEL_ID: str = 'amazon.nova-reel-v1:1' 

## ------------------------------------------------------------------------------------------------------------

def get_inference(model_id: str, region: str, payload: List) -> Tuple:
    print(f"making an inference request to {model_id}, payload={payload}")
    try:
        ## Initialize the runtime rest API to be called for the endpoint
        endpoint: str = f"https://{SERVICE_NAME}-runtime.{region}.amazonaws.com/async-invoke"
        print(endpoint)
        #endpoint = f"https://{SERVICE_NAME}-runtime.{region}.amazonaws.com/model/{model_id}/async-invoke"

        # Converting the payload dictionary into a JSON-formatted string to be sent in the HTTP request
        request_body = json.dumps(payload[1])
        print(json.dumps(payload[1], indent=2))

        # Creating an AWSRequest object for a POST request with the service specified endpoint, JSON request body, and HTTP headers
        request = AWSRequest(method='POST',
                             url=endpoint,
                             data=request_body,
                             headers={'content-type': 'application/json'})

        # Initializing a botocore session
        session = botocore.session.Session()

        # Adding a SigV4 authentication information to the AWSRequest object, signing the request
        sigv4 = SigV4Auth(session.get_credentials(), SERVICE_NAME, region)
        sigv4.add_auth(request)

        # Prepare the request by formatting it correctly
        prepped = request.prepare()

        # Send the HTTP POST request to the prepared URL with the specified headers and JSON-formatted request body, storing the response
        response = req.post(prepped.url, headers=prepped.headers, data=request_body)

        if response.status_code == 200:
            return (payload[0], response.json())
        else:
            print(f"Error: Received status code {response.status_code}, Response: {response.text}")
            return None
    except Exception as e:
        print(f"Exception occurred: {e}")
        return None


def print_async_job_status(arn, region=REGION):
    # Create the Bedrock Runtime client.
    bedrock_runtime = boto3.client("bedrock-runtime", region_name=region)

    invocation = bedrock_runtime.get_async_invoke(
        invocationArn=arn
    )

    # Print the JSON response
    print(json.dumps(invocation, indent=2, default=str))

    invocation_arn = invocation["invocationArn"]
    status = invocation["status"]
    if (status == "Completed"):
        bucket_uri = invocation["outputDataConfig"]["s3OutputDataConfig"]["s3Uri"]
        video_uri = bucket_uri + "/output.mp4"
        print(f"Video is available at: {video_uri}")

    elif (status == "InProgress"):
        start_time = invocation["submitTime"]
        print(f"Job {invocation_arn} is in progress. Started at: {start_time}")

    elif (status == "Failed"):
        failure_message = invocation["failureMessage"]
        print(f"Job {invocation_arn} failed. Failure message: {failure_message}")
    return status

# Function to create the payload
def create_payload(prompt: str, model_id: str, bucket: str) -> Dict:
    
    payload = {
        "modelId": model_id,
        "modelInput": {
            "taskType": "TEXT_VIDEO",
            "textToVideoParams": {
                "text": prompt
            },
            "videoGenerationConfig": {
                "durationSeconds": 6,
                "fps": 24,
                "dimension": "1280x720",
                "seed": 0
            }
        },
        "outputDataConfig": {
            "s3OutputDataConfig": {
                "s3Uri": bucket
            }
        },
        "clientRequestToken": str(uuid.uuid4())
    }
    return payload

## Initialize the number of prompts you want to invoke on the bedrock specific model
prompts = ["galaxies receding", "event horizon of a black hole"]
payloads: List = [(i, create_payload(p, MODEL_ID, BUCKET_FOR_VIDEO_CONTENT)) for i, p in enumerate(prompts)]

# Start timing before sending the request
print(f"going to make {len(prompts)} requests")
start_time = time.perf_counter()
responses = [get_inference(MODEL_ID, REGION, prompt) for prompt in payloads]
# Calculate the elapsed time
elapsed_time = time.perf_counter() - start_time
print(f"Total time taken for {len(prompts)} calls made: {elapsed_time:.2f} seconds")

invocation_arns = []
for r in responses:
    print(f"response={r}")
    invocation_arns.append(r[1]['invocationArn'])

jobs_total = len(invocation_arns)
jobs_completed = 0
st = time.time()
while True:
    for arn in invocation_arns:
        status = print_async_job_status(arn)
        print(f"arn={arn}, status={status}")
        if status == "Completed":
            jobs_completed += 1
    if jobs_completed == jobs_total:
        print(f"all jobs completed, exiting")
        break
    if time.time() - st > MAX_TIME:
        print(f"{MAX_TIME}s elapsed but seems like all jobs are still not completed, exiting")
        break
    time.sleep(60)
print("all done")
```

------

# Beispielcodes zur Erstellung von Multi-Shot-Videos
<a name="video-gen-code-examples2"></a>

Die folgenden Beispiele enthalten Beispielcode für verschiedene Aufgaben zur Erstellung von Multi-Shot-Videos (länger als 6 Sekunden).

------
#### [ Automated video generation ]

In diesem Beispiel werden alle Einstellungen im Video aus einem einzigen Prompt generiert, und es wird kein Eingabebild bereitgestellt.

```
import json
import os

import boto3
from dotenv import load_dotenv

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# Configure Nova Reel model inputs.
model_input = {
    "taskType": "MULTI_SHOT_AUTOMATED",
    "multiShotAutomatedParams": {
        "text": "Cinematic documentary showcasing the stunning beauty of the natural world. Drone footage flying over fantastical and varied natural wonders."
    },
    "videoGenerationConfig": {
        "seed": 1234,
        "durationSeconds": 18,  # Must be a multiple of 6 in range [12, 120]
        "fps": 24,  # Must be 24
        "dimension": "1280x720",  # Must be "1280x720"
    },
}

try:
    # Start the asynchronous video generation job.
    invocation = bedrock_runtime.start_async_invoke(
        modelId="amazon.nova-reel-v1:1",
        modelInput=model_input,
        outputDataConfig={"s3OutputDataConfig": {"s3Uri": "s3://your-s3-bucket"}},
    )

    # Print the response JSON.
    print(json.dumps(invocation, indent=2, default=str))

except Exception as err:
    print("Exception:")
    if hasattr(err, "response"):
        # Pretty print the response JSON.
        print(json.dumps(err.response, indent=2, default=str))
    else:
        print(err)
```

------
#### [ Manual video generation - Amazon S3 input image ]

In diesem Beispiel wird ein Video mit zwei Einstellungen erstellt. Jede Einstellung wird mit einem separaten Prompt und einem separaten Eingabebild generiert, das an einem Amazon-S3-Speicherort bereitgestellt wird. 

```
import json
import os

import boto3
from dotenv import load_dotenv

# === Helper Function ===


def image_to_base64(image_path: str):
    """
    Convert an image file to a base64 encoded string.
    """
    import base64

    with open(image_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())
        return encoded_string.decode("utf-8")


# === Main Code ===

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# Configure Nova Reel model inputs. This example includes three shots, two of
# which include images to use as starting frames. These images are stored in S3.
model_input = {
    "taskType": "MULTI_SHOT_MANUAL",
    "multiShotManualParams": {
        "shots": [
            {"text": "aerial view of a city with tall glass and metal skyscrapers"},
            {
                "text": "closeup of a vehicle wheel in motion as the pavement speeds by with motion blur",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {
                        "s3Location": {
                            "uri": "s3://your-s3-bucket/images/SUV-wheel-closeup.png"
                        }
                    },
                },
            },
            {
                "text": "tracking shot, the vehicle drives through the city, trees and buildings line the street",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {
                        "s3Location": {
                            "uri": "s3://your-s3-bucket/images/SUV-downtown-back.png"
                        }
                    },
                },
            },
        ]
    },
    "videoGenerationConfig": {
        "seed": 1234,
        "fps": 24,  # Must be 24
        "dimension": "1280x720",  # Must be "1280x720"
    },
}

try:
    # Start the asynchronous video generation job.
    invocation = bedrock_runtime.start_async_invoke(
        modelId="amazon.nova-reel-v1:1",
        modelInput=model_input,
        outputDataConfig={"s3OutputDataConfig": {"s3Uri": "s3://your-s3-bucket"}},
    )

    # Print the response JSON.
    print(json.dumps(invocation, indent=2, default=str))

except Exception as err:
    print("Exception:")
    if hasattr(err, "response"):
        # Pretty print the response JSON.
        print(json.dumps(err.response, indent=2, default=str))
    else:
        print(err)
```

------
#### [ Manual video generation - base64 input image ]

In diesem Beispiel wird ein Video mit drei Einstellungen erstellt. Die erste Einstellung wird lediglich mit einem Prompt generiert, während die nächsten beiden Einstellungen jeweils mit einem neuen Prompt und einem neuen Eingabebild generiert werden.

```
import json
import os

import boto3
from dotenv import load_dotenv

# === Helper Function ===


def image_to_base64(image_path: str):
    """
    Convert an image file to a base64 encoded string.
    """
    import base64

    with open(image_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())
        return encoded_string.decode("utf-8")


# === Main Code ===

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# Configure Nova Reel model inputs. This example includes three shots, two of
# which include images to use as starting frames.
model_input = {
    "taskType": "MULTI_SHOT_MANUAL",
    "multiShotManualParams": {
        "shots": [
            {
                "text": "Drone footage of a Pacific Northwest forest with a meandering stream seen from a high altitude, top-down view"
            },
            {
                "text": "camera arcs slowly around two SUV vehicles in a forest setting with a stream in the background",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {"bytes": image_to_base64("images/SUV-roadside.png")},
                },
            },
            {
                "text": "tracking shot, a SUV vehicle drives toward the camera through a forest roadway, the SUV's ring-shaped headlights glow white",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {"bytes": image_to_base64("images/SUV-forest-front.png")},
                },
            },
        ]
    },
    "videoGenerationConfig": {
        "seed": 1234,
        "fps": 24,  # Must be 24
        "dimension": "1280x720",  # Must be "1280x720"
    },
}

try:
    # Start the asynchronous video generation job.
    invocation = bedrock_runtime.start_async_invoke(
        modelId="amazon.nova-reel-v1:1",
        modelInput=model_input,
        outputDataConfig={"s3OutputDataConfig": {"s3Uri": "s3://your-s3-bucket"}},
    )

    # Print the response JSON.
    print(json.dumps(invocation, indent=2, default=str))

except Exception as err:
    print("Exception:")
    if hasattr(err, "response"):
        # Pretty print the response JSON.
        print(json.dumps(err.response, indent=2, default=str))
    else:
        print(err)
```

------

# Storyboarding-Videos mit Amazon Nova Reel
<a name="video-generation-storyboard"></a>

Amazon Nova Reel bietet die Möglichkeit, Videos in Sechs-Sekunden-Schritten mit einer Länge von bis zu zwei Minuten zu erstellen. Über die Amazon-Bedrock-Plattform können Sie einen einzelnen Prompt bereitstellen, der ein Video mit einer bestimmten Länge generiert. Wenn Sie jedoch mehr Kontrolle über die Themen und die Ausrichtung des Videos wünschen, können Sie das Storyboard verwenden.

Das Storyboard ermöglicht es Ihnen, mehrere Eingabebilder und Prompts bereitzustellen, um das generierte Video besser an Ihr gewünschtes Ergebnis anzupassen. Für jedes Sechs-Sekunden-Intervall haben Sie die Möglichkeit, ein Eingabebild, einen Prompt oder beides bereitzustellen. Diese Eingaben werden zur Erzeugung des Videos verwendet, bis ein anderes Eingabebild oder ein anderer Prompt auftritt. Wenn Sie also möchten, dass Ihr Video zu einem anderen Kamerawinkel wechselt oder sich auf ein anderes Motiv konzentriert, können Sie das Modell entsprechend anweisen.

Um ein Video mit dem Storyboard zu erstellen, führen Sie die folgenden Schritte aus:

1. Öffnen Sie die Amazon Bedrock-Konsole unter [https://console.aws.amazon.com/bedrock/](https://console.aws.amazon.com/bedrock/).

1. Wählen Sie im linken Navigationsbereich unter **Playgrounds** die Option **Bild/Video** aus.

1. Wählen Sie **Modell auswählen** und wählen Sie **Amazon** und **Amazon Nova Reel v1.1** als Anbieter und Modell. Wählen Sie **Anwenden** aus.

1. Verschieben Sie im linken Bereich den Schieberegler, sodass der Wert für **Dauer (Sekunden)** größer als 6 ist.

1. Bitte wählen Sie das Storyboard-Symbol ![\[Striped icon representing a list or menu with multiple items.\]](http://docs.aws.amazon.com/de_de/nova/latest/userguide/images/storyboardIcon.png), um das Storyboard aufzurufen.

1. Fügen Sie im Storyboard Einstellungen hinzu oder entfernen Sie sie, um die gewünschte Länge des erstellten Videos zu erreichen.

1. Für jede Einstellung können Sie ein Bild, einen Text-Prompt oder beides hinzufügen. Sie müssen mindestens einen Text-Prompt zur ersten Einstellung des Storyboards hinzufügen.

1. Nachdem Sie alle Informationen zu den Einstellungen angegeben haben, wählen Sie **Ausführen**. Die Videogenerierung wird bis zur Fertigstellung asynchron ausgeführt. Nach Abschluss des Vorgangs erhalten Sie eine Benachrichtigung, und das Video wird in einem Amazon-S3-Bucket gespeichert.