Video AI Super Resolution 2.0

Description

This API performs video super-resolution, enhancing low-resolution videos to high resolution and returning the processed HD video.

Version

1.0

Media Requirements

The input media must be a video. The source documentation does not specify supported video formats, dimensions, file size, or duration limits.

API URL

Production environment: https://openapi.meitu.com Task submission endpoint: https://openapi.meitu.com/api/v1/sdk/sync/push Task name (task): /v1/aigcvsrv2/491347 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 input videos
YestaskstringFixed value: /v1/aigcvsrv2/491347
Yestask_typestringFixed value: formula
Nosync_timeoutintDefaults to 30; synchronous timeout duration

The structure of each multimedia file in init_images is described below.

RequiredParameterTypeDescription
YesurlstringVideo URL or base64 data
YesprofileobjectAttribute information

The profile attribute information is described below.

RequiredParameterTypeDescription
Yesmedia_profilesobjectMedia attribute information
YesversionstringFixed value: v1

The media_profiles media attribute information is described below.

RequiredParameterTypeDescription
Yesmedia_data_typestringurl indicates a URL; the corresponding media type indicates base64 data

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

RequiredFieldTypeDescription
Norsp_media_typestringDefaults to url, indicating that a URL is returned; the source documentation does not specify other values
YesparameterobjectCore algorithm parameter object

Algorithm parameters in parameter

RequiredFieldTypeDescription
—None—The source documentation provides no additional core algorithm parameters; pass an empty object

Request Example

{
  "task": "/v1/aigcvsrv2/491347",
  "task_type": "formula",
  "init_images": [
    {
      "url": "https://obs.mtlab.meitu.com/public/EtRGxLI8ulQ43pGhuZfym9aYUD2PUbMP/MTc1NzM4MzIwMA==/21873fc7-7487-40d9-550c-a79413bf4b8f.mp4",
      "profile": {
        "media_profiles": {
          "media_data_type": "url"
        },
        "version": "v1"
      }
    }
  ],
  "params": "{\"rsp_media_type\":\"url\",\"parameter\":{}}",
  "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 indicates that the request was accepted successfully
error_codeintError code; 0 on success
messagestringBusiness message
tipsanyAdditional information; may be null
dataobjectTask status and algorithm results

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, ranging from 0 to 1
predict_elapsedintEstimated processing time in milliseconds
create_timeint64Creation timestamp in milliseconds
task_idstringTask ID
custom_task_idstringClient-defined task ID
trace_idstringTrace identifier
client_infostringClient information
init_imagesobject[]/nullInput media echoed by the API

Fields in result

FieldTypeDescription
idstringUnique task identifier
urlsarrayList of output media URLs
imagesarrayList of output media; equivalent in meaning to urls
dataobjectDetailed data returned by the algorithm
msgstringResponse message
msg_idstringMessage ID
mtlab_resobjectUnderlying algorithm result
media_info_listarrayList of output media information
parametersobjectEchoed algorithm processing parameters

Fields in result.data

FieldTypeDescription
durationobjectProcessing-time statistics for each stage
error_codenumberAlgorithm error code; 0 indicates success
error_msgstringAlgorithm error message
extraobjectAdditional fields, including transcoding metadata
media_info_listarrayList of media information
msg_idstringMessage ID
parameterobjectEchoed parameters

Fields in duration

FieldTypeDescription
alg_process_timenumberAlgorithm processing time in milliseconds
created_timestampnumberTask creation timestamp in seconds
pull_timestampnumberResource retrieval timestamp in seconds
repost_timenumberRetry duration
upload_timenumberUpload duration in milliseconds
waiting_timenumberQueue wait time in milliseconds

Fields in extra.trans_meta

FieldTypeDescription
req_metaarrayList of request media metadata
rsp_metaarrayList of response media metadata

Fields in req_meta and rsp_meta

FieldTypeDescription
durationnumberVideo duration in milliseconds
media_typestringMedia type, such as video
frame_ratenumberFrame rate; returned only in rsp_meta
frame_numnumberFrame count; returned only in rsp_meta
widthnumberWidth; returned only in rsp_meta
heightnumberHeight; returned only in rsp_meta
sizenumberFile size; returned only in rsp_meta
data_ratenumberBit rate; returned only in rsp_meta

Fields in media_info_list

FieldTypeDescription
media_datastringMedia data URL
media_extraobject/nullAdditional media information
media_profilesobjectMedia attribute information

Fields in media_profiles

FieldTypeDescription
media_data_typestringurl indicates that the media data is a URL
media_data_fpsnumberOutput video frame rate
media_data_widthnumberOutput video width
media_data_heightnumberOutput video height
media_data_sizenumberOutput file size in bytes

Fields in parameter and parameters

FieldTypeDescription
rsp_media_typestringReturned media type; url indicates that a URL is returned
versionstringAlgorithm version number

Fields in mtlab_res

FieldTypeDescription
ErrorCodenumberUnderlying error code
ErrorMsgstringUnderlying error message
error_codenumberError code compatibility field
error_msgstringError message compatibility field
media_info_listarray/nullList of media information
msg_idstringMessage ID
parameterobject/nullParameter information

Response Examples

Successful Response Example

{
  "request_id": "",
  "trace_id": "",
  "code": 0,
  "error_code": 0,
  "message": "success",
  "tips": null,
  "data": {
    "status": 10,
    "result": {
      "id": "t_mt1a3i5n7bdb48bbc8-300e-4842-9005-5de70a3c425f",
      "urls": [
        "https://obs-large.mtlab.meitu.com/mtopen/ff56d688358849259556be0f50065a60/96c959fe-9627-4eb3-5e79-479e7d486a15.mp4"
      ],
      "images": [
        "https://obs-large.mtlab.meitu.com/mtopen/ff56d688358849259556be0f50065a60/96c959fe-9627-4eb3-5e79-479e7d486a15.mp4"
      ],
      "parameters": {
        "rsp_media_type": "url",
        "version": "AIGCVSR2 Version: 1.0.2"
      },
      "data": {
        "duration": {
          "alg_process_time": 226671,
          "created_timestamp": 1779448545,
          "pull_timestamp": 1779448545,
          "repost_time": 0,
          "upload_time": 736,
          "waiting_time": 189
        },
        "error_code": 0,
        "error_msg": "success",
        "extra": {
          "trans_meta": {
            "req_meta": [
              {
                "duration": 6933,
                "media_type": "video"
              }
            ],
            "rsp_meta": [
              {
                "data_rate": 50743.676002994456,
                "duration": 6933,
                "frame_num": 208,
                "frame_rate": 30,
                "height": 3840,
                "media_type": "video",
                "size": 43846370,
                "width": 2160
              }
            ]
          }
        },
        "media_info_list": [
          {
            "media_data": "https://obs-large.mtlab.meitu.com/mtopen/ff56d688358849259556be0f50065a60/96c959fe-9627-4eb3-5e79-479e7d486a15.mp4",
            "media_extra": null,
            "media_profiles": {
              "media_data_fps": 30,
              "media_data_height": 3840,
              "media_data_size": 43846370,
              "media_data_type": "url",
              "media_data_width": 2160
            }
          }
        ],
        "msg_id": "29ee6cd2-a9ed-4749-5cea-r00902532619",
        "parameter": {
          "rsp_media_type": "url",
          "version": "AIGCVSR2 Version: 1.0.2"
        }
      },
      "msg": "success",
      "msg_id": "29ee6cd2-a9ed-4749-5cea-r00902532619",
      "mtlab_res": {
        "ErrorCode": 0,
        "ErrorMsg": "",
        "error_code": 0,
        "error_msg": "",
        "media_info_list": null,
        "msg_id": "29ee6cd2-a9ed-4749-5cea-r00902532619",
        "parameter": null
      },
      "media_info_list": [
        {
          "media_data": "https://obs-large.mtlab.meitu.com/mtopen/ff56d688358849259556be0f50065a60/96c959fe-9627-4eb3-5e79-479e7d486a15.mp4",
          "media_extra": null,
          "media_profiles": {
            "media_data_fps": 30,
            "media_data_height": 3840,
            "media_data_size": 43846370,
            "media_data_type": "url",
            "media_data_width": 2160
          }
        }
      ]
    },
    "progress": 1,
    "predict_elapsed": 10000,
    "create_time": 1779448545064,
    "task_id": "t_mt1a3i5n7bdb48bbc8-300e-4842-9005-5de70a3c425f",
    "custom_task_id": "",
    "trace_id": "",
    "client_info": "",
    "init_images": null
  }
}

Pending Response Example

Use the Query API to query the task.

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": {},
    "progress": 0,
    "predict_elapsed": 10000,
    "create_time": 1779448545064,
    "task_id": "t_mt1a3i5n7bdb48bbc8-300e-4842-9005-5de70a3c425f",
    "custom_task_id": "",
    "trace_id": "",
    "client_info": "",
    "init_images": null
  }
}

