Documentation Index
Fetch the complete documentation index at: https://docs.legnext.ai/llms.txt
Use this file to discover all available pages before exploring further.
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