Восстанавливает и улучшает лица на фото: убирает размытие, шум и повреждения, делает черты лица более чёткими. Цена - 1 рубль.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
GFP-GAN восстанавливает лица на фотографиях: убирает размытие, шум, следы сжатия и мелкие повреждения, возвращает чёткость глазам, губам и волосам. Заодно модель меняет размер всего изображения, обычно увеличивает его вдвое. Подходит для старых и отсканированных снимков, маленьких аватарок, кадров со слабой камеры и портретов, которые пережили несколько пересылок в мессенджерах.
Модель работает именно с лицами. Фон и остальные детали она тоже увеличивает, но главный эффект - на лицах. В нашей проверке портрет 1104×1472 при scale: 2 превратился в 2208×2944 за 26 секунд.
Каждый вызов создаёт асинхронную операцию. После запуска нужно отдельно проверять статус по id.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус операции.Режимов у модели нет: запрос всегда состоит из ссылки на фото, версии восстановления и масштаба. Ниже два типичных сценария:
version: "v1.4", scale: 2);version: "v1.3", scale: 1).{
"tool": "gfp-gan",
"input": {
"img": "https://cdn.example.com/old-portrait-1.jpg",
"version": "v1.4",
"scale": 2
}
}
tool - slug нейросети, всегда "gfp-gan".input - параметры запуска. Поля передаются напрямую внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
img | string (url) | Да | Ссылка на фото с лицом. Одна ссылка, только внешний http/https URL. Допустимые расширения: .jpg, .jpeg, .png, .webp. |
version | enum | Да | Версия восстановления лица. v1.4 - лучше сохраняет детали и сходство с оригиналом, подходит для большинства фото. v1.3 - даёт более мягкий, гладкий результат. |
scale | number | Да | Целое число от 1 до 4, задаёт размер результата. У фото высотой от 300 px: 2 и 4 - вдвое больше по каждой стороне, 3 - в 1,5 раза, 1 - вдвое меньше. У фото ниже 300 px всё вдвое крупнее: 1 - как исходник, 3 - втрое, 2 и 4 - вчетверо. |
Если не передать version, подставится v1.4, если не передать scale - 2. Надёжнее всегда указывать оба поля явно.
Основной сценарий: старое или размытое фото становится чётче и вдвое крупнее.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gfp-gan",
"input": {
"img": "https://cdn.example.com/old-portrait-1.jpg",
"version": "v1.4",
"scale": 2
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gfp-gan',
input: {
img: 'https://cdn.example.com/old-portrait-1.jpg',
version: 'v1.4',
scale: 2,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gfp-gan',
'input': {
'img': 'https://cdn.example.com/old-portrait-1.jpg',
'version': 'v1.4',
'scale': 2,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Подходит, когда нужно только почистить лицо на маленьком фото, например на аватарке или кадре из видеозвонка. Фото ниже 300 px останется своего размера, а более крупное с scale: 1 станет вдвое меньше.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gfp-gan",
"input": {
"img": "https://cdn.example.com/avatar-1.png",
"version": "v1.3",
"scale": 1
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gfp-gan',
input: {
img: 'https://cdn.example.com/avatar-1.png',
version: 'v1.3',
scale: 1,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gfp-gan',
'input': {
'img': 'https://cdn.example.com/avatar-1.png',
'version': 'v1.3',
'scale': 1,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "gfp-gan",
"cost": 1,
"balance_after": 499,
"created_at": "2026-09-30T19:48:53Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gfp-gan",
"cost": 1,
"created_at": "2026-09-30T19:48:53Z",
"completed_at": "2026-09-30T19:49:19Z",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/gfp-gan/image-1.png"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "gfp-gan",
"cost": 1,
"created_at": "2026-09-30T19:48:53Z",
"completed_at": "2026-09-30T19:49:05Z",
"result": null,
"error_message": "Произошла ошибка, нейросеть временно недоступна. Попробуйте повторить запрос позже."
}
После создания операции сохраните id и проверяйте статус запросом:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const res = await fetch('https://bratuha.ru/api/v1/operations/op_uuid-123', {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await res.json()
if (operation.status === 'completed') {
console.log(operation.result.urls[0])
} else if (operation.status === 'failed') {
console.error(operation.error_message)
}
Обычно операция готова за 30-60 секунд, иногда до 2-3 минут. Опрашивайте статус раз в 5 секунд (не чаще раза в секунду для одной операции), пока он не станет completed или failed.
После завершения GFP-GAN возвращает:
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/gfp-gan/image-1.png"
]
}
type - всегда "image".urls - массив из одной ссылки на восстановленное изображение.Результат приходит в PNG, пропорции сохраняются. Размер зависит от scale и высоты исходника (см. таблицу параметров); при scale: 2 у фото от 300 px стороны ровно вдвое больше. Файлы получаются тяжёлыми: в нашей проверке PNG 2208×2944 весил 7,7 МБ. Если нужен JPG, перекодируйте результат у себя.
Цена фиксированная - 1 ₽ за изображение. Она не зависит от version, scale, размера и формата исходника.
| Что запускаете | Цена |
|---|---|
| Одно фото, любая версия и любой масштаб от 1 до 4 | 1 ₽ |
Стоимость списывается при создании операции и возвращается в поле cost. Если операция завершилась ошибкой, деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и снова списывает деньги.queued, затем проверяете статус по id.img принимает только внешние http/https ссылки с расширениями .jpg, .jpeg, .png, .webp. Ссылка должна открываться без авторизации, файл - до 128 МБ. Ссылки на localhost и внутренние адреса сети не принимаются.scale передавайте целым числом от 1 до 4. Дробные значения и числа вне диапазона вернут ошибку validation_error.v1.4.