Top.Mail.Ru
Войти

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

Генерация изображений


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

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

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

Генерация изображений

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

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

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

Параметр Тип Обязательный По умолчанию Диапазон Описание
token string Да - - API-ключ
model string Да - - Имя модели (например "FLUX-Devfp32")
prompt string Да - - Текст описания на английском
negative_prompt string Нет "EasyNegative" - Нежелательные элементы
width int Нет 1024 256-1024 Ширина изображения
height int Нет 1024 256-1024 Высота изображения
steps int Нет 35 1-35 Шаги обработки
sampler string Нет "Euler" - Алгоритм сэмплирования
cfg_scale float Нет 7 1-30 Контроль соответствия промпту
seed int Нет -1 - Зерно генерации
init_image string Нет* - - Base64 для img2img/inpaint
mask_image string Нет* - - Base64 маски для инпейнтинга
denoising_strength float Нет 0.7 0.0-1.0 Сила изменения оригинала
loras object Нет - - Словарь {lora_name: weight}
stream bool Нет false - Потоковый режим
response_type string Нет "url" url/base64 Формат результата
nsfw_filter bool Нет false - Фильтр NSFW
send_to_gallery bool Нет false - Сохранить в галерее

*Обязателен для img2img/inpaint

Потоковые запросы 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": "Processing image..."
}
  1. Завершение:
{
    "status": "SUCCESS",
    "job_id": "j-12345678",
    "image_url": "https://neuroimg.art/i/12345678.png", // или Base64 код, смотря какой параметр вы выбрали в response_type
    "seed": 42424242,
    "file_size": "2.4MB",
    "image_size": "1024x1024",
    "credits_used": 3.5
}

Режимы генерации

1. Text-to-Image (txt2img)

Генерация изображения из текстового описания.

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

{
    "token": "ваш_ключ",
    "model": "AniFlux-v4.1",
    "prompt": "космический корабль в стиле киберпанк",
    "negative_prompt": "низкое качество, размытость",
    "width": 1024,
    "height": 1024,
    "steps": 30,
    "sampler": "Euler",
    "cfg_scale": 7,
    "seed": -1,
    "stream": true
}

2. Image-to-Image (img2img)

Модификация существующего изображения на основе текстового описания.

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

{
    "token": "ваш_ключ",
    "model": "AniFlux-v4.1",
    "prompt": "превратить в акварельный рисунок",
    "negative_prompt": "низкое качество",
    "init_image": "base64_изображения",
    "denoising_strength": 0.75,
    "width": 1024,
    "height": 1024,
    "steps": 30,
    "stream": true
}

Параметр denoising_strength определяет степень изменения исходного изображения:

  • 0.0: минимальные изменения
  • 1.0: полное изменение
  • Рекомендуемый диапазон: 0.6-0.8

3. Inpainting

Замена выбранной области изображения с помощью маски.

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

{
    "token": "ваш_ключ",
    "model": "AniFlux-v4.1",
    "prompt": "заменить фон на горный пейзаж",
    "negative_prompt": "люди, машины",
    "init_image": "base64_изображения",
    "mask_image": "base64_маски",
    "denoising_strength": 0.85,
    "steps": 30,
    "stream": true
}

Требования к маске:

  • Формат: JPEG
  • Размеры: должны совпадать с размерами исходного изображения
  • Тип: черно-белое изображение
  • Черные области (0): сохраняются без изменений
  • Белые области (255): заменяются согласно промпту

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

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

import aiohttp
import asyncio
import json

async def generate_image_stream(prompt: str, api_key: str):
    async with aiohttp.ClientSession() as session:
        payload = {
            "token": api_key,
            "model": "AniFlux-v4.1",
            "prompt": prompt,
            "steps": 30,
            "stream": True
        }

        async with session.post(
            "https://neuroimg.art/api/v1/generate",
            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 generate_image_stream(
        "космический корабль будущего",
        "ваш_api_ключ"
    )

asyncio.run(main())

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

const axios = require('axios');

async function generateImageStream(prompt, apiKey) {
    try {
        const response = await axios.post(
            'https://neuroimg.art/api/v1/generate',
            {
                token: apiKey,
                model: 'AniFlux-v4.1',
                prompt: prompt,
                steps: 30,
                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;
    }
}

// Использование
generateImageStream('космический корабль будущего', 'ваш_api_ключ')
    .catch(error => console.error('Ошибка:', error));

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

Коды ответов

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

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

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

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

Код Описание Решение
invalid_token Неверный API-ключ Проверьте правильность токена
insufficient_credits Недостаточно токенов Пополните баланс
nsfw_detected Обнаружен NSFW контент Измените промпт
image_too_large Превышен размер изображения Уменьшите размер входного изображения
invalid_mask Некорректная маска Проверьте формат и размер маски
generation_failed Ошибка генерации Попробуйте другие параметры
job_creation_failed Ошибка создания задачи Проверьте параметры запроса
polling_failed Ошибка получения статуса Повторите запрос
lora_mismatch Несовместимая версия LoRA Используйте совместимую версию LoRA
model_unavailable Модель недоступна Выберите другую модель

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