NAV
ImageEditor.ai
shell python php javascript

Введение

Добро пожаловать в API платформы ImageEditor.ai!

Каждая функция предназначена для того, чтобы облегчить нашим пользователям создание или редактирование изображений с помощью ИИ в системе ImageEditor.ai.

Чтобы получить ключ API, перейдите на страницу учетной записи .

Базовый URL-адрес по умолчанию

Базовый URL-адрес по умолчанию для API ImageEditor.ai: <b>https://api.imageeditor.ai/v1/</b> .

Примечание. Из соображений безопасности все API-интерфейсы ImageEditor.ai обслуживаются только через HTTPS.

Авторизация

Чтобы использовать API ImageEditor.ai, вам потребуется ключ API, связанный с вашей учетной записью .

Значение авторизации должно быть отправлено в запросе заголовков.

Authorization: <api_key>

Создание изображений

 import requests
import time
import shutil
import json

headers = {"Authorization": "api_key"}
params = {
    "terms": "кролик идет в школу, невежественный стиль татуировки",
    "is_sfw": True,
    "negative_terms": "дубликат, плохо прорисованное лицо, болезненный, плохо прорисованные пальцы, некрасивый, размытый, мультяшный, диснеевский, вне кадра, обрезанный",
    "dimension": "landscape",
    "fix_faces": True,
    "make_tile": False,
    "upscale": False,
    "threesixty": False,
}
base_api_url = "https://api.imageeditor.ai"
api_url = f"{base_api_url}/v1"


def download_file(url, local_filename):
    url = f"{base_api_url}/{url}"
    with requests.get(url, stream=True) as r:
        with open(local_filename, "wb") as f:
            shutil.copyfileobj(r.raw, f)
    return local_filename


def convert_files(api_url, params, headers):
    r = requests.post(
        url=f"{api_url}/create-image/",
        json=params,
        headers=headers
    )
    return r.json()


def get_results(params):
    if params.get("error"):
        print(params)
        return

    r = requests.post(
        url=f"{api_url}/results/",
        data=params
    )
    data = r.json()
    finished = data.get("finished")

    while not finished:
        if int(data.get("queue_count")) > 0:
            print("queue: %s" % data.get("queue_count"))

        time.sleep(5)
        results = get_results(params)
        results = json.dumps(results)

        if results:
            break

    if finished:
        for f in data.get("files"):
            print(f.get("url"))
            download_file("%s" % f.get("url"), "%s" % f.get("filename"))
        return {"finished": "files downloaded"}
    return r.json()


get_results(convert_files(api_url, params, headers))
Create image

curl -X POST \
  https://api.imageeditor.ai/v1/create-image/ \
  -H 'Authorization: api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "terms": "кролик идет в школу, невежественный стиль татуировки",
    "is_sfw": true,
    "negative_terms": "дубликат, плохо прорисованное лицо, болезненный, плохо прорисованные пальцы, некрасивый, размытый, мультяшный, диснеевский, вне кадра, обрезанный",
    "dimension": "landscape",
    "fix_faces": true,
    "make_tile": false,
    "upscale": false,
    "threesixty": false
}'


Get created image URL

curl -X POST \
  https://api.imageeditor.ai/v1/results/ \
  -F 'uuid=response_uuid'
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ERROR | E_PARSE);

$headers = array("Authorization: api_key");
$file_list = ['/test_files/test.jpeg'];
$api_url = "https://api.imageeditor.ai/v1/edit-image/";
$results_url = "https://api.imageeditor.ai/v1/results/";

function download_file($url, $filename){
    $curl = curl_init();
    $url = "https://api.imageeditor.ai" . $url;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSLVERSION, 3);
    $data = curl_exec($curl);
    $error = curl_error($curl);
    curl_close ($curl);
    # Make sure destionation path exists
    $destination_path = "/path/to/result/files/";
    $destination_file = fopen($destination_path . $filename, "w+");
    fwrite($destination_file, $data);
    fclose($destination_file);
}

function convert_files($file_list, $headers, $api_url) {
    $post_data['terms'] = 'кролик идет в школу, невежественный стиль татуировки';
    $post_data['is_sfw'] = true;
    $post_data['negative_terms'] = 'дубликат, плохо прорисованное лицо, болезненный, плохо прорисованные пальцы, некрасивый, размытый, мультяшный, диснеевский, вне кадра, обрезанный';
    $post_data['dimension'] = 'landscape';
    $post_data['fix_faces'] = true;
    $post_data['make_tile'] = false;
    $post_data['upscale'] = false;
    $post_data['threesixty'] = false;

    foreach ($file_list as $index => $file) {
        $post_data['file[' . $index . ']'] = curl_file_create(
            realpath($file),
            mime_content_type($file),
            basename($file)
        );
    }

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $api_url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $content = curl_exec($curl);
    curl_close($curl);

    return json_decode($content);
}