Failed Response Example

Response Status: 400

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

{
  "request_id": "",
  "trace_id": "",
  "code": 400,
  "error_code": 20001,
  "message": "PROCESS_ERROR",
  "tips": null,
  "data": {
    "status": 2,
    "result": {
      "error_code": 20001,
      "error_msg": "PROCESS_ERROR"
    },
    "progress": 0,
    "predict_elapsed": 0,
    "create_time": 1779448545064,
    "task_id": "t_mt1a3i5n7bdb48bbc8-300e-4842-9005-5de70a3c425f",
    "custom_task_id": "",
    "trace_id": "",
    "client_info": "",
    "init_images": null
  }
}

API-specific error: 20001 (PROCESS_ERROR), which indicates a processing error.

General Error Codes

See API Error Codes for details.

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": {},
    }
    payload = {
        "task": "/v1/aigcvsrv2/491347",
        "task_type": "formula",
        "init_images": [
            {
                "url": "https://example.com/input.mp4",
                "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/aigcvsrv2/491347",
  "task_type": "formula",
  "init_images": [{
    "url": "https://example.com/input.mp4",
    "profile": {
      "media_profiles": {"media_data_type": "url"},
      "version": "v1"
    }
  }],
  "params": "{\"rsp_media_type\":\"url\",\"parameter\":{}}",
  "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' => [],
]);

$body = json_encode([
    'task' => '/v1/aigcvsrv2/491347',
    'task_type' => 'formula',
    'init_images' => [
        [
            'url' => 'https://example.com/input.mp4',
            '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/aigcvsrv2/491347\",\n" +
                "  \"task_type\": \"formula\",\n" +
                "  \"init_images\": [{\n" +
                "    \"url\": \"https://example.com/input.mp4\",\n" +
                "    \"profile\": {\n" +
                "      \"media_profiles\": {\"media_data_type\": \"url\"},\n" +
                "      \"version\": \"v1\"\n" +
                "    }\n" +
                "  }],\n" +
                "  \"params\": \"{\\\"rsp_media_type\\\":\\\"url\\\",\\\"parameter\\\":{}}\",\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);
        }
    }
}