Local Inpainting Pro

Description

This API initiates Mask-based image editing tasks. You can edit an image using only a prompt or upload a Mask image to specify the area to be edited. After a task is submitted, the system runs the editing algorithm. Results for timed-out tasks can be retrieved through the query API.

Version

1.0

Image Requirements

Supported image formats: JPG and PNG. The first image is the required input image, and the second image is an optional Mask image.

API URL

Production environment: https://openapi.meitu.com Task submission endpoint: https://openapi.meitu.com/api/v1/sdk/sync/push Task name (task): /v1/InPainting_pro/484505 Task type (task_type): formula

Method

POST

Content-Type: application/json

Authentication

Open Platform API Signature

Credits cannot be used to pay for API calls. Please visit the MV console to activate this API and purchase or manage resource packages.

Request Parameters

RequiredParameterTypeDescription
YesparamsstringAlgorithm parameters (JSON string)
Yesinit_imagesobject[]List of media files; the first image is the input image, and the second is an optional Mask image
YestaskstringFixed value: /v1/InPainting_pro/484505
Yestask_typestringFixed value: formula
Nosync_timeoutintDefault: 30; -1 means do not wait. If synchronous processing times out, status is 9; use the query API to retrieve the result

Structure of each media file in init_images:

RequiredParameterTypeDescription
YesurlstringMedia URL or base64 data
YesprofileobjectAttribute information

Structure of profile:

RequiredParameterTypeDescription
Yesmedia_profilesobjectMedia attribute information
YesversionstringFixed value: v1

Structure of media_profiles:

RequiredParameterTypeDescription
Yesmedia_data_typestringurl indicates a URL; jpg indicates base64-encoded image data

The params inference parameter is a JSON string with the following structure:

RequiredFieldTypeDescription
Norsp_media_typestringDefault: url, which returns a URL; jpg returns base64-encoded image data
YesparameterobjectCore algorithm parameters

Algorithm parameters in parameter:

RequiredFieldTypeDescription
Yesnum_samplesstringNumber of images to generate
Yesprompt_posstringEditing prompt

Request Examples

Edit an image using only a prompt:

{
  "task": "/v1/InPainting_pro/484505",
  "task_type": "formula",
  "init_images": [
    {
      "url": "https://obs.mtlab.meitu.com/public/EtRGxLI8ulQ43pGhuZfym9aYUD2PUbMP/MTc1MjIwMjgwMA==/fbe1aef9-d778-4236-74ec-133cbb7d6ceb.jpeg",
      "profile": {
        "media_profiles": {
          "media_data_type": "url"
        },
        "version": "v1"
      }
    }
  ],
  "params": "{\"rsp_media_type\":\"url\",\"parameter\":{\"num_samples\":\"2\",\"prompt_pos\":\"change hairstyle to pink\"}}",
  "sync_timeout": 30
}

Edit an image using a Mask:

{
  "task": "/v1/InPainting_pro/484505",
  "task_type": "formula",
  "init_images": [
    {
      "url": "http://autotest.meitudata.com/file/image_edit_wmask_1.jpg",
      "profile": {
        "media_profiles": {
          "media_data_type": "url"
        },
        "version": "v1"
      }
    },
    {
      "url": "http://autotest.meitudata.com/file/image_edit_wmask_1_mask.jpg",
      "profile": {
        "media_profiles": {
          "media_data_type": "url"
        },
        "version": "v1"
      }
    }
  ],
  "params": "{\"rsp_media_type\":\"url\",\"parameter\":{\"num_samples\":\"2\",\"prompt_pos\":\"\"}}",
  "sync_timeout": 30
}

Response Fields

Generated results are periodically deleted. Download and save them promptly.
FieldTypeDescription
request_idstringRequest identifier
trace_idstringTrace identifier
codeintBusiness status code; 0 means the request was accepted successfully
error_codeintError code; 0 indicates success
messagestringBusiness status message
tipsanyAdditional information; may be null
dataobjectTask status and algorithm result

Fields in data:

FieldTypeDescription
statusintStatus code: -1 task not found; 0 created; 1 processing; 2 failed; 9 timed out—use the query API; 10 succeeded
resultobjectAlgorithm result
progressnumberTask progress
predict_elapsedintEstimated processing time in milliseconds
create_timeint64Creation timestamp in milliseconds
task_idstringTask ID
custom_task_idstringClient-defined task ID
trace_idstringTrace identifier within data
client_infostringClient information
init_imagesobject[]/nullInput media echoed by the API