function get_results($params, $results_url, $headers) {
    if ($params->error) {
        print_r($params->error);
        return;
    }

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $results_url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_decode(json_encode($params), true));
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $content = json_decode(curl_exec($curl));
    curl_close($curl);

    if ($content->finished == false) {
        if (intval($content->queue_count) > 0) {
            print_r("queue: $content->queue_count");
        }

        sleep(5);
        $results = get_results($params, $results_url, $headers);
        return;
    }

    foreach ($content->files as $f) {
        download_file($f->url, $f->filename);
    }
}

$resp = convert_files($file_list, $headers, $api_url);
get_results($resp, $results_url, $headers);
?>
const request = require('request');
const fs = require('fs');

let file_list = ['/test_files/sala.png']
const api_url = 'https://api.imageeditor.ai/v1/create-image/'
const results_url = 'https://api.imageeditor.ai/v1/results/'

function convertFiles(file_list) {
    let data = {
        "terms": "кролик идет в школу, невежественный стиль татуировки",
        "is_sfw": true,
        "negative_terms": "дубликат, плохо прорисованное лицо, болезненный, плохо прорисованные пальцы, некрасивый, размытый, мультяшный, диснеевский, вне кадра, обрезанный",
        "dimension": "landscape",
        "fix_faces": true,
        "make_tile": false,
        "upscale": false,
        "threesixty": false,
    };

    for (var i = 0; i < file_list.length; i++) {
        formData['files'] = fs.createReadStream(file_list[i]);
    }

    request({
        url: api_url,
        method: 'post',
        json: data,
        headers: {
            "Authorization": "api_key",
            "Content-Type": "application/json",
        }
    }, function (err, res, body) {
        if (err) {
            console.error(err);
            return err;
        }
        getResults(JSON.parse(body));
    });
}

function getResults(data) {
    if (data.error) {
        console.error(data);
        return data.error;
    }
    request({
        url: results_url,
        method: 'post',
        formData: data
    }, function (e, r, body) {
        response = JSON.parse(body);
        console.log(response);
        if (!response.finished) {
            setTimeout(
                function () {
                    getResults(data);
                }, 1000
            );
        }

        console.log(response);
    })
}

convertFiles(file_list);

Ответ

/path/to/local/result.jpg

HTTP-запрос

POST /create-image/

Параметры запроса

Параметр Тип Описание Пример
is_sfw Необязательный Установите "true" , если «условия» относятся к изображениям для взрослых. true или false
terms Необходимый Скажите ИИ, какое изображение вы хотите создать. кролик идет в школу, невежественный стиль татуировки
negative_terms Необязательный Скажите ИИ, что следует исключить. дубликат, плохо прорисованное лицо, болезненный, плохо прорисованные пальцы, некрасивый, размытый, мультяшный, диснеевский, вне кадра, обрезанный
dimension Необязательный Получите портретные или ландшафтные изображения, значение «портрет» по умолчанию, если оно пустое или нулевое. portrait или landscape
fix_faces Необязательный Позвольте ИИ исправить лица на изображениях результатов, значение False по умолчанию, если не отправлять. true или false
make_tile Необязательный Установите значение true если вы хотите, чтобы изображение можно было использовать в качестве шаблона. true или false
upscale Необязательный ИИ вернет изображение в большем масштабе. true или false
threesixty Необязательный ИИ вернет 360-градусное изображение. true или false

Редактировать изображения

 import requests
import time
import shutil
import json

headers = {"Authorization": "api_key"}
params = {
    "terms": "Миска котят",
    "is_sfw": True,
    "replacing": "фрукты и плодоножки",
    "negative_terms": "",
    "fix_faces": True,
    "outpaint": False,
    "upscale": False,
}
file_path = "path/to/test.jpeg"
base_api_url = "https://api.imageeditor.ai"
api_url = f"{base_api_url}/v1"


def download_file(url, local_filename):
    url = f"{base_api_url}/{url}"
    with requests.get(url, stream=True) as r:
        with open(local_filename, "wb") as f:
            shutil.copyfileobj(r.raw, f)
    return local_filename


def convert_files(api_url, params, headers):
    files = [eval(f'("files", open("{file_path}", "rb"))')]
    r = requests.post(
        url=f"{api_url}/edit-image/",
        files=files,
        data=params,
        headers=headers
    )
    return r.json()


def get_results(params):
    if params.get("error"):
        print(params)
        return

    r = requests.post(
        url=f"{api_url}/results/",
        data=params
    )
    data = r.json()
    finished = data.get("finished")

    while not finished:
        if int(data.get("queue_count")) > 0:
            print("queue: %s" % data.get("queue_count"))

        time.sleep(5)
        results = get_results(params)
        results = json.dumps(results)

        if results:
            break

    if finished:
        for f in data.get("files"):
            print(f.get("url"))
            download_file("%s" % f.get("url"), "%s" % f.get("filename"))
        return {"finished": "files downloaded"}
    return r.json()


get_results(convert_files(api_url, params, headers))
Редактировать изображения

curl -X POST \
  https://api.imageeditor.ai/v1/edit-image/ \
  -H 'Authorization: api_key' \
  -F 'files=@test_files/test.jpeg' \
  -F 'terms=Миска котят' \
  -F 'is_sfw=true' \
  -F 'replacing=фрукты и плодоножки' \
  -F 'negative_terms=' \
  -F 'fix_faces=true' \
  -F 'outpaint=false' \
  -F 'upscale=false'


