Top.Mail.Ru
Войти

Документация

Увеличение изображений


Аутентификация

Все запросы к API требуют токен аутентификации. Токен передается в параметре token каждого запроса.

{
    "token": "ваш_api_ключ"
}

Увеличение изображений

Базовый эндпоинт

POST https://neuroimg.art/api/v1/upscalers

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

Параметр Тип Обязательный По умолчанию Диапазон Описание
token string Да - - Ваш API-ключ
image string Да - - Изображение в формате base64
response_type string Нет "url" url/base64 Формат результата
hr_upscaler string Нет "R-ESRGAN 4x+" - Модель для увеличения
hr_scale integer Нет 2 2-4 Коэффициент увеличения
hr_second_pass_steps integer Нет 10 1-50 Количество шагов второго прохода
denoising_strength float Нет 0.3 0.0-1.0 Сила шумоподавления
stream boolean Нет false - Включение потокового режима

Пример запроса:

{
    "token": "ваш_ключ",
    "image": "base64_изображения",
    "hr_upscaler": "R-ESRGAN 4x+",
    "hr_scale": 2,
    "hr_second_pass_steps": 10,
    "denoising_strength": 0.3,
    "stream": true
}

Потоковые запросы vs обычные запросы

При стандартном запросе (stream: false) сервер вернет ответ только после завершения апскейла. При потоковом режиме (stream: true) сервер будет отправлять промежуточные статусы в реальном времени.

Пример потокового ответа:

  1. Ожидание в очереди:
{
    "status": "WAITING",
    "job_id": "j-12345678",
    "queue_position": 3,
    "queue_total": 10
}
  1. Процесс увеличения:
{
    "status": "RUNNING",
    "job_id": "j-12345678",
    "progress": "Upscaling image..."
}
  1. Завершение:
{
    "status": "SUCCESS",
    "job_id": "j-12345678",
    "image_url": "https://neuroimg.art/i/12345678.png", // или Base64 код, смотря какой параметр вы выбрали в response_type
    "file_size": "3.2MB", 
    "image_size": "2048x2048",
    "credits_used": 2.0
}

Доступные апскейлеры

Для получения списка доступных апскейлеров используйте эндпоинт:

GET https://neuroimg.art/api/v1/upscalers

Пример ответа:

[
    "R-ESRGAN 4x+",
    "R-ESRGAN 4x+ Anime6B",
    "SwinIR_4x",
    "ESRGAN_4x",
    "Lanczos",
    "Nearest"
]

Примеры интеграции

Python с поддержкой потока

import aiohttp
import asyncio
import base64

async def upscale_image_stream(image_path: str, api_key: str):
    async with aiohttp.ClientSession() as session:
        with open(image_path, "rb") as image_file:
            image_data = base64.b64encode(image_file.read()).decode('utf-8')
            
        payload = {
            "token": api_key,
            "image": image_data,
            "hr_upscaler": "R-ESRGAN 4x+",
            "hr_scale": 2,
            "hr_second_pass_steps": 10,
            "denoising_strength": 0.3,
            "stream": True
        }

        async with session.post(
            "https://neuroimg.art/api/v1/upscalers",
            json=payload
        ) as response:
            async for line in response.content:
                if line:
                    status = json.loads(line)
                    
                    if status["status"] == "WAITING":
                        print(f"В очереди: {status['queue_position']}/{status['queue_total']}")
                    elif status["status"] == "RUNNING":
                        print("Апскейл...")
                    elif status["status"] == "SUCCESS":
                        print(f"Готово! URL: {status['image_url']}")
                        return status['image_url']

async def main():
    result = await upscale_image_stream(
        "image.jpg",
        "ваш_api_ключ"
    )

asyncio.run(main())

JavaScript/Node.js с поддержкой потока

const axios = require('axios');
const fs = require('fs');

async function upscaleImageStream(imagePath, apiKey) {
    const imageData = fs.readFileSync(imagePath, {encoding: 'base64'});
    
    try {
        const response = await axios.post(
            'https://neuroimg.art/api/v1/upscalers',
            {
                token: apiKey,
                image: imageData,
                hr_upscaler: 'R-ESRGAN 4x+',
                hr_scale: 2,
                hr_second_pass_steps: 10,
                denoising_strength: 0.3,
                stream: true
            },
            {
                responseType: 'stream'
            }
        );

        response.data.on('data', chunk => {
            try {
                const status = JSON.parse(chunk);
                
                if (status.status === 'WAITING') {
                    console.log(`В очереди: ${status.queue_position}/${status.queue_total}`);
                } else if (status.status === 'RUNNING') {
                    console.log('Апскейл...');
                } else if (status.status === 'SUCCESS') {
                    console.log(`Готово! URL: ${status.image_url}`);
                }
            } catch (e) {
                // Пропускаем неполные чанки
            }
        });

    } catch (error) {
        console.error('Ошибка апскейла:', error.response?.data);
        throw error;
    }
}

// Использование
upscaleImageStream('image.jpg', 'ваш_api_ключ')
    .catch(error => console.error('Ошибка:', error));

Обработка ошибок

Коды ответов

  • 200: Успешное выполнение
  • 400: Ошибка в параметрах запроса
  • 401: Неверный API-ключ
  • 403: Недостаточно прав или токенов
  • 429: Превышен лимит запросов
  • 500: Внутренняя ошибка сервера

Формат ошибки

{
    "error": "код_ошибки",
    "message": "описание_ошибки"
}

Типичные ошибки

Код Описание Решение
invalid_token Неверный API-ключ Проверьте правильность токена
insufficient_credits Недостаточно токенов Пополните баланс
image_too_large Превышен размер изображения Уменьшите размер входного изображения
invalid_upscaler Некорректный апскейлер Проверьте список доступных апскейлеров
invalid_scale Некорректный масштаб Используйте допустимые значения (2, 3, 4)
invalid_steps Некорректное количество шагов Используйте значения от 1 до 50
invalid_denoising Некорректная сила шумоподавления Используйте значения от 0 до 1
upscale_failed Ошибка увеличения Попробуйте другие параметры
job_creation_failed Ошибка создания задачи Проверьте параметры запроса
polling_failed Ошибка получения статуса Повторите запрос

По дополнительным вопросам обращайтесь в техподдержку.