Generate images on AWS through Amazon Bedrock with no GPUs to run. This guide covers which model to pick (Stability AI, Amazon Nova Canvas, Amazon Titan Image Generator), the InvokeModel image API, prompting, editing, high-volume generation, S3 and CloudFront, cost, safety and watermarking.
You can rent GPUs and run an open image model yourself, or call a managed model through Bedrock. For most product teams the managed path wins.
Self-hosting means provisioning scarce GPU instances, serving an open model, autoscaling so you do not pay for idle GPUs, and owning drivers, weights, cold starts and queues. It buys control and can be cheaper at very high, steady volume, but it is an infrastructure project first.
With Amazon Bedrock there are no GPUs or clusters to run. You call an image model and pay per image. IAM, PrivateLink, KMS and CloudTrail apply as elsewhere, and your prompts and images are not used to train the base models.
You also get model choice without re-integration. Stability AI, Amazon Nova Canvas and Amazon Titan Image Generator sit behind the same invoke path, so switching is mostly a model-ID change.
Self-host only for a specific open model or fine-tune Bedrock does not offer, or for sustained volume where reserved GPUs clearly win.
Generate the same handful of real prompts on each candidate and compare quality, editing support and per-image cost before you commit.
Stability AI offers tiers from fast, low-cost Stable Image Core through Stable Diffusion 3.x (strong prompt adherence and typography) to Stable Image Ultra (highest quality, for photorealism and hero assets). Amazon Nova Canvas is Amazon's current image model, with built-in editing (inpainting, outpainting) and invisible watermarking. Amazon Titan Image Generator is the older Amazon model, with mature editing including background replacement, and watermarking; for most new builds Nova Canvas is the Amazon choice.
Most products use more than one: a cheap tier for high-volume drafts and a premium tier for finals. Because switching is a model-ID change, "draft many cheap, finish few premium" is easy to build.
Deep dives: Stable Diffusion on Amazon Bedrock, Amazon Nova and Amazon Titan.
| Model | Provider | Editing | Watermark | Relative cost | Use it for |
|---|---|---|---|---|---|
| Stable Image Core | Stability AI | Generation-focused | Provider-dependent | $ | Drafts, thumbnails, iteration |
| Stable Diffusion 3.x | Stability AI | Via edit endpoints | Provider-dependent | $$ | General default; prompt adherence, text |
| Stable Image Ultra | Stability AI | Via edit endpoints | Provider-dependent | $$$$ | Hero and photorealistic finals |
| Amazon Nova Canvas | Amazon | Built in (inpaint, outpaint) | Built in (invisible) | $$ | Amazon-native generation and editing |
| Amazon Titan Image Generator | Amazon | Mature, plus background | Built in (invisible) | $$ | Create-then-edit; existing Titan workloads |
Image generation uses InvokeModel with a model-specific JSON body, not the chat-oriented Converse API.
AWS now enables many Bedrock models by default in commercial Regions (see the model access guide). Amazon models are not sold through AWS Marketplace, so they need no subscription. The first call to a third-party model such as Stability AI starts its Marketplace subscription in the background, so the caller needs aws-marketplace:Subscribe that first time. Check that your chosen model is offered in your Region.
Grant bedrock:InvokeModel on the specific image-model ARNs you use. Calls are logged in CloudTrail, traffic can stay private via PrivateLink, and you can encrypt with your own KMS keys.
Each model has a versioned ID under its provider namespace (for example stability.… or amazon.nova-canvas-…). Read the current ID from the model catalog and keep it in configuration, so switching models is a config change.
Send a JSON body with the prompt and parameters; the response holds the image as base64. Bodies differ: older Stability models take parameters such as cfg_scale, steps and style_preset; newer Stable Image and Amazon models center on the prompt, aspect ratio or size, a negative prompt, a seed, the image count and the output format. Check your model's parameter reference.
import boto3, json, base64
brt = boto3.client("bedrock-runtime", region_name="us-east-1")
body = json.dumps({
"prompt": "studio product photo of a ceramic coffee mug, soft daylight, white seamless background",
"negative_prompt": "text, watermark, hands",
"aspect_ratio": "1:1", "seed": 42, "output_format": "png",
})
resp = brt.invoke_model(modelId="<current-image-model-id>", body=body) # from the model catalog
payload = json.loads(resp["body"].read())
img_b64 = payload["images"][0] # field name varies by model
open("out.png", "wb").write(base64.b64decode(img_b64))
Newer image models reward clear, structured natural-language prompts more than keyword lists.
Describe the finished image from most to least important: subject, action, setting, lighting, style and medium, then camera or composition. "A ceramic coffee mug on a marble counter, morning light from the left, shallow depth of field, product photography, 50mm" works far better than loose tags. Newer models also render typography better when you spell it out.
Use the controls: a negative prompt to exclude artifacts or clutter, a seed to reproduce a composition, and an aspect ratio that matches the asset's use. Older Stability models also expose cfg_scale, steps and style presets.
Treat prompting as a loop: generate a small set of candidates, pick the best, then refine or move to image-to-image. Store good prompts as templates with slots so others can generate on-brand images.
Editing operations make a generator useful in production. Support differs by model, so confirm it for yours.
The production loop is generate, vary, inpaint to fix, outpaint to fit formats, and image-to-image to stay on-brand. Design around "generate then edit," not "generate only."
Running a generator as a product means generating many images, storing them durably and delivering them fast.
For catalog variants or asset libraries, do not fan out thousands of synchronous calls from a web request. Queue prompts in Amazon SQS, have Lambda or AWS Batch workers call InvokeModel with controlled concurrency, and write results to S3. Check whether your image model supports Bedrock batch inference; otherwise this queue pattern is your batch. For steady high volume, look at Provisioned Throughput.
Decode the base64 payload and write it to S3 with a useful key, for example generated/{tenant}/{prompt-hash}/{seed}.png. Store the prompt, negative prompt, model ID, seed and parameters as tags or in DynamoDB so any image can be reproduced. Expire drafts with lifecycle rules, encrypt by default and keep the bucket private.
Serve through CloudFront with the bucket behind origin access control. For private assets, return presigned URLs or signed CloudFront URLs. Add a resize or format step (CloudFront Functions, Lambda@Edge) if you need WebP or AVIF.
Request → SQS → Lambda or Batch worker → Bedrock InvokeModel → decode → S3 (metadata in DynamoDB) → CloudFront or presigned URL. The same skeleton scales from prototype to catalog size.
Bedrock image models are billed per generated image, not per token. There is no token meter and no prompt caching.
The bill is generation (per image) plus supporting services (S3, CloudFront, Lambda or SQS, DynamoDB). Generation dominates at scale. Per-image rates depend on the model, image size and quality tier; older Stability models also price by steps and resolution. See the Bedrock pricing page for current rates.
Three levers, in order: model tier (cheap tier for most images, premium only for finals), size and quality (draft small, render finals large), and candidates per prompt (four variations cost four images). Generate a contact sheet on a low-cost model, then re-render the chosen composition on a premium one.
Shipping generated images means controlling what can be produced, marking AI output, and checking licenses.
Content safety. Filter prompts and moderate outputs. Bedrock Guardrails provides a configurable policy layer, and Amazon Rekognition can moderate images. Log decisions and keep a human review path for edge cases.
Watermarking. Amazon Nova Canvas and Amazon Titan Image Generator add an invisible watermark to every image, and Bedrock can detect it. If you have provenance or authenticity requirements, that is a reason to prefer them.
Licensing. Commercial-use terms are set per model by the provider. Check the model card and terms before using generated images in a paid product.
Two use cases carry most of the value, and both fit the generate-then-edit pipeline.
Ad creative in many formats, social posts, blog headers and localized variants. Use brand prompt templates, generate drafts on a cheap tier, finish on a premium tier, and use outpainting to adapt one approved image to every format.
Background replacement for catalog and lifestyle shots, inpainting for color swaps and fixes, image-to-image for consistent variants, and outpainting for thumbnails and banners. For large catalogs, run the queue pattern overnight, key images by SKU in S3, and serve over CloudFront. Keep real photography for hero shots.
Per-image generation, S3, CloudFront and the rest of the pipeline all draw down AWS credits automatically.
Partner-filed funding: a vetted AWS partner can file POC (proof of concept) funding to prove an image generation use case, MAP funding if you are moving an existing image pipeline from another cloud, or incremental workload (IW) funding if you already run on AWS and this is a new feature. For startups this is typically $50K to $150K. Depends on the workload; AWS approves.
AWS Activate: you apply yourself. Activate Founders gives self-funded startups $1,000 to start, up to $5,000. Activate Portfolio gives up to $200,000 with the Org ID from your VC, accelerator or angel group, if it is an Activate Provider. A consulting partner cannot file Activate for you.
CloudRoute matches you with one vetted AWS partner who can build the pipeline (model routing, InvokeModel integration, S3 and CloudFront, queued generation, safety and watermarking) and check which funding fits. Startups pay CloudRoute nothing. Partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
| Funding | Who files it | Amount | When it fits |
|---|---|---|---|
| Migration Acceleration Program (MAP) | Your matched AWS partner | $50K to $150K for startups. Depends on the workload; AWS approves. | You are not on AWS yet and want to migrate. |
| Proof of concept (POC) funding | Your matched AWS partner | $50K to $150K for startups. Depends on the workload; AWS approves. | You want to test something, whether or not you are on AWS today. |
| Incremental workload (IW) funding | Your matched AWS partner | $50K to $150K for startups. Depends on the workload; AWS approves. | You are already on AWS and are launching new work: a new AI feature, a new customer or a new contract. |
| AWS Activate Founders | Founder applies | $1,000 to start, up to $5,000 | Self-funded startups with no investor or accelerator behind them. |
| AWS Activate Portfolio | Founder applies | up to $200,000 | Startups backed by a VC firm, accelerator or angel investor that is an AWS Activate Provider. |
| AWS Credits for AI Startups | Invite only (AWS account manager) | $200,000 or more, by invitation | AI startups ready to scale after Activate Portfolio, invited by AWS. |
Relative cost runs from $ (cheapest) to $$$$ (premium). Exact rates are on the AWS pricing page, and a test on your own prompts beats any table.
| Model | Provider | Relative cost | Editing | Built-in watermark | Use it for |
|---|---|---|---|---|---|
| Stable Image Core | Stability AI | $ | Generation-focused | Provider-dependent | Drafts, thumbnails, iteration |
| Stable Diffusion 3.x | Stability AI | $$ | Via edit endpoints | Provider-dependent | General default; prompt adherence and text |
| Stable Image Ultra | Stability AI | $$$$ | Via edit endpoints | Provider-dependent | Hero and photorealistic finals |
| Amazon Nova Canvas | Amazon | $$ | Built in (inpaint, outpaint) | Yes (invisible) | Amazon-native generation and editing |
| Amazon Titan Image Generator | Amazon | $$ | Mature, plus background | Yes (invisible) | Create-then-edit; background work |
You fill in a short form: what you run today, what you want to move, test or build, your stage and your region.
We read your answers and pick one vetted AWS consulting partner that fits the work, the stack and the region. We reply within 24 hours; your matched partner reaches out within 5 business days.
Your matched partner scopes the test with you. Then it checks whether the test qualifies for POC (proof of concept) funding. A POC can fit whether or not you run on AWS today.
If the work qualifies, the partner files the funding request with AWS. AWS reviews it and decides. The amount depends on the workload.
CloudRoute is free for startups. Partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
AWS Activate credits are separate, and you apply for them yourself. Use Activate Founders if no investor backs you. Use Activate Portfolio with the Org ID or invite from your VC, accelerator, incubator or angel group if it is an Activate Provider. A consulting partner cannot apply for Activate on your behalf.
A vetted AWS partner can build the pipeline: model routing, S3 and CloudFront, queued generation, and safety and watermarking. The same partner checks whether the work qualifies for POC, MAP or IW funding: typically $50K to $150K for startups. Depends on the workload; AWS approves. CloudRoute is free for startups.