Fields in result:

FieldTypeDescription
idstringTask ID
parametersobjectTask result parameters
urlsstring[]Task result URLs
dataobjectAlgorithm processing details
msgstringProcessing result message
msg_idstringMessage ID
imagesstring[]Generated image URLs
mtlab_resobjectAlgorithm service response information
media_info_listobject[]List of generated media information

Response Examples

Successful Response

Response Status: 200

Content-Type: application/json; charset=utf-8

{
  "request_id": "",
  "trace_id": "",
  "code": 0,
  "error_code": 0,
  "message": "success",
  "tips": null,
  "data": {
    "status": 10,
    "result": {
      "id": "t_mt1a3i5n7bc7a42cbd-8def-49ab-9ca0-efa144cd279d",
      "urls": [
        "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/8ea5616e-54f8-488a-7e6d-5d6b4a83d0c9.png",
        "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/0c1bf9c3-be73-48e6-7148-6f40e7abb5b7.png"
      ],
      "parameters": {
        "rsp_media_type": "url",
        "version": "1.0.0"
      },
      "data": {
        "duration": {
          "alg_process_time": 26054,
          "created_timestamp": 1763984981,
          "pull_timestamp": 1763984981,
          "repost_time": 0,
          "upload_time": 317,
          "waiting_time": 27
        },
        "error_code": 0,
        "error_msg": "success",
        "extra": {
          "algo_msg": {
            "alg_time": 25.803189754486084
          },
          "trans_meta": {
            "req_meta": [
              {
                "media_type": "image"
              },
              {
                "media_type": "image"
              }
            ],
            "rsp_meta": [
              {
                "height": 2227,
                "media_type": "image",
                "size": 10797.9052734375,
                "width": 1655
              },
              {
                "height": 2227,
                "media_type": "image",
                "size": 10797.9052734375,
                "width": 1655
              }
            ]
          }
        },
        "media_info_list": [
          {
            "media_data": "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/8ea5616e-54f8-488a-7e6d-5d6b4a83d0c9.png",
            "media_extra": null,
            "media_profiles": {
              "media_data_type": "url"
            }
          },
          {
            "media_data": "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/0c1bf9c3-be73-48e6-7148-6f40e7abb5b7.png",
            "media_extra": null,
            "media_profiles": {
              "media_data_type": "url"
            }
          }
        ],
        "msg_id": "27a15d54-3c9d-4ce6-7c99-r0090b5dae27",
        "parameter": {
          "rsp_media_type": "url",
          "version": "1.0.0"
        }
      },
      "msg": "success",
      "msg_id": "27a15d54-3c9d-4ce6-7c99-r0090b5dae27",
      "images": [
        "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/8ea5616e-54f8-488a-7e6d-5d6b4a83d0c9.png",
        "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/0c1bf9c3-be73-48e6-7148-6f40e7abb5b7.png"
      ],
      "mtlab_res": {
        "ErrorCode": 0,
        "ErrorMsg": "",
        "error_code": 0,
        "error_msg": "",
        "media_info_list": null,
        "msg_id": "27a15d54-3c9d-4ce6-7c99-r0090b5dae27",
        "parameter": null
      },
      "media_info_list": [
        {
          "media_data": "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/8ea5616e-54f8-488a-7e6d-5d6b4a83d0c9.png",
          "media_extra": null,
          "media_profiles": {
            "media_data_type": "url"
          }
        },
        {
          "media_data": "https://oss-open-platform.meitudata.com/mtopen/4e200dc6bf574fee899cf9e0dabe27e6/0c1bf9c3-be73-48e6-7148-6f40e7abb5b7.png",
          "media_extra": null,
          "media_profiles": {
            "media_data_type": "url"
          }
        }
      ]
    },
    "progress": 1,
    "predict_elapsed": 10000,
    "create_time": 1763984981264,
    "task_id": "t_mt1a3i5n7bc7a42cbd-8def-49ab-9ca0-efa144cd279d",
    "custom_task_id": "",
    "trace_id": "b916407f-1ce0-40d7-9651-28040b64b8b4",
    "client_info": "",
    "init_images": null
  }
}

Response Requiring a Query

Use the query API to retrieve the result.

Response Status: 200

Content-Type: application/json; charset=utf-8

