# Generate images from text prompts

🤖/image/generate generates images from text prompts using AI.

![](/_next/static/media/image-generate.01t94xl9xo0~k.png?dpl=dpl_BKGqLNQjWctpVS239h7ZAKL6edZN)

## Usage example

Inpaint an image by uploading an original image and a mask image, then use both files in /image/generate.

```
{
  "steps": {
    ":original": {
      "robot": "/upload/handle"
    },
    "inpainted": {
      "robot": "/image/generate",
      "use": [
        {
          "name": ":original",
          "as": "image"
        },
        {
          "name": ":original",
          "as": "mask"
        }
      ],
      "model": "google/nano-banana-pro",
      "prompt": "Replace the masked area with a breaching whale. Keep the rest of the image unchanged.",
      "format": "png"
    }
  }
}
```

## Parameters

* ### `interpolate`

`boolean | Record<string, boolean>`\
Controls whether Assembly Variables are interpolated for individual instruction fields.\
By default, most Robot instruction fields interpolate Assembly Variables. Set this to `false` to treat every instruction field as literal text, or set an individual field path to `false` to treat only that field as literal text. For Robot-specific fields that are literal by default, set this to `true` or set that field path to `true` to opt back into interpolation.\
Use field names such as `path`, or dotted paths such as `ffmpeg.vf` for nested objects.

* ### `output_meta`

`Record<string, boolean> | boolean | Array<string>`\
Allows you to specify a set of metadata that is more expensive on CPU power to calculate, and thus is disabled by default to keep your Assemblies processing fast.\
For images, you can add `"has_transparency": true` in this object to extract if the image contains transparent parts and `"dominant_colors": true` to extract an array of hexadecimal color codes from the image.\
For images, you can also add `"blurhash": true` to extract a [BlurHash](https://blurha.sh) string — a compact representation of a placeholder for the image, useful for showing a blurred preview while the full image loads.\
For videos, you can add the `"colorspace: true"` parameter to extract the colorspace of the output video.\
For audio, you can add `"mean_volume": true` to get a single value representing the mean average volume of the audio file.\
You can also set this to `false` to skip metadata extraction and speed up transcoding.

* ### `queue`

`batch`\
Setting the queue to 'batch', manually downgrades the priority of jobs for this step to avoid consuming Priority job slots for jobs that don't need zero queue waiting times

* ### `force_accept`

`boolean` (default: `false`)\
Force a Robot to accept a file type it would have ignored.\
By default, Robots ignore files they are not familiar with.[🤖/video/encode](/docs/robots/video-encode.md), for example, will happily ignore input images.\
With the `force_accept` parameter set to `true`, you can force Robots to accept all files thrown at them. This will typically lead to errors and should only be used for debugging or combatting edge cases.

* ### `ignore_errors`

`boolean | Array<meta | execute>` (default: `[]`)\
Ignore errors during specific phases of processing.\
Setting this to `["meta"]` will cause the Robot to ignore errors during metadata extraction.\
Setting this to `["execute"]` will cause the Robot to ignore errors during the main execution phase.\
Setting this to `true` is equivalent to `["meta", "execute"]` and will ignore errors in both phases.

* ### `use`

`string | Array<string> | Array<object> | object`\
Specifies which Step(s) to use as input.\
For inpainting, provide both the source image and mask through `use`, typically with:

```json
{  
  "use": [  
    { "name": ":original", "as": "image" },  
    { "name": ":original", "as": "mask" }  
  ]  
}  
```

Best practice:

* Tag source and mask inputs explicitly using `as` (or semantic upload field names)
* Keep the prompt focused on what should change in the masked/transparent region
* Leave the model/provider choice to the robot defaults unless you have a specific need
* ### `model`

`string`\
The AI model to use. Defaults to google/nano-banana. Supported models include flux-1.1-pro-ultra, flux-schnell, recraft-v3, google/nano-banana, google/nano-banana-2, google/nano-banana-pro, openai/gpt-image-2, and stability-ai/stable-diffusion-inpainting. The legacy alias gpt-image-2 is also accepted for backwards compatibility.

* ### `prompt` — **required**

`string`\
Prompt describing the desired image. For inpainting, describe what should appear in the masked/transparent region and that the rest should stay unchanged.

* ### `format`

`jpeg | jpg | png | gif | webp | svg`\
Output format. Defaults depend on model: png for Google models and openai/gpt-image-2, svg for recraft-v3, jpeg for others. Google models currently return PNG only.

* ### `seed`

`string | number`\
Seed for the random number generator.

* ### `aspect_ratio`

`string`\
Requested output aspect ratio. For Google models, width/height can also be used and orientation is derived automatically when aspect\_ratio is omitted.

* ### `height`

`string | number`\
Requested output height in pixels (mainly used by Google image models and openai/gpt-image-2).

* ### `width`

`string | number`\
Requested output width in pixels (mainly used by Google image models and openai/gpt-image-2).

* ### `style`

`string`\
Style of the generated image.

* ### `num_outputs`

`string | number`\
Number of output variants to generate (1-10).

* ### `provider`

`string`\
Provider for generating the image.

## Demos

* [AI image generation service with custom dimensions](/demos/artificial-intelligence/generate-ai-images-in-custom-dimensions/)
* [AI image generation service](/demos/artificial-intelligence/generate-images-using-AI/)
* [AI image generation service with multiple variants](/demos/artificial-intelligence/generate-multiple-ai-image-variants/)

## Related blog posts

* [Generate stunning images from text using AI](/blog/2025/04/ai-image-generation/) April 1, 2025
