← Блог

Убрать фон нейросетью через API: дневник пяти запросов

· 8 минут чтения

Сотни фото товаров уже лежат в папке, а запрос на удаление фона возвращает 503 All providers failed. Модель работает — просто ссылка в поле image передана строкой, без квадратных скобок. Так было днём 22.09.2026; вечером мы это исправили, и теперь строка принимается как список из одной картинки. Ниже — весь дневник: какая ошибка осталась, в каком формате приходит прозрачный фон и сколько это стоит.

22.09.2026 я прогонял Recraft Remove Background через OpenAI-совместимый API altrouter руками, из Python и с серверным временем CEST в Нюрнберге. Модель доступна в каталоге altrouter по цене $0,0085 за картинку — это на 15% ниже официальной цены Recraft, при оплате картой РФ, СБП или криптой.

Для пробного запуска нужны регистрация и ключ в кабинете. За подтверждённый Telegram один раз начисляется $1 на тесты — этого хватает примерно на 117 удалений фона.

Откуда взялась тестовая картинка

Для проверки я взял белую керамическую кружку на светло-сером фоне. Исходник мы сами сгенерировали через Imagen 4 Fast в altrouter 22.09.2026: 1024×1024, WEBP, 13,9 секунды и $0,023.

Так у теста нет вопроса с правами на чужую фотографию. Дальше обозначаю исходную ссылку как https://…/mug.webp.

У Recraft Remove Background есть одна важная особенность: промпт не нужен вообще. Модель получает картинку и возвращает тот же объект на прозрачном фоне.

Запуск 1: без картинки

Самая первая проверка модели в тот день прошла в 13:49:51 за 3,5 секунды. После неё я начал последовательные запуски через API altrouter.

В 14:56:47 отправил минимальный запрос без image:

POST /v1/images/generations
{"model":"recraft-remove-background"}

Ответ пришёл за 0,0 секунды:

{"error":{"message":"`recraft-remove-background` works on a reference image - pass one in `image`.","type":"invalid_request_error","param":"image","code":null}}

Это HTTP 400. Запрос отбит ещё до модели, и ошибка здесь полезная: API не просит сочинить инструкцию, а прямо говорит передать изображение.

Промпт не заменяет файл. Для удаления фона единственный обязательный вход — картинка.

Запуск 2: картинка строкой — 503 (уже исправлено)

Во втором запуске я добавил ссылку, но передал её строкой:

{"model":"recraft-remove-background","image":"https://…/mug.webp"}

Время — 14:56:47. Через 0,2 секунды пришёл HTTP 503:

{"error":{"message":"All providers failed (…)","type":"service_unavailable","param":null,"code":"no_provider_available"}}

На первый взгляд сообщение отправляет искать падение у всех поставщиков. В нашем случае причина была проще: image передан строкой, а API ждёт массив.

Это был наш недочёт: текст говорил «все поставщики упали», хотя дело было в форме запроса. Вечером 22.09 мы это исправили: теперь строка в image принимается как список из одной картинки, массив работает как раньше, а любое другое значение (число, объект) получает понятный 400: «image must be a URL or a list of URLs.»

Сравнение запросов: image строкой и массивом дают 200, число в image даёт 400
Сейчас скобки не обязательны: строка и массив работают одинаково

Запуск 3: массив со ссылкой — 200

Третий запрос снова ушёл в 14:56:47, но теперь ссылка оказалась внутри массива:

{"model":"recraft-remove-background","image":["https://…/mug.webp"]}

Через 5,7 секунды API вернул HTTP 200:

{"created":1790081812,"data":[{"url":"https://api.altrouter.ai/media/images/2026/09/22/80bddbe5-….webp"}]}

Ответ — WEBP 1024×1024 в режиме RGBA. Альфа-канал хранит прозрачность, поэтому фон можно положить поверх другого изображения без белого прямоугольника.

В результате 77,4% пикселей полностью прозрачные. Ещё 16% почти непрозрачные, с мягким краем, а 5,8% полностью непрозрачные.

Тень под кружкой исчезла вместе с фоном. Отверстие в ручке тоже стало прозрачным, а край предмета остался ровным.

Ссылка на готовый файл ведёт на адрес api.altrouter.ai. Для массовой обработки это означает простой маршрут: отправили изображение, получили URL результата и скачали файл своим кодом.

Запуск 4 и 5: data: URL и маленькая картинка

Ссылку на файл размещать заранее не обязательно. В 14:57:10 я отправил тот же снимок прямо в теле запроса как data: URL.

{"model":"recraft-remove-background","image":["data:image/jpeg;base64,/9j/4AAQ…"]}

Исходником был JPEG размером 45 КБ в base64. HTTP 200 пришёл за 3,0 секунды, а результат оказался PNG 1024×1024 RGBA.

Формат ответа зависит от входа. WEBP вернулся как WEBP, а JPEG — как PNG, потому что JPEG не умеет хранить прозрачность.

В 14:57:13 я повторил тест на маленькой картинке 200×200:

{"model":"recraft-remove-background","image":["data:image/jpeg;base64,…"]}

Файл весил 4 КБ. Ответ — HTTP 200 за 5,7 секунды, PNG 200×200 RGBA.

Маленький вход модель приняла, но размер не увеличила. Если после удаления фона нужен апскейл, для этого есть отдельная модель recraft-crisp-upscale.

