> ## 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.

# Image Generation

> Image generation API reference for JavaScript SDK

## apiV1DiffusionPost()

Create a new text-to-image generation task.

```javascript theme={null}
const { Configuration, ImageApi } = require('@legnext-api/js-sdk');

const config = new Configuration({
    basePath: 'https://api.legnext.ai'
});

const imageApi = new ImageApi(config);
const apiKey = 'your-api-key-here';

const body = {
    text: 'a serene mountain landscape at sunset',
    callback: 'https://your-domain.com/webhook' // Optional
};

imageApi.apiV1DiffusionPost(apiKey, body, (error, data, response) => {
    if (error) {
        console.error('Error:', error);
    } else {
        console.log('Job ID:', data.job_id);
    }
});
```

**Promise-based:**

```javascript theme={null}
imageApi.apiV1DiffusionPost(apiKey, body)
    .then(response => {
        console.log('Job ID:', response.data.job_id);
    })
    .catch(error => {
        console.error('Error:', error);
    });
```

**Async/Await:**

```javascript theme={null}
async function generateImage() {
    try {
        const response = await imageApi.apiV1DiffusionPost(apiKey, body);
        console.log('Job ID:', response.data.job_id);
    } catch (error) {
        console.error('Error:', error);
    }
}
```

**Parameters:**

* `xApiKey` (String): Your API key
* `body` (Object): Request body with:
  * `text` (String): Text prompt (1-8192 characters)
  * `callback` (String, optional): Webhook URL

**Returns:** Promise resolving to response with `job_id` and `status`

***

## apiV1VaryPost()

Create variations of a generated image.

```javascript theme={null}
const body = {
    jobId: 'original-job-id',
    imageNo: 0,
    type: 1, // 0=Subtle, 1=Strong
    remixPrompt: 'add more clouds' // Optional
};

const response = await imageApi.apiV1VaryPost(apiKey, body);
console.log('Variation Job ID:', response.jobId);
```

***

## apiV1UpscalePost()

Upscale a generated image.

```javascript theme={null}
const body = {
    jobId: 'original-job-id',
    imageNo: 0,
    type: 1 // 0=Subtle, 1=Creative
};

const response = await imageApi.apiV1UpscalePost(apiKey, body);
console.log('Upscale Job ID:', response.jobId);
```

***

## apiV1RerollPost()

Regenerate with the same prompt.

```javascript theme={null}
const body = {
    jobId: 'original-job-id'
};

await imageApi.apiV1RerollPost(apiKey, body);
```

***

## apiV1BlendPost()

Blend 2-5 images together.

```javascript theme={null}
const body = {
    imgUrls: [
        'https://example.com/image1.png',
        'https://example.com/image2.png'
    ],
    aspect_ratio: '1:1', // "2:3", "1:1", or "3:2"
    callback: 'https://your-domain.com/webhook'
};

await imageApi.apiV1BlendPost(apiKey, body);
```

***

## apiV1DescribePost()

Generate text descriptions from an image.

```javascript theme={null}
const body = {
    imgUrl: 'https://example.com/image.png'
};

await imageApi.apiV1DescribePost(apiKey, body);
```

***

## apiV1EditPost()

Edit an image by positioning it on a canvas and filling empty areas.

```javascript theme={null}
const body = {
    jobId: 'original-job-id',
    imageNo: 0,
    canvas: {
        width: 1024,
        height: 1024
    },
    imgPos: {
        width: 512,
        height: 512,
        x: 256,
        y: 256
    },
    remixPrompt: 'A beautiful landscape with mountains',
    callback: 'https://your-domain.com/webhook'
};

await imageApi.apiV1EditPost(apiKey, body);
```

***

## apiV1InpaintPost()

Fill masked regions in an image.

```javascript theme={null}
const body = {
    jobId: 'original-job-id',
    imageNo: 0,
    mask: {
        areas: [
            {
                width: 500,
                height: 500,
                points: [10, 10, 10, 100, 100, 100, 100, 10] // XYXY coordinates (clockwise)
            }
        ]
    },
    remixPrompt: 'Add a tree in the center', // Optional
    callback: 'https://your-domain.com/webhook'
};

await imageApi.apiV1InpaintPost(apiKey, body);
```

***

## apiV1OutpaintPost()

Extend image boundaries by scaling.

```javascript theme={null}
const body = {
    jobId: 'original-job-id',
    imageNo: 0,
    scale: 1.5, // Extension scale ratio (1.1 to 2.0)
    remixPrompt: 'clouds over the sky', // Optional
    callback: 'https://your-domain.com/webhook'
};

await imageApi.apiV1OutpaintPost(apiKey, body);
```

***

## apiV1PanPost()

Create panoramic or panned views.

```javascript theme={null}
const body = {
    jobId: 'original-job-id',
    imageNo: 0,
    direction: 1, // 0=Down, 1=Right, 2=Up, 3=Left
    scale: 1.5, // Extension scale ratio (1.1 to 3.0)
    remixPrompt: 'a lake near the mountain', // Optional
    callback: 'https://your-domain.com/webhook'
};

await imageApi.apiV1PanPost(apiKey, body);
```

***

## apiV1RemixPost()

Remix an image with a new prompt and style intensity.

```javascript theme={null}
const body = {
    jobId: 'original-job-id',
    imageNo: 0,
    remixPrompt: 'Change style to watercolor painting',
    mode: 0, // 0=Strong, 1=Subtle
    callback: 'https://your-domain.com/webhook'
};

await imageApi.apiV1RemixPost(apiKey, body);
```

***

## apiV1ShortenPost()

Optimize and simplify prompts.

```javascript theme={null}
const body = {
    prompt: 'your very long and detailed prompt here...'
};

const response = await imageApi.apiV1ShortenPost(apiKey, body);
console.log('Optimized prompt:', response.shortenedPrompt);
```

***

## Next Steps

* [Video Generation](/sdk/javascript/video-generation)
* [Task Management](/sdk/javascript/task-management)
* [Quick Start](/sdk/javascript/quickstart)