{
  "request_id": "",
  "trace_id": "",
  "code": 0,
  "error_code": 0,
  "message": "success",
  "tips": null,
  "data": {
    "status": 9,
    "result": {
      "id": "t_mt1a3i5n7b3da6d589-46b5-4f66-a0bb-8dd22f2a172e"
    },
    "progress": 0,
    "predict_elapsed": 10000,
    "create_time": 1759202368761,
    "task_id": "t_mt1a3i5n7b3da6d589-46b5-4f66-a0bb-8dd22f2a172e",
    "custom_task_id": "",
    "trace_id": "9129a3a2-99c4-46ce-8731-0e100e2fbee7",
    "client_info": "",
    "init_images": null
  }
}

Failed Response

Response Status: 400

Content-Type: application/json; charset=utf-8

{
  "request_id": "",
  "trace_id": "",
  "code": 20001,
  "error_code": 20001,
  "message": "ALGO_MODEL_CRASH",
  "tips": null,
  "data": {
    "status": 2,
    "result": {
      "id": "t_mt1a3i5n7be8d575cc-2ffb-4e0c-85a8-1824110e31b8",
      "code": 20001,
      "data": {
        "duration": {
          "alg_process_time": 0,
          "created_timestamp": 1759201989,
          "pull_timestamp": 1759201989,
          "repost_time": 0,
          "upload_time": 0,
          "waiting_time": 0
        },
        "error_code": 20001,
        "error_msg": "ALGO_MODEL_CRASH",
        "extra": {},
        "media_info_list": [],
        "msg_id": "c1b09cb2-6e05-4d21-55ab-r007b1f21bec",
        "parameter": null
      },
      "msg": "ALGO_MODEL_CRASH",
      "msg_id": "c1b09cb2-6e05-4d21-55ab-r007b1f21bec"
    },
    "progress": 1,
    "predict_elapsed": 10000,
    "create_time": 1759201989444,
    "task_id": "t_mt1a3i5n7be8d575cc-2ffb-4e0c-85a8-1824110e31b8",
    "custom_task_id": "",
    "trace_id": "",
    "client_info": "",
    "init_images": null
  }
}

API-Specific Error Codes and Messages

The original error-code table labels 20001 as PROCESS_ERROR, while the failed response example uses the message ALGO_MODEL_CRASH.

ErrorCodeError MessageDescription
20001PROCESS_ERRORProcessing error

General Error Codes and Messages

See API Error Codes.

SDK Examples

Python

import json

import requests
from sign_sdk import sign

def api_call_example():
    key = "your_api_key"
    secret = "your_api_secret"
    url = "https://openapi.meitu.com/api/v1/sdk/sync/push"
    method = "POST"

    headers = {
        "Content-Type": "application/json",
        sign.HeaderHost: "openapi.meitu.com",
    }
    inner_params = {
        "rsp_media_type": "url",
        "parameter": {
            "num_samples": "2",
            "prompt_pos": "change hairstyle to pink",
        },
    }
    payload = {
        "task": "/v1/InPainting_pro/484505",
        "task_type": "formula",
        "init_images": [
            {
                "url": "https://obs.mtlab.meitu.com/public/EtRGxLI8ulQ43pGhuZfym9aYUD2PUbMP/MTc1MjIwMjgwMA==/fbe1aef9-d778-4236-74ec-133cbb7d6ceb.jpeg",
                "profile": {
                    "media_profiles": {"media_data_type": "url"},
                    "version": "v1",
                },
            }
        ],
        "params": json.dumps(inner_params, ensure_ascii=False),
        "sync_timeout": 30,
    }
    body = json.dumps(payload, ensure_ascii=False)

    signer = sign.Signer(key, secret)
    signed_request = signer.sign(url, method, headers, body)
    response = requests.Session().send(signed_request)
    print(f"Status: {response.status_code}")
    print(f"Response: {response.text}")

if __name__ == "__main__":
    api_call_example()

Go

package main

import (
	"fmt"
	"io"
	"net/http"

	"github.com/mtlab/api/signer"
)

