Modèles Amazon Titan Image Generator G1 - Amazon Bedrock

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Modèles Amazon Titan Image Generator G1

Amazon Titan Image Generator G1 V1 et les Titan Image Generator G1 V2 modèles prennent en charge les paramètres d'inférence et les réponses du modèle suivants lors de l'inférence de modèle.

Format de demande et de réponse

Lorsque vous passez un InvokeModelappel à l'aide des modèles Amazon Titan Image Generator, remplacez le body champ de la demande par le format correspondant à votre cas d'utilisation. Toutes les tâches partagent un objet imageGenerationConfig, mais chaque tâche a un objet paramètres spécifique. Les cas d’utilisation suivants sont pris en charge.

taskType Champ des paramètres de tâche Type de tâche Définition
TEXT_IMAGE textToImageParams Génération

Générez une image à l’aide d’une invite de texte.

TEXT_IMAGE textToImageParams Génération

(Conditionnement d'image V2 uniquement) Fournissez une image de conditionnement d'entrée supplémentaire ainsi qu'une invite de texte pour générer une image conforme à la mise en page et à la composition de l'image de conditionnement.

INPAINTING inPaintingParams Modification

Modifiez une image en adaptant l’intérieur d’un masque à l’arrière-plan environnant.

OUTPAINTING outPaintingParams Modification Modifiez une image en étendant en toute transparence la région définie par le masque.
IMAGE_VARIATION imageVariationParams Modification Modifiez une image en produisant des variations de l’image d’origine.
COLOR_GUIDED_GENERATION (V2 only) colorGuidedGenerationParams Génération Fournissez une liste de codes couleur hexadécimaux ainsi qu'une invite de texte pour générer une image conforme à la palette de couleurs.
BACKGROUND_REMOVAL (V2 only) backgroundRemovalParams Modification Modifiez une image en identifiant plusieurs objets et en supprimant l'arrière-plan, pour obtenir une image avec un arrière-plan transparent.

Les tâches de modification nécessitent un champ image dans l’entrée. Ce champ est constitué d’une chaîne qui définit les pixels de l’image. Chaque pixel est défini par 3 RGB canaux, dont chacun est compris entre 0 et 255 (par exemple, (255 255 0) représenterait la couleur jaune). Ces canaux sont codés en base64.

L'image que vous utilisez doit être au PNG format JPEG OR.

Si vous effectuez un inpainting ou un outpainting, vous définissez également un masque, une ou plusieurs régions qui définissent les parties de l’image à modifier. Vous pouvez définir le masque de deux manières.

  • maskPrompt : rédigez une invite de texte pour décrire la partie de l’image à masquer.

  • maskImage : entrez une chaîne codée en base64 qui définit les régions masquées en marquant chaque pixel de l’image d’entrée comme (0 0 0) ou (255 255 255).

    • Un pixel défini comme (0 0 0) est un pixel situé à l’intérieur du masque.

    • Un pixel défini comme (255 255 255) est un pixel situé à l’extérieur du masque.

    Vous pouvez utiliser un outil de retouche photo pour dessiner des masques. Vous pouvez ensuite convertir la sortie JPEG ou PNG l'image en codage base64 pour entrer dans ce champ. Sinon, utilisez à la place le champ maskPrompt pour permettre au modèle d’inférer le masque.

Sélectionnez un onglet pour afficher les corps de API demande correspondant aux différents cas d'utilisation de la génération d'images et les explications des champs.

Text-to-image generation (Request)

Une invite de texte pour générer l'image doit comporter au moins 512 caractères. Résolutions <= 1 408 sur le côté le plus long. negativeText (Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image contenant <= 512 caractères. Consultez le tableau ci-dessous pour une liste complète des résolutions.

{ "taskType": "TEXT_IMAGE", "textToImageParams": { "text": "string", "negativeText": "string" }, "imageGenerationConfig": { "numberOfImages": int, "height": int, "width": int, "cfgScale": float, "seed": int } }

Les champs textToImageParams sont décrits ci-dessous.

  • text (obligatoire) : invite de texte pour générer l’image.

  • negativeText(Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image.

    Note

    N’utilisez pas de mots négatifs dans l’invite negativeText. Par exemple, si vous ne souhaitez pas inclure de miroirs dans une image, saisissez mirrors dans l’invite negativeText. Ne saisissez pas no mirrors.

Inpainting (Request)

text (facultatif) : invite de texte pour définir les modifications à l’intérieur du masque. Si vous n’incluez pas ce champ, le modèle essaie de remplacer toute la zone du masque par l’arrière-plan. Doit contenir <= 512 caractères. negativeText (Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image. Doit contenir <= 512 caractères. Les limites de taille pour l'image d'entrée et le masque de saisie sont <= 1 408 sur le côté le plus long de l'image. La taille de sortie est identique à la taille d'entrée.

{ "taskType": "INPAINTING", "inPaintingParams": { "image": "base64-encoded string", "text": "string", "negativeText": "string", "maskPrompt": "string", "maskImage": "base64-encoded string", "returnMask": boolean # False by default }, "imageGenerationConfig": { "numberOfImages": int, "height": int, "width": int, "cfgScale": float } }

Les champs inPaintingParams sont décrits ci-dessous. Le masque définit la partie de l’image que vous souhaitez modifier.

  • image (obligatoire) — L'PNGimage JPEG ou à modifier, formatée sous forme de chaîne spécifiant une séquence de pixels, chacun étant défini en RGB valeurs et codé en base64. Pour des exemples de codage d’une image en base64, de décodage d’une chaîne codée en base64 et de transformation de celle-ci en image, consultez les exemples de code.

  • Pour définir le masque, vous devez définir l’un des champs suivants (mais pas les deux).

    • maskPrompt— Une invite textuelle qui définit le masque.

    • maskImage— Chaîne qui définit le masque en spécifiant une séquence de pixels de la même taille que leimage. Chaque pixel est transformé en une RGB valeur de (0 0 0) (un pixel à l'intérieur du masque) ou (255 255 255) (un pixel à l'extérieur du masque). Pour des exemples de codage d’une image en base64, de décodage d’une chaîne codée en base64 et de transformation de celle-ci en image, consultez les exemples de code.

  • text (facultatif) : invite de texte pour définir les modifications à l’intérieur du masque. Si vous n’incluez pas ce champ, le modèle essaie de remplacer toute la zone du masque par l’arrière-plan.

  • negativeText(Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image.

    Note

    N’utilisez pas de mots négatifs dans l’invite negativeText. Par exemple, si vous ne souhaitez pas inclure de miroirs dans une image, saisissez mirrors dans l’invite negativeText. Ne saisissez pas no mirrors.

Outpainting (Request)

text (obligatoire) : invite de texte pour définir les éléments à modifier en dehors du masque. Doit contenir <= 512 caractères. negativeText (Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image. Doit contenir <= 512 caractères. Les limites de taille pour l'image d'entrée et le masque de saisie sont <= 1 408 sur le côté le plus long de l'image. La taille de sortie est identique à la taille d'entrée.

{ "taskType": "OUTPAINTING", "outPaintingParams": { "text": "string", "negativeText": "string", "image": "base64-encoded string", "maskPrompt": "string", "maskImage": "base64-encoded string", "returnMask": boolean, # False by default "outPaintingMode": "DEFAULT | PRECISE" }, "imageGenerationConfig": { "numberOfImages": int, "height": int, "width": int, "cfgScale": float } }

Les champs outPaintingParams sont définis ci-dessous. Le masque définit la région de l’image que vous ne souhaitez pas modifier. La génération étend en toute transparence la région que vous définissez.

  • image (obligatoire) — L'PNGimage JPEG ou à modifier, formatée sous forme de chaîne spécifiant une séquence de pixels, chacun étant défini en RGB valeurs et codé en base64. Pour des exemples de codage d’une image en base64, de décodage d’une chaîne codée en base64 et de transformation de celle-ci en image, consultez les exemples de code.

  • Pour définir le masque, vous devez définir l’un des champs suivants (mais pas les deux).

    • maskPrompt— Une invite textuelle qui définit le masque.

    • maskImage— Chaîne qui définit le masque en spécifiant une séquence de pixels de la même taille que leimage. Chaque pixel est transformé en une RGB valeur de (0 0 0) (un pixel à l'intérieur du masque) ou (255 255 255) (un pixel à l'extérieur du masque). Pour des exemples de codage d’une image en base64, de décodage d’une chaîne codée en base64 et de transformation de celle-ci en image, consultez les exemples de code.

  • text (obligatoire) : invite de texte pour définir les éléments à modifier en dehors du masque.

  • negativeText(Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image.

    Note

    N’utilisez pas de mots négatifs dans l’invite negativeText. Par exemple, si vous ne souhaitez pas inclure de miroirs dans une image, saisissez mirrors dans l’invite negativeText. Ne saisissez pas no mirrors.

  • outPaintingMode— Spécifie s'il faut autoriser ou non la modification des pixels à l'intérieur du masque. Les valeurs suivantes sont possibles.

    • DEFAULT— Utilisez cette option pour autoriser la modification de l'image à l'intérieur du masque afin qu'elle reste cohérente avec l'arrière-plan reconstruit.

    • PRECISE— Utilisez cette option pour empêcher la modification de l'image à l'intérieur du masque.

Image variation (Request)

Les variations d'image vous permettent de créer des variations de votre image d'origine en fonction des valeurs des paramètres. La limite de taille de l'image d'entrée est <= 1 408 sur le côté le plus long de l'image. Consultez le tableau ci-dessous pour une liste complète des résolutions.

  • text (facultatif) : invite de texte qui permet de définir les éléments à conserver et ceux à modifier dans l’image. Doit contenir <= 512 caractères.

  • negativeText (Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image. Doit contenir <= 512 caractères.

  • text (facultatif) : invite de texte qui permet de définir les éléments à conserver et ceux à modifier dans l’image. Doit contenir <= 512 caractères.

  • similarityStrength (Facultatif) — Spécifie dans quelle mesure l'image générée doit être similaire aux images d'entrée. Utilisez une valeur inférieure pour introduire un caractère plus aléatoire dans la génération. La plage acceptée est comprise entre 0,2 et 1,0 (les deux inclus), tandis que la valeur par défaut de 0,7 est utilisée si ce paramètre est absent de la demande.

{ "taskType": "IMAGE_VARIATION", "imageVariationParams": { "text": "string", "negativeText": "string", "images": ["base64-encoded string"], "similarityStrength": 0.7, # Range: 0.2 to 1.0 }, "imageGenerationConfig": { "numberOfImages": int, "height": int, "width": int, "cfgScale": float } }

Les champs imageVariationParams sont définis ci-dessous.

  • images (obligatoire) : liste d’images pour lesquelles générer des variations. Vous pouvez inclure de 1 à 5 images. Une image est définie comme une chaîne d'image codée en base64. Pour des exemples de codage d’une image en base64, de décodage d’une chaîne codée en base64 et de transformation de celle-ci en image, consultez les exemples de code.

  • text (facultatif) : invite de texte qui permet de définir les éléments à conserver et ceux à modifier dans l’image.

  • similarityStrength(Facultatif) — Spécifie dans quelle mesure l'image générée doit être similaire aux images d'entrée. Plage comprise entre 0,2 et 1,0, les valeurs les plus faibles étant utilisées pour introduire davantage de caractère aléatoire.

  • negativeText(Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image.

    Note

    N’utilisez pas de mots négatifs dans l’invite negativeText. Par exemple, si vous ne souhaitez pas inclure de miroirs dans une image, saisissez mirrors dans l’invite negativeText. Ne saisissez pas no mirrors.

Conditioned Image Generation (Request) V2 only

Le type de tâche de génération d'image conditionnée permet aux clients d'augmenter la text-to-image génération en fournissant une « image de condition » afin d'obtenir un contrôle plus fin de l'image générée.

  • Détection astucieuse des bords

  • Carte de segmentation

Le texte demandé pour générer l'image doit comporter au moins 512 caractères. Résolutions <= 1 408 sur le côté le plus long. negativeText (Facultatif) est une invite de texte permettant de définir les éléments à ne pas inclure dans l'image. Elle comporte <= 512 caractères. Consultez le tableau ci-dessous pour une liste complète des résolutions.

{ "taskType": "TEXT_IMAGE", "textToImageParams": { "text": "string", "negativeText": "string", "conditionImage": "base64-encoded string", # [OPTIONAL] base64 encoded image "controlMode": "string", # [OPTIONAL] CANNY_EDGE | SEGMENTATION. DEFAULT: CANNY_EDGE "controlStrength": float # [OPTIONAL] weight given to the condition image. DEFAULT: 0.7 }, "imageGenerationConfig": { "numberOfImages": int, "height": int, "width": int, "cfgScale": float, "seed": int } }
  • text (obligatoire) : invite de texte pour générer l’image.

  • negativeText(Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image.

    Note

    N’utilisez pas de mots négatifs dans l’invite negativeText. Par exemple, si vous ne souhaitez pas inclure de miroirs dans une image, saisissez mirrors dans l’invite negativeText. Ne saisissez pas no mirrors.

  • conditionImage(Facultatif-V2 uniquement) — Une image de conditionnement en entrée unique qui guide la mise en page et la composition de l'image générée. Une image est définie comme une chaîne d'image codée en base64. Pour des exemples sur la façon de coder une image en base64, de décoder une chaîne codée en base64 et de la transformer en image.

  • controlMode(Facultatif-V2 uniquement) — Spécifie le type de mode de conditionnement à utiliser. Deux types de modes de conditionnement sont pris en charge : CANNY _ EDGE etSEGMENTATION. La valeur par défaut est CANNY _EDGE.

  • controlStrength(Facultatif-V2 uniquement) — Spécifie dans quelle mesure la mise en page et la composition de l'image générée doivent être similaires à celles de. conditioningImage Plage comprise entre 0 et 1,0, les valeurs les plus faibles étant utilisées pour introduire davantage de caractère aléatoire. La valeur par défaut est 0,7.

Note

Si controlMode ou controlStrength sont fournis, ils conditionImage doivent également être fournis.

Color Guided Content (Request) V2 only

Fournissez une liste de codes couleur hexadécimaux ainsi qu'une invite de texte pour générer une image conforme à la palette de couleurs. Une invite de texte est requise pour générer l'image qui doit comporter <= 512 caractères. La résolution maximale est de 1 408 sur le côté le plus long. Une liste de 1 à 10 codes couleur hexadécimaux est requise pour spécifier les couleurs de l'image générée. negativeText Facultatif. Une invite de texte pour définir les éléments à ne pas inclure dans l'image <= 512 caractères ( referenceImage facultatif) une image de référence supplémentaire pour guider la palette de couleurs de l'image générée. La taille limite pour l'image de RGB référence téléchargée par l'utilisateur est <= 1 408 sur le côté le plus long.

{ "taskType": "COLOR_GUIDED_GENERATION", "colorGuidedGenerationParams": { "text": "string", "negativeText": "string", "referenceImage" "base64-encoded string", # [OPTIONAL] "colors": ["string"] # list of color hex codes }, "imageGenerationConfig": { "numberOfImages": int, "height": int, "width": int, "cfgScale": float, "seed": int } }

Les champs colorGuidedGeneration Params sont décrits ci-dessous. Notez que ce paramètre ne concerne que la V2.

  • text (obligatoire) : invite de texte pour générer l’image.

  • couleurs (obligatoire) : liste de 10 codes couleur hexadécimaux maximum pour spécifier les couleurs de l'image générée.

  • negativeText(Facultatif) — Une invite de texte pour définir les éléments à ne pas inclure dans l'image.

    Note

    N’utilisez pas de mots négatifs dans l’invite negativeText. Par exemple, si vous ne souhaitez pas inclure de miroirs dans une image, saisissez mirrors dans l’invite negativeText. Ne saisissez pas no mirrors.

  • referenceImage(Facultatif) — Image de référence en entrée unique qui guide la palette de couleurs de l'image générée. Une image est définie comme une chaîne d'image codée en base64.

Background Removal (Request)

Le type de tâche de suppression de l'arrière-plan identifie automatiquement plusieurs objets dans l'image d'entrée et supprime l'arrière-plan. L'image de sortie possède un arrière-plan transparent.

Format de demande

{ "taskType": "BACKGROUND_REMOVAL", "backgroundRemovalParams": { "image": "base64-encoded string" } }

Format de réponse

{ "images": [ "base64-encoded string", ... ], "error": "string" }

Le backgroundRemovalParams champ est décrit ci-dessous.

  • image (obligatoire) — L'PNGimage JPEG ou à modifier, formatée sous forme de chaîne spécifiant une séquence de pixels, chacun étant défini en RGB valeurs et codé en base64.

Response body
{ "images": [ "base64-encoded string", ... ], "error": "string" }

Le corps de la réponse est un objet de streaming qui contient l’un des champs suivants.

  • images : si la demande aboutit, elle renvoie ce champ, une liste de chaînes codées en base64, chacune définissant une image générée. Chaque image est formatée sous la forme d'une chaîne qui spécifie une séquence de pixels, chacun étant défini en RGB valeurs et codé en base64. Pour des exemples de codage d’une image en base64, de décodage d’une chaîne codée en base64 et de transformation de celle-ci en image, consultez les exemples de code.

  • error : si la demande enfreint la politique de modération du contenu dans l’un des cas suivants, un message est renvoyé dans ce champ.

    • Si le texte, l’image ou l’image du masque d’entrée est signalé par la politique de modération du contenu.

    • Si au moins une image de sortie est signalée par la politique de modération du contenu

L’objet imageGenerationConfig partagé et facultatif contient les champs suivants. Si vous n’incluez pas cet objet, les configurations par défaut sont utilisées.

  • numberOfImages(Facultatif) — Le nombre d'images à générer.

    Minimum Maximum Par défaut
    1 5 1
  • cfgScale(Facultatif) — Spécifie dans quelle mesure l'image générée doit respecter l'invite. Utilisez une valeur inférieure pour renforcer le caractère aléatoire de la génération.

    Minimum Maximum Par défaut
    1.1 10,0 8.0
  • Les paramètres suivants définissent la taille que vous souhaitez donner à l’image de sortie. Pour plus d’informations sur la tarification par taille d’image, consultez Tarification d’Amazon Bedrock.

    • height (facultatif) : hauteur de l’image en pixels. La valeur par défaut est 1408.

    • width (facultatif) : largeur de l’image en pixels. La valeur par défaut est 1408.

    Les tailles suivantes sont autorisées.

    Largeur Hauteur Proportions Prix équivalent à
    1 024 1 024 1:1 1024 x 1024
    768 768 1:1 512 x 512
    512 512 1:1 512 x 512
    768 1 152 2:3 1024 x 1024
    384 576 2:3 512 x 512
    1 152 768 3:2 1024 x 1024
    576 384 3:2 512 x 512
    768 1280 3:5 1024 x 1024
    384 640 3:5 512 x 512
    1280 768 5:3 1024 x 1024
    640 384 5:3 512 x 512
    896 1 152 7:9 1024 x 1024
    448 576 7:9 512 x 512
    1 152 896 9:7 1024 x 1024
    576 448 9:7 512 x 512
    768 1 408 6:11 1024 x 1024
    384 704 6:11 512 x 512
    1 408 768 11:6 1024 x 1024
    704 384 11:6 512 x 512
    640 1 408 5:11 1024 x 1024
    320 704 5:11 512 x 512
    1 408 640 11 h 5 1024 x 1024
    704 320 11 h 5 512 x 512
    1 152 640 9:5 1024 x 1024
    1173 640 16:9 1024 x 1024
  • seed (facultatif) : à utiliser pour contrôler et reproduire les résultats. Détermine le réglage initial du bruit. Utilisez le même amorçage et les mêmes paramètres que lors de l'exécution précédente pour permettre à l'inférence de créer une image similaire.

    Minimum Maximum Par défaut
    0 2 147 483 646 0

Exemples de code

Les exemples suivants montrent comment invoquer les modèles Amazon Titan Image Generator avec un débit à la demande en PythonSDK. Sélectionnez un onglet pour voir un exemple de chaque cas d’utilisation. Chaque exemple affiche l’image à la fin.

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 Titan Image Generator G1 model (on demand). """ import base64 import io import json import logging import boto3 from PIL import Image from botocore.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by Amazon Titan Image Generator G1" 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 Titan Image Generator G1 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 Titan Image Generator G1 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') 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 Titan Image Generator G1 model %s", model_id) return image_bytes def main(): """ Entrypoint for Amazon Titan Image Generator G1 example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = 'amazon.titan-image-generator-v1' 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: %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 Titan Image Generator G1 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 Titan Image Generator G1 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.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by Amazon Titan Image Generator G1" 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 Titan Image Generator G1 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 Titan Image Generator G1 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') 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 Titan Image Generator G1 model %s", model_id) return image_bytes def main(): """ Entrypoint for Amazon Titan Image Generator G1 example. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = 'amazon.titan-image-generator-v1' # 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 Titan Image Generator G1 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 Titan Image Generator G1 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.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by Amazon Titan Image Generator G1" 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 Titan Image Generator G1 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 Titan Image Generator G1 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') 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 Titan Image Generator G1 model %s", model_id) return image_bytes def main(): """ Entrypoint for Amazon Titan Image Generator G1 example. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = 'amazon.titan-image-generator-v1' # 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 Titan Image Generator G1 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 Titan Image Generator G1 model (on demand). """ import base64 import io import json import logging import boto3 from PIL import Image from botocore.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by Amazon Titan Image Generator G1" 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 Titan Image Generator G1 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 Titan Image Generator G1 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') 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 Titan Image Generator G1 model %s", model_id) return image_bytes def main(): """ Entrypoint for Amazon Titan Image Generator G1 example. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = 'amazon.titan-image-generator-v1' # 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 Titan Image Generator G1 model {model_id}.") if __name__ == "__main__": main()
Image conditioning (V2 only)
# 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 Titan Image Generator G1 V2 model (on demand). """ import base64 import io import json import logging import boto3 from PIL import Image from botocore.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by Amazon Titan Image Generator V2" 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 Titan Image Generator V2 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 Titan Image Generator V2 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') 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 Titan Image Generator V2 model %s", model_id) return image_bytes def main(): """ Entrypoint for Amazon Titan Image Generator V2 example. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = 'amazon.titan-image-generator-v2: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 Titan Image Generator V2 model {model_id}.") if __name__ == "__main__": main()
Color guided content (V2 only)
# 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 Titan Image Generator G1 V2 model (on demand). """ import base64 import io import json import logging import boto3 from PIL import Image from botocore.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by Amazon Titan Image Generator V2" 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 Titan Image Generator V2 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 Titan Image Generator V2 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') 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 Titan Image Generator V2 model %s", model_id) return image_bytes def main(): """ Entrypoint for Amazon Titan Image Generator V2 example. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = 'amazon.titan-image-generator-v2: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 Titan Image Generator V2 model {model_id}.") if __name__ == "__main__": main()
Background removal (V2 only)
# 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 Titan Image Generator G1 V2 model (on demand). """ import base64 import io import json import logging import boto3 from PIL import Image from botocore.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by Amazon Titan Image Generator V2" 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 Titan Image Generator V2 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 Titan Image Generator V2 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') 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 Titan Image Generator V2 model %s", model_id) return image_bytes def main(): """ Entrypoint for Amazon Titan Image Generator V2 example. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = 'amazon.titan-image-generator-v2: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 Titan Image Generator V2 model {model_id}.") if __name__ == "__main__": main()