Увеличивает разрешение изображения и подтягивает детали, резкость и общую чистоту картинки. Цена зависит от целевого размера: от 0,75 ₽ за 1-4 МП до 18 ₽ за 65-128 МП.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Pruna AI P-Image Upscale увеличивает фотографию до заданного размера в мегапикселях и подтягивает резкость и мелкие детали. Это быстрый и недорогой апскейлер: снимок 640×480 доводится до 1 МП примерно за 20 секунд, до 32 МП - обычно за минуту.
Когда пригодится:
Вы задаёте итоговую площадь в мегапикселях (target), пропорции исходника сохраняются. Вызов создаёт асинхронную операцию: сразу приходит id, готовая картинка забирается проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режим у нейросети один: одно изображение на входе, одно на выходе. Цена зависит только от target.
{
"tool": "p-image-upscale",
"input": {
"image": "https://cdn.example.com/source-image-1.jpg",
"target": 4,
"output_format": "png"
}
}
tool - slug нейросети, всегда "p-image-upscale".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
image | string (url) | Да | Ссылка на исходное изображение. Один файл, внешний http/https URL с расширением .jpg, .jpeg, .png или .webp. Ссылка должна открываться без авторизации, файл до 128 МБ. |
target | integer | Да | Итоговый размер в мегапикселях - целое число от 1 до 128. Пропорции сохраняются: фото 640×480 при target: 1 станет 1180×886. От этого числа зависит цена. Если поле не передать, будет 4. |
output_format | enum | Да | Формат результата: png - без потерь, самый тяжёлый файл; webp - заметно легче при почти том же качестве. Если поле не передать, будет png. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "p-image-upscale",
"input": {
"image": "https://cdn.example.com/source-image-1.jpg",
"target": 4,
"output_format": "png"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'p-image-upscale',
input: {
image: 'https://cdn.example.com/source-image-1.jpg',
target: 4,
output_format: 'png',
},
}),
})
const operation = await response.json()
console.log(operation.id, operation.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'p-image-upscale',
'input': {
'image': 'https://cdn.example.com/source-image-1.jpg',
'target': 4,
'output_format': 'png',
},
},
timeout=60,
)
print(response.status_code)
print(response.json())
32 МП - это примерно 6900×4600 для фото 3:2. WebP заметно легче PNG такого же размера.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "p-image-upscale",
"input": {
"image": "https://cdn.example.com/product-photo-1.png",
"target": 32,
"output_format": "webp"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'p-image-upscale',
input: {
image: 'https://cdn.example.com/product-photo-1.png',
target: 32,
output_format: 'webp',
},
}),
})
const operation = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'p-image-upscale',
'input': {
'image': 'https://cdn.example.com/product-photo-1.png',
'target': 32,
'output_format': 'webp',
},
},
timeout=60,
)
print(response.json())
Для target: 1:
{
"id": "op_uuid-123",
"status": "queued",
"tool": "p-image-upscale",
"cost": 0.75,
"balance_after": 499.25,
"created_at": "2026-09-30T21:33:38.337173+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "p-image-upscale",
"cost": 0.75,
"created_at": "2026-09-30T21:33:38.337173+00:00",
"completed_at": "2026-09-30T21:33:57.393154+00:00",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/p-image-upscale/image-1.webp"
]
},
"error_message": null
}
Пока картинка обрабатывается, status будет queued или processing, а result - null. При ошибке придёт status: "failed", result: null и текст причины в error_message, деньги вернутся на баланс.
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Пример ожидания результата на JavaScript / TypeScript:
async function waitForImage(id: string) {
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, 5000))
}
}
Одну операцию можно опрашивать не чаще раза в секунду, иначе придёт 429. Здесь хватит запроса раз в 5 секунд.
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/p-image-upscale/image-1.webp"
]
}
type - всегда "image".urls - массив из одной ссылки на готовую картинку в формате из output_format.Площадь результата близка к target мегапикселей, пропорции как у исходника. Например, фото 640×480 при target: 1 вернулось размером 1180×886.
Цена фиксированная за запуск и зависит только от target. Формат результата и размер исходника на цену не влияют. Сумма списывается при создании операции и приходит в поле cost.
target, МП | Цена за запуск |
|---|---|
| 1-4 | 0,75 ₽ |
| 5-8 | 1,5 ₽ |
| 9-16 | 3 ₽ |
| 17-32 | 6 ₽ |
| 33-64 | 9 ₽ |
| 65-128 | 18 ₽ |
Внутри ступени цена одна и та же: target: 5 и target: 8 стоят одинаково, поэтому выгодно брать верхнюю границу ступени. Если target не передан, считается по 4 - 0,75 ₽.
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и списывает деньги ещё раз. Если ответ на POST потерялся, не повторяйте его вслепую.queued, результат забирайте через GET /api/v1/operations/{id}.image принимаются только внешние http/https ссылки на .jpg, .jpeg, .png или .webp, доступные без авторизации. Ссылки на localhost и внутренние адреса отклоняются.target - только целое число от 1 до 128. Дробное значение или число вне диапазона вернёт 400 validation_error, операция не создастся.target больше площади исходника: апскейл нужен, чтобы увеличить картинку, а не сохранить её размер.failed с сообщением об этом, деньги вернутся.id.