func main() {
	key := "your_api_key"
	secret := "your_api_secret"
	signObj := signer.NewSigner(key, secret)

	url := "https://openapi.meitu.com/api/v1/sdk/sync/push"
	method := http.MethodPost
	headers := make(http.Header)
	headers.Set(signer.HeaderHost, "openapi.meitu.com")
	headers.Set("Content-Type", "application/json")

	body := `{
  "task": "/v1/InPainting_pro/484505",
  "task_type": "formula",
  "init_images": [{
    "url": "https://obs.mtlab.meitu.com/public/EtRGxLI8ulQ43pGhuZfym9aYUD2PUbMP/MTc1MjIwMjgwMA==/fbe1aef9-d778-4236-74ec-133cbb7d6ceb.jpeg",
    "profile": {
      "media_profiles": {"media_data_type": "url"},
      "version": "v1"
    }
  }],
  "params": "{\"rsp_media_type\":\"url\",\"parameter\":{\"num_samples\":\"2\",\"prompt_pos\":\"change hairstyle to pink\"}}",
  "sync_timeout": 30
}`

	req, err := signObj.Sign(url, method, headers, body)
	if err != nil {
		fmt.Println("Failed to sign request:", err)
		return
	}

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		fmt.Println("Failed to send request:", err)
		return
	}
	defer resp.Body.Close()

	responseBody, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Read response failed:", err)
		return
	}
	fmt.Println("Response:", resp.StatusCode, string(responseBody))
}

PHP

<?php
require 'signer.php';

$key = 'your_api_key';
$secret = 'your_api_secret';
$signer = new Signer($key, $secret);

$url = 'https://openapi.meitu.com/api/v1/sdk/sync/push';
$method = 'POST';
$headers = ['Content-Type' => 'application/json'];

$innerParams = json_encode([
    'rsp_media_type' => 'url',
    'parameter' => [
        'num_samples' => '2',
        'prompt_pos' => 'change hairstyle to pink',
    ],
]);

$body = json_encode([
    'task' => '/v1/InPainting_pro/484505',
    'task_type' => 'formula',
    'init_images' => [
        [
            'url' => 'https://obs.mtlab.meitu.com/public/EtRGxLI8ulQ43pGhuZfym9aYUD2PUbMP/MTc1MjIwMjgwMA==/fbe1aef9-d778-4236-74ec-133cbb7d6ceb.jpeg',
            'profile' => [
                'media_profiles' => ['media_data_type' => 'url'],
                'version' => 'v1',
            ],
        ],
    ],
    'params' => $innerParams,
    'sync_timeout' => 30,
]);

$curl = $signer->sign($url, $method, $headers, $body);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ($status === 0) {
    echo 'Error: ' . curl_error($curl);
} else {
    echo "Status: {$status}\n";
    echo "Response: {$response}\n";
}
curl_close($curl);
?>

Java

package com.meitu.openai.common;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        Signer signer = new Signer("your_api_key", "your_api_secret");
        String url = "https://openapi.meitu.com/api/v1/sdk/sync/push";
        String method = "POST";

        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        headers.put(Signer.HeaderHost, "openapi.meitu.com");

        String body = "{\n" +
                "  \"task\": \"/v1/InPainting_pro/484505\",\n" +
                "  \"task_type\": \"formula\",\n" +
                "  \"init_images\": [{\n" +
                "    \"url\": \"https://obs.mtlab.meitu.com/public/EtRGxLI8ulQ43pGhuZfym9aYUD2PUbMP/MTc1MjIwMjgwMA==/fbe1aef9-d778-4236-74ec-133cbb7d6ceb.jpeg\",\n" +
                "    \"profile\": {\n" +
                "      \"media_profiles\": {\"media_data_type\": \"url\"},\n" +
                "      \"version\": \"v1\"\n" +
                "    }\n" +
                "  }],\n" +
                "  \"params\": \"{\\\"rsp_media_type\\\":\\\"url\\\",\\\"parameter\\\":{\\\"num_samples\\\":\\\"2\\\",\\\"prompt_pos\\\":\\\"change hairstyle to pink\\\"}}\",\n" +
                "  \"sync_timeout\": 30\n" +
                "}";

        Map<String, String> signedHeaders = signer.sign(url, method, headers, body);
        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestMethod(method);
        for (Map.Entry<String, String> entry : signedHeaders.entrySet()) {
            connection.setRequestProperty(entry.getKey(), entry.getValue());
        }
        connection.setDoOutput(true);
        connection.getOutputStream().write(body.getBytes(StandardCharsets.UTF_8));

        int status = connection.getResponseCode();
        InputStream stream = status >= 400
                ? connection.getErrorStream()
                : connection.getInputStream();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) {
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            System.out.println("Response: " + status + " " + response);
        }
    }
}