# Class ImageGenerator

java.lang.Object
com.codename1.ai.ImageGenerator

public abstract class ImageGenerator extends Object

Cloud-first image generation. The `openai` and `replicate` factory methods cover the two dominant managed endpoints. On-device generation via Core ML / ONNX Stable Diffusion is provided separately by the optional `cn1-ai-stablediffusion` cn1lib; see `onDevice()`.

    ImageGenerator.openai(KeyStore.get("openai_key"))
        .generate(new GenerateImageRequest("A cat in a sombrero").setSize("1024x1024"))
        .ready(img -> imageComponent.setIcon(img));

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ImageGenerator()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `abstract AsyncResource<Image>`
  `generate(GenerateImageRequest req)`
  Generates an image without blocking the EDT.
  `static ImageGenerator`
  `onDevice()`
  On-device generator.
  `static ImageGenerator`
  `openai(String apiKey)`
  Creates an OpenAI image generator talking to the public endpoint.
  `static ImageGenerator`
  `openAiCompatible(String baseUrl, String apiKey)`
  Creates a generator for any endpoint that speaks the OpenAI image generation API -- most usefully your own server, holding the provider key and proxying the call, so the device carries nothing more than a short-lived token of yours.
  `static ImageGenerator`
  `replicate(String apiKey)`
  Replicate runs a wide catalog of third-party image models (SDXL, Flux, etc.) behind a uniform REST API.

  ### Methods inherited from class Object

  `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### ImageGenerator

    public ImageGenerator()

- ## Method Details

  - ### openai

    public static ImageGenerator openai(String apiKey)

    Creates an OpenAI image generator talking to the public endpoint.

    Shipping this means the key travels with the app, and a key the running app can read is one its user can extract. For a released build, put the key on your server and point `openAiCompatible(String, String)` at it instead.

    Parameters:
      `apiKey` - OpenAI API key
    Returns:
      configured generator

  - ### openAiCompatible

    public static ImageGenerator openAiCompatible(String baseUrl, String apiKey)
    Creates a generator for any endpoint that speaks the OpenAI image generation API -- most usefully your own server, holding the provider key and proxying the call, so the device carries nothing more than a short-lived token of yours.
    Parameters:
      `baseUrl` - endpoint root, for example `https://api.example.com/ai/v1`; required, because falling back to the public endpoint would send your proxy's token and your user's prompt to a third party
      `apiKey` - credential for that endpoint, or empty when it needs none
    Returns:
      configured generator
    Throws:
      `IllegalArgumentException` - when `baseUrl` is null or empty

  - ### replicate

    public static ImageGenerator replicate(String apiKey)
    Replicate runs a wide catalog of third-party image models (SDXL, Flux, etc.) behind a uniform REST API. Pass the API token from `https://replicate.com/account`.
    Parameters:
      `apiKey` - Replicate API token
    Returns:
      configured generator

  - ### onDevice

    public static ImageGenerator onDevice()
    On-device generator. Requires the optional cn1lib `cn1-ai-stablediffusion`; without it this returns an `AsyncResource` that completes with `UnsupportedOperationException`.
    Returns:
      optional on-device generator or an unsupported stub

  - ### generate

    public abstract AsyncResource<Image> generate(GenerateImageRequest req)
    Generates an image without blocking the EDT.
    Parameters:
      `req` - provider-neutral generation request
    Returns:
      asynchronous generated image