Все запросы к 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
}
При стандартном запросе (stream: false
) сервер вернет ответ только после завершения апскейла. При потоковом режиме (stream: true
) сервер будет отправлять промежуточные статусы в реальном времени.
{
"status": "WAITING",
"job_id": "j-12345678",
"queue_position": 3,
"queue_total": 10
}
{
"status": "RUNNING",
"job_id": "j-12345678",
"progress": "Upscaling image..."
}
{
"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"
]
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())
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));
{
"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 |
Ошибка получения статуса | Повторите запрос |
По дополнительным вопросам обращайтесь в техподдержку.