curl --request POST \
--url https://www.ailabapi.com/api/image/editing/ai-image-extender \
--header 'Content-Type: multipart/form-data' \
--header 'ailabapi-api-key: <api-key>' \
--form image='@example-file' \
--form mask='@example-file' \
--form steps=30 \
--form strength=0.8 \
--form scale=7 \
--form seed=0 \
--form top=0.1 \
--form bottom=0.1 \
--form left=0.1 \
--form right=0.1 \
--form max_height=1920 \
--form max_width=1920import requests
url = "https://www.ailabapi.com/api/image/editing/ai-image-extender"
files = {
"image": ("example-file", open("example-file", "rb")),
"mask": ("example-file", open("example-file", "rb"))
}
payload = {
"steps": "30",
"strength": "0.8",
"scale": "7",
"seed": "0",
"top": "0.1",
"bottom": "0.1",
"left": "0.1",
"right": "0.1",
"max_height": "1920",
"max_width": "1920"
}
headers = {"ailabapi-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('image', '<string>');
form.append('mask', '<string>');
form.append('steps', '30');
form.append('strength', '0.8');
form.append('scale', '7');
form.append('seed', '0');
form.append('top', '0.1');
form.append('bottom', '0.1');
form.append('left', '0.1');
form.append('right', '0.1');
form.append('max_height', '1920');
form.append('max_width', '1920');
const options = {method: 'POST', headers: {'ailabapi-api-key': '<api-key>'}};
options.body = form;
fetch('https://www.ailabapi.com/api/image/editing/ai-image-extender', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.ailabapi.com/api/image/editing/ai-image-extender",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"ailabapi-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.ailabapi.com/api/image/editing/ai-image-extender"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("ailabapi-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.ailabapi.com/api/image/editing/ai-image-extender")
.header("ailabapi-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ailabapi.com/api/image/editing/ai-image-extender")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["ailabapi-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"request_id": "",
"log_id": "",
"error_detail": {
"code": "",
"code_message": "",
"message": ""
},
"data": {
"binary_data_base64": []
}
}AI Image Extender API
AI Image Extender API expands images beyond their original borders using prompts, canvas, frame, or four-side extension modes.
curl --request POST \
--url https://www.ailabapi.com/api/image/editing/ai-image-extender \
--header 'Content-Type: multipart/form-data' \
--header 'ailabapi-api-key: <api-key>' \
--form image='@example-file' \
--form mask='@example-file' \
--form steps=30 \
--form strength=0.8 \
--form scale=7 \
--form seed=0 \
--form top=0.1 \
--form bottom=0.1 \
--form left=0.1 \
--form right=0.1 \
--form max_height=1920 \
--form max_width=1920import requests
url = "https://www.ailabapi.com/api/image/editing/ai-image-extender"
files = {
"image": ("example-file", open("example-file", "rb")),
"mask": ("example-file", open("example-file", "rb"))
}
payload = {
"steps": "30",
"strength": "0.8",
"scale": "7",
"seed": "0",
"top": "0.1",
"bottom": "0.1",
"left": "0.1",
"right": "0.1",
"max_height": "1920",
"max_width": "1920"
}
headers = {"ailabapi-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('image', '<string>');
form.append('mask', '<string>');
form.append('steps', '30');
form.append('strength', '0.8');
form.append('scale', '7');
form.append('seed', '0');
form.append('top', '0.1');
form.append('bottom', '0.1');
form.append('left', '0.1');
form.append('right', '0.1');
form.append('max_height', '1920');
form.append('max_width', '1920');
const options = {method: 'POST', headers: {'ailabapi-api-key': '<api-key>'}};
options.body = form;
fetch('https://www.ailabapi.com/api/image/editing/ai-image-extender', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.ailabapi.com/api/image/editing/ai-image-extender",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"ailabapi-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.ailabapi.com/api/image/editing/ai-image-extender"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("ailabapi-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.ailabapi.com/api/image/editing/ai-image-extender")
.header("ailabapi-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ailabapi.com/api/image/editing/ai-image-extender")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["ailabapi-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mask\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"steps\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"strength\"\r\n\r\n0.8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"scale\"\r\n\r\n7\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"top\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bottom\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"left\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"right\"\r\n\r\n0.1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_height\"\r\n\r\n1920\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"max_width\"\r\n\r\n1920\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"request_id": "",
"log_id": "",
"error_detail": {
"code": "",
"code_message": "",
"message": ""
},
"data": {
"binary_data_base64": []
}
}Request
- URL:
https://www.ailabapi.com/api/image/editing/ai-image-extender - Method:
POST - Content-Type:
multipart/form-data
Image requirements
- Image format:
JPEGJPGPNG - Image size: No more than 5 MB.
- Image resolution: Larger than 64x64px, smaller than 4096x4096px.
Headers
| Field | Required | Type | Description |
|---|---|---|---|
ailabapi-api-key | YES | string | Application API KEY. Get API KEY |
Body
Fixed Fields
| Field | Required | Type | Scope | Default | Description |
|---|---|---|---|---|---|
custom_prompt | NO | string | Prompt Content (English only). Please limit the prompt content to 100 English words or fewer. Any content beyond this limit may have minimal impact on the generated result. Use standard vocabulary to avoid failing the review process. | ||
steps | NO | integer | [1, +] | 30 | Sampling steps determine the level of detail in the generated image. A higher value may result in better quality, but it will significantly increase the processing time. |
strength | NO | float | [0.1, 1.0] | 0.8 | The smaller the value, the closer it is to the original image. |
scale | NO | float | [1, 20] | 7 | The degree to which the text description influences the output. |
seed | NO | integer | [-1, +] | 0 | Random seed, used as the basis for determining the initial state of the diffusion process. It must be a non-negative number (-1 represents a random seed). If the random seed is the same positive integer and all other parameters are identical, the generated image will most likely be consistent. |
max_height | NO | integer | [0, +] | 1920 | Maximum output height. Resized to the specified dimensions as a fallback after the image expansion process. |
max_width | NO | integer | [0, +] | 1920 | Maximum output width. Resized to the specified dimensions as a fallback after the image expansion process. |
Non-Mask Expanded Image
| Field | Required | Type | Scope | Default | Example | Description |
|---|---|---|---|---|---|---|
image | YES | file | ![]() | Original image. | ||
top | NO | float | [0, 1.0] | 0.1 | Upward expansion ratio. | |
bottom | NO | float | [0, 1.0] | 0.1 | Downward expansion ratio. | |
left | NO | float | [0, 1.0] | 0.1 | Leftward expansion ratio. | |
right | NO | float | [0, 1.0] | 0.1 | Rightward expansion ratio. |
Mask Expanded Image
| Field | Required | Type | Example | Description |
|---|---|---|---|---|
image | YES | file | ![]() | Original image. |
mask | YES | file | ![]() | Mask image. |
Response
-
Handle
Public Response FieldsParse and validate thePublic Response Fields, checking the status code or response message to ensure the request is successful and error-free. -
Handle
Business Response FieldsIf thePublic Response Fieldsare valid and error-free, proceed with processing the business logic in theBusiness Response Fields.
Public Response Fields
Viewing Public Response Fields and Error CodesBusiness Response Fields
| Field | Type | Description |
|---|---|---|
data | object | The content of the result data returned. |
+binary_data_base64 | array of string | Output the processed image as a Base64 array (single image). |
Response Example
{
"request_id": "",
"log_id": "",
"error_code": 0,
"error_msg": "",
"error_detail": {
"status_code": 200,
"code": "",
"code_message": "",
"message": ""
},
"data": {
"binary_data_base64": []
}
}
Authorizations
API Key for authentication
Body
Original image.
Mask image.
Sampling steps determine the level of detail in the generated image. A higher value may result in better quality, but it will significantly increase the processing time.
"30"
The smaller the value, the closer it is to the original image.
"0.8"
The degree to which the text description influences the output.
"7"
Random seed, used as the basis for determining the initial state of the diffusion process. It must be a non-negative number (-1 represents a random seed). If the random seed is the same positive integer and all other parameters are identical, the generated image will most likely be consistent.
"0"
Upward expansion ratio.
"0.1"
Downward expansion ratio.
"0.1"
Leftward expansion ratio.
"0.1"
Rightward expansion ratio.
"0.1"
Maximum output height. Resized to the specified dimensions as a fallback after the image expansion process.
"1920"
Maximum output width. Resized to the specified dimensions as a fallback after the image expansion process.
"1920"
Response
Success
The response is of type object.




