Amazon Titan Image Generator and watermark detection API are now available in Amazon Bedrock
During AWS re:Invent 2023, we announced the preview of Amazon Titan Image Generator, a generative artificial intelligence (generative AI) foundation model (FM) that you can use to quickly create and refine realistic, studio-quality images using English natural language prompts.
I’m happy to share that Amazon Titan Image Generator is now generally available in Amazon Bedrock, giving you an easy way to build and scale generative AI applications with new image generation and image editing capabilities, including instant customization of images.
In my previous post, I also mentioned that all images generated by Titan Image Generator contain an invisible watermark, by default, which is designed to help reduce the spread of misinformation by providing a mechanism to identify AI-generated images.
I’m excited to announce that watermark detection for Titan Image Generator is now generally available in the Amazon Bedrock console. Today, we’re also introducing a new DetectGeneratedContent
API (preview) in Amazon Bedrock that checks for the existence of this watermark and helps you confirm whether an image was generated by Titan Image Generator.
Let me show you how to get started with these new capabilities.
Instant image customization using Amazon Titan Image Generator
You can now generate new images of a subject by providing up to five reference images. You can create the subject in different scenes while preserving its key features, transfer the style from the reference images to new images, or mix styles from multiple reference images. All this can be done without additional prompt engineering or fine-tuning of the model.
For this demo, I prompt Titan Image Generator to create an image of a “parrot eating a banana.” In the first attempt, I use Titan Image Generator to create this new image without providing a reference image.
Note: In the following code examples, I’ll use the AWS SDK for Python (Boto3) to interact with Amazon Bedrock. You can find additional code examples for C#/.NET, Go, Java, and PHP in the Bedrock User Guide.
import boto3
import json
bedrock_runtime = boto3.client(service_name="bedrock-runtime")
body = json.dumps(
{
"taskType": "TEXT_IMAGE",
"textToImageParams": {
"text": "parrot eating a banana",
},
"imageGenerationConfig": {
"numberOfImages": 1,
"quality": "premium",
"height": 768,
"width": 1280,
"cfgScale": 10,
"seed": 42
}
}
)
response = bedrock_runtime.invoke_model(
body=body,
modelId="amazon.titan-image-generator-v1",
accept="application/json",
contentType="application/json"
)
You can display the generated image using the following code.
import io
import base64
from PIL import Image
response_body = json.loads(response.get("body").read())
images = [
Image.open(io.BytesIO(base64.b64decode(base64_image)))
for base64_image in response_body.get("images")
]
for img in images:
display(img)
Here’s the generated image:
Then, I use the new instant image customization capability with the same prompt, but now also providing the following two reference images. For easier comparison, I’ve resized the images, added a caption, and plotted them side by side.
Here’s the code. The new instant customization is available through the IMAGE_VARIATION
task:
# Import reference images
image_path_1 = "parrot-cartoon.png"
image_path_2 = "bird-sketch.png"
with open(image_path_1, "rb") as image_file:
input_image_1 = base64.b64encode(image_file.read()).decode("utf8")
with open(image_path_2, "rb") as image_file:
input_image_2 = base64.b64encode(image_file.read()).decode("utf8")
# ImageVariationParams options:
# text: Prompt to guide the model on how to generate variations
# images: Base64 string representation of a reference image, up to 5 images are supported
# similarityStrength: Parameter you can tune to control similarity with reference image(s)
body = json.dumps(
{
"taskType": "IMAGE_VARIATION",
"imageVariationParams": {
"text": "parrot eating a banana", # Required
"images": [input_image_1, input_image_2], # Required 1 to 5 images
"similarityStrength": 0.7, # Range: 0.2 to 1.0
},
"imageGenerationConfig": {
"numberOfImages": 1,
"quality": "premium",
"height": 768,
"width": 1280,
"cfgScale": 10,
"seed": 42
}
}
)
response = bedrock_runtime.invoke_model(
body=body,
modelId="amazon.titan-image-generator-v1",
accept="application/json",
contentType="application/json"
)
Once again, I’ve resized the generated image, added a caption, and plotted it side by side with the originally generated image.
You can see how the parrot in the second image that has been generated using the instant image customization capability resembles in style the combination of the provided reference images.
Watermark detection for Amazon Titan Image Generator
All Amazon Titan FMs are built with responsible AI in mind. They detect and remove harmful content from data, reject inappropriate user inputs, and filter model outputs. As content creators create realistic-looking images with AI, it’s important to promote responsible development of this technology and reduce the spread of misinformation. That’s why all images generated by Titan Image Generator contain an invisible watermark, by default. Watermark detection is an innovative technology, and Amazon Web Services (AWS) is among the first major cloud providers to widely release built-in watermarks for AI image outputs.
Titan Image Generator’s new watermark detection feature is a mechanism that allows you to identify images generated by Amazon Titan. These watermarks are designed to be tamper-resistant, helping increase transparency around AI-generated content as these capabilities continue to advance.
Watermark detection using the console
Watermark detection is generally available in the Amazon Bedrock console. You can upload an image to detect watermarks embedded in images created by Titan Image Generator, including those generated by the base model and any customized versions. If you upload an image that was not created by Titan Image Generator, then the model will indicate that a watermark has not been detected.
The watermark detection feature also comes with a confidence score. The confidence score represents the confidence level in watermark detection. In some cases, the detection confidence may be low if the original image has been modified. This new capability enables content creators, news organizations, risk analysts, fraud detection teams, and others to better identify and mitigate misleading AI-generated content, promoting transparency and responsible AI deployment across organizations.
Watermark detection using the API (preview)
In addition to watermark detection using the console, we’re introducing a new DetectGeneratedContent
API (preview) in Amazon Bedrock that checks for the existence of this watermark and helps you confirm whether an image was generated by Titan Image Generator. Let’s see how this works.
For this demo, let’s check if the image of the green iguana I showed in the Titan Image Generator preview post was indeed generated by the model.
I define the imports, set up the Amazon Bedrock boto3 runtime client, and base64-encode the image. Then, I call the DetectGeneratedContent
API by specifying the foundation model and providing the encoded image.
import boto3
import json
import base64
bedrock_runtime = boto3.client(service_name="bedrock-runtime")
image_path = "green-iguana.png"
with open(image_path, "rb") as image_file:
input_image_iguana = image_file.read()
response = bedrock_runtime.detect_generated_content(
foundationModelId = "amazon.titan-image-generator-v1",
content = {
"imageContent": { "bytes": input_image_iguana }
}
)
Let’s check the response.
response.get("detectionResult")
'GENERATED'
response.get("confidenceLevel")
'HIGH'
The response GENERATED with the confidence level HIGH confirms that Amazon Bedrock detected a watermark generated by Titan Image Generator.
Now, let’s check another image I generated using Stable Diffusion XL 1.0 on Amazon Bedrock. In this case, a “meerkat facing the sunset.”
I call the API again, this time with the image of the meerkat.
image_path = "meerkat.png"
with open(image_path, "rb") as image_file:
input_image_meerkat = image_file.read()
response = bedrock_runtime.detect_generated_content(
foundationModelId = "amazon.titan-image-generator-v1",
content = {
"imageContent": { "bytes": input_image_meerkat }
}
)
response.get("detectionResult")
'NOT_GENERATED'
And indeed, the response NOT_GENERATED tells me that there was no watermark by Titan Image Generator detected, and therefore, the image most likely wasn’t generated by the model.
Using Amazon Titan Image Generator and watermark detection in the console
Here’s a short demo of how to get started with Titan Image Generator and the new watermark detection feature in the Amazon Bedrock console, put together by my colleague Nirbhay Agarwal.
Availability
Amazon Titan Image Generator, the new instant customization capabilities, and watermark detection in the Amazon Bedrock console are available today in the AWS Regions US East (N. Virginia) and US West (Oregon). Check the full Region list for future updates. The new DetectGeneratedContent
API in Amazon Bedrock is available today in public preview in the AWS Regions US East (N. Virginia) and US West (Oregon).
Amazon Titan Image Generator, now also available in PartyRock
Titan Image Generator is now also available in PartyRock, an Amazon Bedrock playground. PartyRock gives you a no-code, AI-powered app-building experience that doesn’t require a credit card. You can use PartyRock to create apps that generate images in seconds by selecting from your choice of image generation models from Stability AI and Amazon.
More resources
To learn more about the Amazon Titan family of models, visit the Amazon Titan product page. For pricing details, check Amazon Bedrock Pricing.
Give Amazon Titan Image Generator a try in PartyRock or explore the model’s advanced image generation and editing capabilities in the Amazon Bedrock console. Send feedback to AWS re:Post for Amazon Bedrock or through your usual AWS contacts.
For more deep-dive technical content and to engage with the generative AI Builder community, visit our generative AI space at community.aws.
— Antje