Удаляет выбранные объекты на фото по маске и аккуратно дорисовывает фон на их месте. Цена - 6 рублей за изображение.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Удаление объектов стирает с фото всё, что вы отметили маской, и дорисовывает на этом месте фон: прохожего на заднем плане, ценник, провод, мусорный бак. Модель не читает текст задания - что именно убрать, определяет только маска, поэтому результат предсказуем и хорошо подходит для автоматической обработки.
Типичные задачи:
Нужны две ссылки: исходное фото и чёрно-белая PNG-маска того же размера. Каждый вызов создаёт асинхронную операцию, результат забирается по её id.
POST /api/v1/operationsAuthorization: Bearer brth_...id и статус queued. Готовый результат забирается отдельным запросом по id.{
"tool": "object-eraser",
"input": {
"image_url": "https://cdn.example.com/source-image-1.jpg",
"mask_url": "https://cdn.example.com/mask-1.png",
"preserve_alpha": false
}
}
tool - slug нейросети, всегда "object-eraser".input - параметры запуска. Поля передаются прямо внутри input, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
image_url | string (url) | Да | Ссылка на исходное фото. Одно изображение в формате JPG, JPEG, PNG или WebP. |
mask_url | string (url) | Да | Ссылка на маску в формате PNG. Белым отмечено то, что нужно удалить, чёрным - то, что нужно оставить как есть. Маска должна совпадать с фото по размеру в пикселях. |
preserve_alpha | boolean | Нет | Сохранить прозрачность исходного PNG. Включайте, если на входе картинка с прозрачным фоном (например, товар без фона) и прозрачность нужна в результате. Для обычных фото оставьте false, это значение по умолчанию. |
.png в ссылке), другие расширения API отклонит.Обычный вызов для фото: исходник в JPG и маска в PNG.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "object-eraser",
"input": {
"image_url": "https://cdn.example.com/street-photo-1.jpg",
"mask_url": "https://cdn.example.com/street-photo-1-mask.png",
"preserve_alpha": false
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'object-eraser',
input: {
image_url: 'https://cdn.example.com/street-photo-1.jpg',
mask_url: 'https://cdn.example.com/street-photo-1-mask.png',
preserve_alpha: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'object-eraser',
'input': {
'image_url': 'https://cdn.example.com/street-photo-1.jpg',
'mask_url': 'https://cdn.example.com/street-photo-1-mask.png',
'preserve_alpha': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Если исходник - PNG с прозрачностью (например, товар, уже вырезанный из фона), включите preserve_alpha, чтобы прозрачные области не залились цветом.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "object-eraser",
"input": {
"image_url": "https://cdn.example.com/product-cutout-1.png",
"mask_url": "https://cdn.example.com/product-cutout-1-mask.png",
"preserve_alpha": true
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'object-eraser',
input: {
image_url: 'https://cdn.example.com/product-cutout-1.png',
mask_url: 'https://cdn.example.com/product-cutout-1-mask.png',
preserve_alpha: true,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'object-eraser',
'input': {
'image_url': 'https://cdn.example.com/product-cutout-1.png',
'mask_url': 'https://cdn.example.com/product-cutout-1-mask.png',
'preserve_alpha': True,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "object-eraser",
"cost": 6,
"balance_after": 494,
"created_at": "2026-09-30T12:44:03.281444+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "object-eraser",
"cost": 6,
"created_at": "2026-09-30T12:44:03.281444+00:00",
"completed_at": "2026-09-30T12:44:28.391182+00:00",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/object-eraser/street-photo-1-clean.png"
]
},
"error_message": null
}
Если операция завершилась ошибкой, result равен null, а причина лежит в error_message:
{
"id": "op_uuid-123",
"status": "failed",
"tool": "object-eraser",
"cost": 6,
"created_at": "2026-09-30T12:44:03.281444+00:00",
"completed_at": "2026-09-30T12:44:28.391182+00:00",
"result": null,
"error_message": "Не удалось скачать файл. Пожалуйста, проверьте доступность ссылки и попробуйте снова."
}
Сохраните id из ответа на создание и проверяйте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForResult(id) {
while (true) {
const res = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const op = await res.json()
if (op.status === 'completed') return op.result.urls[0]
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 3000))
}
}
Статус одной операции можно запрашивать не чаще раза в секунду, иначе придёт 429 rate_limit_exceeded. Для этой нейросети хватает опроса раз в 3-5 секунд.
После завершения в result приходит одно изображение:
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/object-eraser/street-photo-1-clean.png"
]
}
type - всегда "image".urls - массив ссылок, в нём одна ссылка на готовое изображение в формате PNG.Скачайте файл к себе после завершения операции и храните у себя, если он нужен надолго.
Цена фиксированная - 6 ₽ за один запуск, то есть за одно обработанное изображение.
| Что меняется | Влияет на цену |
|---|---|
| Размер фото и маски | Нет |
| Размер и число областей на маске | Нет |
preserve_alpha | Нет |
Деньги списываются при создании операции, сумма приходит в поле cost, а остаток баланса - в balance_after.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает деньги. Если ответ не дошёл из-за обрыва сети, повторный запрос создаст ещё одну платную операцию, поэтому не повторяйте его автоматически.queued, дальше статус нужно проверять по id. Обычно результат готов примерно через полминуты.http/https. Адреса localhost, loopback и частные IP не принимаются. Ссылка должна открываться без авторизации и cookies и оставаться доступной до конца обработки.400 validation_error и деньги не спишутся. Для mask_url подходит только .png. Другие форматы по ссылке не принимаются - переведите файл в JPG или PNG заранее.400 insufficient_funds, операция не создаётся.object-removal-2).