Get result image

curl -X POST \
  https://api.imageeditor.ai/v1/results/ \
  -F 'uuid=response_uuid'
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ERROR | E_PARSE);

$headers = array("Authorization: api_key");
$file_list = ['/test_files/test.jpeg'];
$api_url = "https://api.imageeditor.ai/v1/edit-image/";
$results_url = "https://api.imageeditor.ai/v1/results/";

function download_file($url, $filename){
    $curl = curl_init();
    $url = "https://api.imageeditor.ai" . $url;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSLVERSION, 3);
    $data = curl_exec($curl);
    $error = curl_error($curl);
    curl_close ($curl);
    # Make sure destionation path exists
    $destination_path = "/path/to/result/files/";
    $destination_file = fopen($destination_path . $filename, "w+");
    fwrite($destination_file, $data);
    fclose($destination_file);
}

function convert_files($file_list, $headers, $api_url) {
    $post_data['terms'] = 'кролик идет в школу, невежественный стиль татуировки';
    $post_data['is_sfw'] = true;
    $post_data['replacing'] = 'фрукты и плодоножки';
    $post_data['negative_terms'] = '';
    $post_data['fix_faces'] = true;
    $post_data['outpaint'] = false;
    $post_data['upscale'] = false;

    foreach ($file_list as $index => $file) {
        $post_data['file[' . $index . ']'] = curl_file_create(
            realpath($file),
            mime_content_type($file),
            basename($file)
        );
    }

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $api_url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $content = curl_exec($curl);
    curl_close($curl);

    return json_decode($content);
}

function get_results($params, $results_url, $headers) {
    if ($params->error) {
        print_r($params->error);
        return;
    }

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $results_url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_decode(json_encode($params), true));
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $content = json_decode(curl_exec($curl));
    curl_close($curl);

    if ($content->finished == false) {
        if (intval($content->queue_count) > 0) {
            print_r("queue: $content->queue_count");
        }

        sleep(5);
        $results = get_results($params, $results_url, $headers);
        return;
    }

    foreach ($content->files as $f) {
        download_file($f->url, $f->filename);
    }
}

$resp = convert_files($file_list, $headers, $api_url);
get_results($resp, $results_url, $headers);
?>
const request = require('request');
const fs = require('fs');

let file_list = ['/test_files/test.jpeg']
const api_url = 'https://api.imageeditor.ai/v1/edit-image/'
const results_url = 'https://api.imageeditor.ai/v1/results/'

function convertFiles(file_list) {
    let formData = {
        "terms": "кролик идет в школу, невежественный стиль татуировки",
        "is_sfw": true,
        "negative_terms": "дубликат, плохо прорисованное лицо, болезненный, плохо прорисованные пальцы, некрасивый, размытый, мультяшный, диснеевский, вне кадра, обрезанный",
        "dimension": "landscape",
        "fix_faces": true,
        "make_tile": false,
        "upscale": false,
        "threesixty": false,
    };

    for (var i = 0; i < file_list.length; i++) {
        formData['files'] = fs.createReadStream(file_list[i]);
    }

    request({
        url: api_url,
        method: 'post',
        formData: formData,
        headers: {
            "Authorization": "api_key",
            "Content-Type": "multipart/form-data",
        }
    }, function (err, res, body) {
        if (err) {
            console.error(err);
            return err;
        }
        getResults(JSON.parse(body));
    });
}

function getResults(data) {
    if (data.error) {
        console.error(data);
        return data.error;
    }
    request({
        url: results_url,
        method: 'post',
        formData: data
    }, function (e, r, body) {
        response = JSON.parse(body);
        console.log(response);
        if (!response.finished) {
            setTimeout(
                function () {
                    getResults(data);
                }, 1000
            );
        }

        console.log(response);
    })
}

convertFiles(file_list);

Ответ

/path/to/local/result.jpg

HTTP-запрос

POST /edit-image/

Параметры запроса

Параметр Тип Описание Пример
is_sfw Необязательный Установите "true" , если «условия» относятся к изображениям для взрослых. true или false
terms Необходимый Скажите ИИ, что вы хотите, основываясь на вашем изображении. Миска котят
replacing Необязательный Сообщите ИИ, если вы хотите заменить что-то на своем изображении, основываясь на вашей подсказке выше. фрукты и плодоножки
negative_terms Необязательный Скажите ИИ, что следует исключить. дубликат, плохо прорисованное лицо, болезненный, плохо прорисованные пальцы, некрасивый, размытый, мультяшный, диснеевский, вне кадра, обрезанный
fix_faces Необязательный Позвольте ИИ исправить лица на изображениях результатов, значение False по умолчанию, если не отправлять. true или false
outpaint Необязательный Имея начальное изображение, ИИ может сгенерировать его «окружение». true или false
upscale Необязательный ИИ вернет изображение в большем масштабе. true или false