Skip to content

Images

Generate images and extract text descriptions from existing images.

Quick Example

php
use Atlasphp\Atlas\Atlas;

$response = Atlas::image('openai', 'dall-e-3')
    ->instructions('A serene mountain landscape at sunset')
    ->asImage();

echo $response->url;  // URL to generated image

Image Generation

php
$response = Atlas::image('openai', 'dall-e-3')
    ->instructions('A futuristic city skyline')
    ->withSize('1024x1024')
    ->withQuality('hd')
    ->withFormat('png')
    ->asImage();

$response->url;            // Image URL (string or array for multiple)
$response->revisedPrompt;  // The prompt as revised by the provider
$response->base64;         // Base64 data (if requested)
$response->format;         // Image format

Multiple Images

php
$response = Atlas::image('openai', 'dall-e-3')
    ->instructions('A watercolor painting of flowers')
    ->withCount(3)
    ->asImage();

// $response->url is an array when count > 1

With Variables

php
$response = Atlas::image('openai', 'dall-e-3')
    ->instructions('A {STYLE} painting of {SUBJECT}')
    ->withVariables(['STYLE' => 'impressionist', 'SUBJECT' => 'a garden'])
    ->asImage();

Image-to-Text

Describe or analyze an existing image:

php
use Atlasphp\Atlas\Input\Image;

$response = Atlas::image('openai', 'gpt-4o')
    ->instructions('Describe this image in detail.')
    ->withMedia([Image::fromUrl('https://example.com/photo.jpg')])
    ->asText();

echo $response->text;  // "This image shows..."

From Different Sources

php
// From URL
Image::fromUrl('https://example.com/image.png')

// From local file
Image::fromPath('/path/to/image.jpg')

// From Laravel storage
Image::fromStorage('images/photo.jpg', 'public')

// From base64
Image::fromBase64($data, 'image/png')

// From upload
Image::fromUpload($request->file('image'))

Storing Images

php
$response = Atlas::image('openai', 'dall-e-3')
    ->instructions('A cute robot')
    ->asImage();

// Store to disk manually
$path = $response->store('public');        // Returns storage path
$path = $response->storeAs('images/robot.png', 'public');

Automatic Storage

When persistence is enabled, generated images are automatically stored to disk and tracked as Asset records — no manual store() call needed. Access the asset via $response->asset. See Media & Assets for details.

Supported Providers

ProviderModelsCapabilities
OpenAIdall-e-3, dall-e-2, gpt-image-1Generation, sizes, quality, format
Googlegemini-2.0-flashGeneration
xAIgrok-2-imageGeneration

ImageResponse

PropertyTypeDescription
urlstring|arrayGenerated image URL(s)
revisedPrompt?stringProvider-revised prompt
base64?stringBase64 image data
format?stringImage format
metaarrayAdditional metadata
asset?AssetLinked asset (when persistence enabled)

Persisted Asset

When persistence is enabled, generated images are automatically stored to disk and an Asset record is created. Access it directly from the response:

php
$response = Atlas::image('openai', 'dall-e-3')
    ->instructions('A cute robot')
    ->asImage();

if ($response->asset) {
    $response->asset->id;           // Asset record ID
    $response->asset->path;         // Storage path on disk
    $response->asset->disk;         // Laravel filesystem disk
    $response->asset->mime_type;    // "image/png"
    $response->asset->size_bytes;   // File size
}

Without persistence, $response->asset is null. You can still store manually with $response->store().

See Media & Assets for the complete storage guide.

Queue Support

Dispatch image generation to a queue. The terminal method returns a PendingExecution instead of the response:

php
Atlas::image('openai', 'dall-e-3')
    ->instructions('A landscape painting')
    ->queue()
    ->asImage()
    ->then(function ($response) {
        // Runs in the queue worker after generation completes
        logger()->info('Image generated', ['url' => $response->url]);
    })
    ->catch(function ($e) {
        logger()->error('Image generation failed', ['error' => $e->getMessage()]);
    });
php
// With queue options
Atlas::image('openai', 'dall-e-3')
    ->instructions('A detailed portrait')
    ->queue('atlas-media')
    ->onConnection('redis')
    ->asImage();

Builder Reference

MethodDescription
instructions(string)Image generation prompt
withMedia(array)Input images for image-to-text
withSize(string)Image dimensions (e.g. '1024x1024')
withQuality(string)Quality level (e.g. 'hd', 'standard')
withFormat(string)Output format (e.g. 'png', 'webp')
withCount(int)Number of images to generate
withProviderOptions(array)Provider-specific options
withVariables(array)Variables for instruction interpolation
withMeta(array)Metadata for middleware/events
withMiddleware(array)Per-request provider middleware
queue()Dispatch to queue

Released under the MIT License.