# GenerateImage

Generates images from prompts using an image model.

## Signature

```go
func GenerateImage(ctx context.Context, opts GenerateImageOptions) (*GenerateImageResult, error)
```

## GenerateImageOptions

| Field | Type | Required | Description |
|---|---|---|---|
| `Model` | `provider.ImageModel` | Yes | Image model implementation |
| `Prompt` | `string` | Yes | Prompt text |
| `N` | `*int` | No | Number of images requested |
| `Size` | `string` | No | Provider image size string |
| `AspectRatio` | `string` | No | Aspect ratio string |
| `Seed` | `*int` | No | Deterministic seed |
| `Quality` | `string` | No | Provider quality setting |
| `Style` | `string` | No | Provider style setting |
| `Files` | `[]provider.ImageFile` | No | Input files for edit/variation flows |
| `Mask` | `*provider.ImageFile` | No | Optional mask file |
| `Headers` | `map[string]string` | No | Extra request headers |
| `MaxImagesPerCall` | `int` | No | Override the model's per-call image limit for automatic batching |
| `MaxRetries` | `*int` | No | Maximum retries per image model call; defaults to 2, set to 0 to disable |
| `ProviderOptions` | `map[string]interface{}` | No | Provider-specific options |

## GenerateImageResult

| Field | Type | Description |
|---|---|---|
| `Image` | `types.GeneratedFile` | First generated image |
| `Images` | `[]types.GeneratedFile` | All generated images |
| `Warnings` | `[]types.Warning` | Provider warnings |
| `Responses` | `[]*types.ResponseMetadata` | Provider response metadata entries |
| `ProviderMetadata` | `map[string]interface{}` | Provider-specific metadata |
| `Usage` | `types.ImageUsage` | Image generation usage metrics |

`GeneratedFile.Data` contains binary image bytes. When a provider returns base64 image strings, `GenerateImage` decodes them into `GeneratedFile.Data` so JSON encoding of the result preserves the provider base64 value instead of double-encoding it.

## Example

```go
result, err := ai.GenerateImage(ctx, ai.GenerateImageOptions{
    Model:  imageModel,
    Prompt: "A serene landscape at sunset",
})
if err != nil {
    // handle
}

_ = os.WriteFile("output.png", result.Image.Data, 0644)
```
