Skip to main content

generateImage()

Create a new text-to-image generation task.
<?php
require_once(__DIR__ . '/vendor/autoload.php');

use OpenAPI\Client\Configuration;
use OpenAPI\Client\Api\ImageGenerationApi;
use OpenAPI\Client\Model\DiffusionRequest;

// Configure API client
$config = Configuration::getDefaultConfiguration();
$config->setApiKey('x-api-key', getenv('LEGNEXT_API_KEY'));
$config->setHost('https://api.legnext.ai');

$api = new ImageGenerationApi(null, $config);

try {
    $request = new DiffusionRequest();
    $request->setText('a serene mountain landscape at sunset');
    $request->setCallback('https://your-domain.com/webhook');

    $response = $api->generateImage($request);

    echo "Job ID: " . $response->getJobId() . "\n";
    echo "Status: " . $response->getStatus() . "\n";

} catch (\OpenAPI\Client\ApiException $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>
Parameters:
  • text (string): Text prompt (1-8192 characters)
  • callback (string, optional): Webhook URL for completion notification
Returns: Response with job_id and status

varyImage()

Create variations of a generated image.
<?php
use OpenAPI\Client\Model\VaryRequest;

$request = new VaryRequest();
$request->setJobId('original-job-id');
$request->setImageNo(0);
$request->setType(1);  // 0=Subtle, 1=Strong
$request->setRemixPrompt('add more clouds');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->varyImage($request);

echo "Variation Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • image_no (int): Image index (0-3)
  • type (int): Variation type (0=Subtle, 1=Strong)
  • remix_prompt (string, optional): Additional prompt for variation
  • callback (string, optional): Webhook URL for completion notification

upscaleImage()

Upscale a generated image to higher resolution.
<?php
use OpenAPI\Client\Model\UpscaleRequest;

$request = new UpscaleRequest();
$request->setJobId('original-job-id');
$request->setImageNo(0);
$request->setType(1);  // 0=Subtle, 1=Creative
$request->setCallback('https://your-domain.com/webhook');

$response = $api->upscaleImage($request);

echo "Upscale Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • image_no (int): Image index (0-3)
  • type (int): Upscale type (0=Subtle, 1=Creative)
  • callback (string, optional): Webhook URL for completion notification

rerollImage()

Regenerate with the same prompt.
<?php
use OpenAPI\Client\Model\RerollRequest;

$request = new RerollRequest();
$request->setJobId('original-job-id');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->rerollImage($request);

echo "Reroll Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • callback (string, optional): Webhook URL for completion notification

blendImages()

Blend 2-5 images together.
<?php
use OpenAPI\Client\Model\BlendRequest;

$request = new BlendRequest();
$request->setImgUrls([
    'https://example.com/image1.png',
    'https://example.com/image2.png'
]);
$request->setAspectRatio('1:1');  // Options: 1:1, 16:9, 9:16, 3:2, 2:3
$request->setCallback('https://your-domain.com/webhook');

$response = $api->blendImages($request);

echo "Blend Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • img_urls (array): Array of 2-5 image URLs
  • aspect_ratio (string, optional): Output aspect ratio (1:1, 16:9, 9:16, 3:2, 2:3)
  • callback (string, optional): Webhook URL for completion notification

describeImage()

Generate text descriptions from an image.
<?php
use OpenAPI\Client\Model\DescribeRequest;

$request = new DescribeRequest();
$request->setImgUrl('https://example.com/image.png');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->describeImage($request);

echo "Describe Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • img_url (string): URL of the image to describe
  • callback (string, optional): Webhook URL for completion notification

editImage()

Edit an image with text description.
<?php
use OpenAPI\Client\Model\EditRequest;

$request = new EditRequest();
$request->setJobId('original-job-id');
$request->setImageNo(0);
$request->setCanvas('full');  // Canvas area: full, object, background
$request->setImgPos('center');  // Image position: center, top, bottom, left, right
$request->setRemixPrompt('change the sky to sunset colors');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->editImage($request);

echo "Edit Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • image_no (int): Image index (0-3)
  • canvas (string): Canvas area (full, object, background)
  • img_pos (string): Image position (center, top, bottom, left, right)
  • remix_prompt (string): Edit instructions
  • callback (string, optional): Webhook URL for completion notification

inpaintImage()

Fill masked regions in an image.
<?php
use OpenAPI\Client\Model\InpaintRequest;

$request = new InpaintRequest();
$request->setJobId('original-job-id');
$request->setImageNo(0);
$request->setRemixPrompt('fill with forest landscape');
$request->setMask([
    'type' => 'url',  // 'url' or 'coordinates'
    'value' => 'mask-url'
]);
$request->setCallback('https://your-domain.com/webhook');

$response = $api->inpaintImage($request);

echo "Inpaint Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • image_no (int): Image index (0-3)
  • remix_prompt (string): Inpainting prompt
  • mask (array): Mask object with type (‘url’ or ‘coordinates’) and value
  • callback (string, optional): Webhook URL for completion notification

outpaintImage()

Extend image boundaries.
<?php
use OpenAPI\Client\Model\OutpaintRequest;

$request = new OutpaintRequest();
$request->setJobId('original-job-id');
$request->setImageNo(0);
$request->setScale(1.5);  // Scale factor (1.1-3.0)
$request->setRemixPrompt('extend with natural landscape');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->outpaintImage($request);

echo "Outpaint Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • image_no (int): Image index (0-3)
  • scale (float): Expansion scale factor (1.1-3.0)
  • remix_prompt (string, optional): Outpaint prompt
  • callback (string, optional): Webhook URL for completion notification

panImage()

Create panoramic or panned views.
<?php
use OpenAPI\Client\Model\PanRequest;

$request = new PanRequest();
$request->setJobId('original-job-id');
$request->setImageNo(0);
$request->setDirection(1);  // 0=Down, 1=Right, 2=Up, 3=Left
$request->setScale(1.5);  // Scale factor (1.1-3.0)
$request->setRemixPrompt('continue the landscape');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->panImage($request);

echo "Pan Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • image_no (int): Image index (0-3)
  • direction (int): Pan direction (0=Down, 1=Right, 2=Up, 3=Left)
  • scale (float): Scale factor (1.1-3.0)
  • remix_prompt (string, optional): Pan prompt
  • callback (string, optional): Webhook URL for completion notification

remixImage()

Create variations using remix modes (strong or subtle modification).
<?php
use OpenAPI\Client\Model\RemixRequest;

$request = new RemixRequest();
$request->setJobId('original-job-id');
$request->setImageNo(0);
$request->setMode(0);  // 0=Strong, 1=Subtle
$request->setRemixPrompt('change the lighting to blue hour');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->remixImage($request);

echo "Remix Job ID: " . $response->getJobId() . "\n";
?>
Parameters:
  • job_id (string): Original image job ID
  • image_no (int): Image index (0-3)
  • mode (int): Remix mode (0=Strong, 1=Subtle)
  • remix_prompt (string, optional): Remix instructions
  • callback (string, optional): Webhook URL for completion notification

shortenPrompt()

Optimize and simplify prompts.
<?php
use OpenAPI\Client\Model\ShortenRequest;

$request = new ShortenRequest();
$request->setPrompt('your very long and detailed prompt here with lots of unnecessary words and descriptions that could be made more concise...');
$request->setCallback('https://your-domain.com/webhook');

$response = $api->shortenPrompt($request);

echo "Shortened prompt: " . $response->getShortenedPrompt() . "\n";
?>
Parameters:
  • prompt (string): Long prompt to optimize
  • callback (string, optional): Webhook URL for completion notification
Returns: Response with shortened_prompt

Complete Example

<?php
require_once(__DIR__ . '/vendor/autoload.php');

use OpenAPI\Client\Configuration;
use OpenAPI\Client\Api\ImageGenerationApi;
use OpenAPI\Client\Model\DiffusionRequest;
use OpenAPI\Client\Model\UpscaleRequest;

// Configure API client
$config = Configuration::getDefaultConfiguration();
$config->setApiKey('x-api-key', getenv('LEGNEXT_API_KEY'));
$config->setHost('https://api.legnext.ai');

$api = new ImageGenerationApi(null, $config);

try {
    // Step 1: Generate image
    $request = new DiffusionRequest();
    $request->setText('a beautiful sunset over mountains');

    $response = $api->generateImage($request);
    $jobId = $response->getJobId();

    echo "Image generation started: {$jobId}\n";

    // Step 2: Wait for completion (see Task Management docs)
    // ...

    // Step 3: Upscale the first image
    $upscaleRequest = new UpscaleRequest();
    $upscaleRequest->setJobId($jobId);
    $upscaleRequest->setImageNo(0);
    $upscaleRequest->setType(1);

    $upscaleResponse = $api->upscaleImage($upscaleRequest);

    echo "Upscale started: " . $upscaleResponse->getJobId() . "\n";

} catch (\OpenAPI\Client\ApiException $e) {
    echo "HTTP Status: " . $e->getCode() . "\n";
    echo "Error Message: " . $e->getMessage() . "\n";
    echo "Response Body: " . $e->getResponseBody() . "\n";
}
?>

Error Handling

<?php
try {
    $response = $api->generateImage($request);

} catch (\OpenAPI\Client\ApiException $e) {
    $statusCode = $e->getCode();
    $errorBody = $e->getResponseBody();

    switch ($statusCode) {
        case 400:
            echo "Validation error: Check request parameters\n";
            break;
        case 401:
            echo "Authentication error: Invalid API key\n";
            break;
        case 404:
            echo "Resource not found\n";
            break;
        case 429:
            echo "Rate limit exceeded. Please retry later.\n";
            break;
        case 500:
        case 502:
        case 503:
            echo "Server error. Please retry.\n";
            break;
        default:
            echo "API error ({$statusCode}): {$errorBody}\n";
    }
}
?>

Retry Logic

<?php
function generateWithRetry($api, $request, $maxRetries = 3) {
    $retries = 0;

    while ($retries < $maxRetries) {
        try {
            return $api->generateImage($request);

        } catch (\OpenAPI\Client\ApiException $e) {
            if ($e->getCode() === 429) {
                // Rate limited - wait and retry
                $retries++;
                sleep(5);
                continue;
            } elseif ($e->getCode() >= 500) {
                // Server error - exponential backoff
                $retries++;
                $delay = pow(2, $retries);
                sleep($delay);
                if ($retries >= $maxRetries) {
                    throw $e;
                }
                continue;
            } else {
                // Other errors - don't retry
                throw $e;
            }
        }
    }

    throw new Exception("Max retries exceeded");
}

// Usage
$request = new DiffusionRequest();
$request->setText('a beautiful landscape');

try {
    $response = generateWithRetry($api, $request, 3);
    echo "Job ID: " . $response->getJobId() . "\n";
} catch (Exception $e) {
    echo "Failed after retries: " . $e->getMessage() . "\n";
}
?>

Next Steps