Лента времени пяти вызовов удаления фона 22.09.2026: 400, 503 и три ответа 200
Две ошибки из пяти — в форме запроса, а не в модели; 503 на строку с вечера 22.09 уже не воспроизводится

Что это значит для вас: локальный JPEG можно закодировать в base64 и отправить без отдельного хостинга. data: URL можно передать и строкой, и внутри массива.

Сколько стоит убрать фон через API

Официальная цена Recraft API на 22.09.2026 — $0,01 за одно удаление фона. В altrouter один вызов стоит $0,0085 за картинку, то есть на 15% ниже официальной цены вендора.

Для 1000 фотографий расчёт выглядит так:

  • официальная цена Recraft — $10,00;
  • altrouter — $8,50;
  • разница — $1,50.

Это цена именно одного удаления фона. В нашем прогоне пять вызовов дали три успешных результата по $0,0085, потому что первые два запроса были ошибочными и до обработки изображения не дошли.

Оплата доступна картой РФ, СБП или криптой. Подписки нет, оплата за каждую обработанную картинку, а стартовый $1 за подтверждённый Telegram покрывает первую сотню картинок.

Стоимость удаления фона у 1000 фото: $10 по официальной цене Recraft и $8,50 в altrouter
Тысяча фото без фона — $8,50, на 15% ниже официальной цены Recraft

Чек-лист перед массовой обработкой

Перед запуском очереди я бы проверил пять вещей.

  1. image — ссылка или data: URL строкой либо массив таких строк; для пачки удобнее массив.
  2. prompt передавать не нужно.
  3. Для PNG на выходе отправляйте PNG или JPEG. WEBP вернётся как WEBP.
  4. Файл должен быть меньше 10 МБ и меньше 16 Мп. Самая длинная сторона — меньше 4096 пикселей.
  5. Таймаут лучше ставить с запасом. В успешных запусках ответ пришёл за 3,0–5,7 секунды, а в примере ниже стоит 120 секунд.

Рабочий вариант с локальным JPEG выглядит так:

import base64, requests

KEY = "ar-..."
with open("mug.jpg", "rb") as f:
    data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()

r = requests.post(
    "https://api.altrouter.ai/v1/images/generations",
    headers={"Authorization": f"Bearer {KEY}"},
    json={"model": "recraft-remove-background", "image": [data_url]},
    timeout=120,
)
r.raise_for_status()
url = r.json()["data"][0]["url"]
open("mug-no-bg.png", "wb").write(requests.get(url, timeout=120).content)

Путь запуска состоит из регистрации, получения ключа в кабинете, подтверждения Telegram и отправки такого запроса. Параметры запроса описаны в документации API, а цена и статус модели — на странице Recraft Remove Background.

Если фон нужно не убрать, а заменить на другой по описанию словами, это уже задача модели редактирования. Как она ведёт себя на фото с лицом, мы разбирали в статье про FLUX.1 Kontext Pro.

Чего мы не проверяли

SVG на входе мы не проверяли. Документация Recraft указывает, что SVG должен возвращаться как SVG, но через altrouter этот сценарий в замере 22.09.2026 не прогоняли.

Файлы рядом с ограничениями 10 МБ и 4096 пикселей тоже не тестировали. Поэтому результаты для таких входов нельзя приравнивать к проверенной кружке 1024×1024.

Сложные края остались за рамками: волосы, мех, стекло и прозрачные предметы мы не брали. Наша картинка — простой случай с белым объектом на ровном сером фоне.

Скорость на сотнях файлов подряд не измеряли. Все пять вызовов прошли по одному, поэтому время 3,0–5,7 секунды описывает одиночные запросы, а не готовую производительность очереди.

Итог дня: пять вызовов, две ошибки и три готовые картинки. Обе ошибки — мои, в форме запроса, а не в модели.

Главный сбой оказался не в модели, а в форме входных данных. Теперь правило ещё проще: уберите промпт, передайте картинку в image строкой или массивом — и запрос возвращает прозрачный результат.

FAQ

Как убрать фон с фото через API?

Отправьте POST на /v1/images/generations с моделью recraft-remove-background и полем image — ссылкой или data: URL, строкой или массивом. В ответе приходит ссылка на картинку с прозрачным фоном, а в нашем замере успешные вызовы занимали 3,0–5,7 секунды.

Нужен ли промпт для удаления фона нейросетью?

Нет. Модель работает только по картинке, а без неё API отвечает 400 с подсказкой передать image.

В каком формате приходит картинка без фона?

Результат приходит с альфа-каналом, то есть с прозрачностью. На WEBP-входе вернулся WEBP, на JPEG-входе — PNG, а размер результата совпал с размером входного файла.

Сколько стоит удаление фона через API?

В altrouter удаление фона стоит $0,0085 за картинку, а официальная цена Recraft на 22.09.2026 — $0,01. Обработка 1000 фото стоит $8,50 против $10,00 по официальной цене.

Почему API возвращал 503 при удалении фона?

Днём 22.09.2026 503 All providers failed приходил, когда image был передан строкой, а не массивом. Вечером того же дня мы это исправили: строка теперь принимается, а неверный тип поля даёт 400 с подсказкой. Если 503 всё же пришёл, это реальный сбой на стороне модели — повторите запрос через 30 секунд.