Создаёт изображения по текстовому описанию и редактирует загруженные картинки, включая точечные правки по маске. Цена - 6 рублей за изображение.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Fibo 1.5 умеет две вещи: рисовать картинку с нуля по описанию и править готовые изображения по текстовой инструкции. Правка подходит для типовых задач: сменить время года или освещение, убрать лишний предмет, переодеть человека, собрать сцену из нескольких фото. Если нужно изменить только часть кадра, передайте маску - модель поменяет выделенную область и не тронет остальное.
Основные сценарии:
create).edit).edit + mask_url).edit).Каждый вызов создаёт асинхронную операцию. Сохраните её id из ответа и проверяйте статус отдельным запросом.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режим выбирается параметром generation_type:
create - создание изображения по описанию prompt;edit - правка изображений из image_urls по инструкции instruction, при одном изображении можно добавить маску mask_url.{
"tool": "fibo-1-5",
"input": {
"generation_type": "create",
"prompt": "...",
"style_preset": "No Style",
"aspect_ratio": "1:1",
"resolution": "1MP"
}
}
tool - slug нейросети, всегда "fibo-1-5".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Да | Режим. create - создать изображение по описанию, edit - отредактировать загруженные изображения. Если не передать, будет create. |
prompt | string | Да, для create | Описание картинки, которую нужно создать: сюжет, место, свет, стиль. От 3 до 4000 символов. Используется только в режиме create. |
image_urls | string[] (url) | Да, для edit | Ссылки на изображения для правки, от 1 до 4. Порядок важен: в инструкции можно ссылаться на «первое фото», «второе фото». Форматы: jpg, jpeg, png, webp. Используется только в режиме edit. |
instruction | string | Да, для edit | Что нужно изменить на изображении. От 3 до 4000 символов. Используется только в режиме edit. |
mask_url | string (url) | Нет | Ссылка на маску в формате png: чёрно-белое изображение того же размера, что и исходник, белым закрашена область, которую нужно изменить. Работает только в режиме edit и только при одном изображении в image_urls. |
style_preset | enum | Да, для create | Готовый стиль результата. No Style - без стиля, модель следует описанию, Photoreal - фотореалистичная картинка. Используется только в режиме create. Если не передать, будет No Style. |
aspect_ratio | enum | Да | Соотношение сторон результата. Варианты: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9. При правке одного изображения результат сохраняет пропорции исходника. Если не передать, будет . |
Для image_urls и mask_url нужны внешние http/https ссылки, которые открываются без авторизации. Размер одного файла - до 128 МБ.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "fibo-1-5",
"input": {
"generation_type": "create",
"prompt": "Уютная мастерская керамиста: деревянный стол, глиняные чашки ручной работы, мягкий утренний свет из окна, пылинки в воздухе",
"style_preset": "Photoreal",
"aspect_ratio": "3:2",
"resolution": "1MP"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'fibo-1-5',
input: {
generation_type: 'create',
prompt: 'Уютная мастерская керамиста: деревянный стол, глиняные чашки ручной работы, мягкий утренний свет из окна, пылинки в воздухе',
style_preset: 'Photoreal',
aspect_ratio: '3:2',
resolution: '1MP',
},
}),
})
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': 'fibo-1-5',
'input': {
'generation_type': 'create',
'prompt': 'Уютная мастерская керамиста: деревянный стол, глиняные чашки ручной работы, мягкий утренний свет из окна, пылинки в воздухе',
'style_preset': 'Photoreal',
'aspect_ratio': '3:2',
'resolution': '1MP',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "fibo-1-5",
"input": {
"generation_type": "edit",
"instruction": "Сделай так, будто снимок сделан зимой: снег на парапете и набережной, падающие снежинки, мужчине оставь ту же одежду",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg"
],
"aspect_ratio": "9:16"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'fibo-1-5',
input: {
generation_type: 'edit',
instruction: 'Сделай так, будто снимок сделан зимой: снег на парапете и набережной, падающие снежинки, мужчине оставь ту же одежду',
image_urls: [
'https://cdn.example.com/source-image-1.jpg',
],
aspect_ratio: '9:16',
},
}),
})
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': 'fibo-1-5',
'input': {
'generation_type': 'edit',
'instruction': 'Сделай так, будто снимок сделан зимой: снег на парапете и набережной, падающие снежинки, мужчине оставь ту же одежду',
'image_urls': [
'https://cdn.example.com/source-image-1.jpg',
],
'aspect_ratio': '9:16',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Маска - PNG того же размера, что и исходное фото: белым закрашено то, что нужно изменить, чёрным - то, что должно остаться как есть. Маска работает только с одним изображением.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "fibo-1-5",
"input": {
"generation_type": "edit",
"instruction": "Убери женщину с жёлтым зонтом в выделенной области, на её месте продолжи мокрую гранитную набережную",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg"
],
"mask_url": "https://cdn.example.com/mask-1.png",
"aspect_ratio": "9:16"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'fibo-1-5',
input: {
generation_type: 'edit',
instruction: 'Убери женщину с жёлтым зонтом в выделенной области, на её месте продолжи мокрую гранитную набережную',
image_urls: [
'https://cdn.example.com/source-image-1.jpg',
],
mask_url: 'https://cdn.example.com/mask-1.png',
aspect_ratio: '9:16',
},
}),
})
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': 'fibo-1-5',
'input': {
'generation_type': 'edit',
'instruction': 'Убери женщину с жёлтым зонтом в выделенной области, на её месте продолжи мокрую гранитную набережную',
'image_urls': [
'https://cdn.example.com/source-image-1.jpg',
],
'mask_url': 'https://cdn.example.com/mask-1.png',
'aspect_ratio': '9:16',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Передайте от 2 до 4 ссылок и в инструкции укажите, что взять с какого фото. Маску в этом режиме не передавайте.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "fibo-1-5",
"input": {
"generation_type": "edit",
"instruction": "Надень на человека с первого фото свитер со второго фото, позу, лицо и фон оставь без изменений",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.png"
],
"aspect_ratio": "3:4"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'fibo-1-5',
input: {
generation_type: 'edit',
instruction: 'Надень на человека с первого фото свитер со второго фото, позу, лицо и фон оставь без изменений',
image_urls: [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.png',
],
aspect_ratio: '3:4',
},
}),
})
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': 'fibo-1-5',
'input': {
'generation_type': 'edit',
'instruction': 'Надень на человека с первого фото свитер со второго фото, позу, лицо и фон оставь без изменений',
'image_urls': [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.png',
],
'aspect_ratio': '3:4',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "fibo-1-5",
"cost": 6,
"balance_after": 494,
"created_at": "2026-09-30T19:50:36.754468+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "fibo-1-5",
"cost": 6,
"created_at": "2026-09-30T19:50:36.754468+00:00",
"completed_at": "2026-09-30T19:51:08.266501+00:00",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/fibo-1-5/image-1.png"
]
},
"error_message": null
}
Сохраните id из ответа на создание и запрашивайте статус операции по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForResult(id: string) {
while (true) {
const response = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await response.json()
if (operation.status === 'completed' || operation.status === 'failed') {
return operation
}
await new Promise((resolve) => setTimeout(resolve, 5000))
}
}
Статус меняется с queued на processing, а затем на completed или failed. Правка и создание в 1MP обычно занимают 20-40 секунд, создание в 4MP - около минуты. Опрашивать одну операцию можно не чаще раза в секунду, разумный интервал - 3-5 секунд.
После завершения в result приходит:
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/fibo-1-5/image-1.png"
]
}
type - всегда "image".urls - массив с одной ссылкой на готовое изображение в формате PNG.При правке одного изображения результат приходит в пропорциях исходника: в нашей проверке фото 1536 × 2752 вернулось того же размера.
Цена фиксированная - 6 ₽ за запуск в любом режиме. Режим, стиль, пропорции, разрешение, число входных изображений и наличие маски на цену не влияют.
| Сценарий | Цена |
|---|---|
Создание (create), 1MP или 4MP | 6 ₽ |
Редактирование (edit), от 1 до 4 изображений | 6 ₽ |
| Редактирование по маске | 6 ₽ |
Стоимость списывается при создании операции и приходит в поле cost ответа.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую оплаченную операцию. Если ответ потерялся, не повторяйте запрос вслепую.queued, результат забирается по id.http/https ссылками, которые открываются без авторизации. Изображения - jpg, jpeg, png, webp, маска - только png.edit можно передать от 1 до 4 изображений. Маска работает только при одном изображении - с двумя и больше её не передавайте.create не нужны image_urls, instruction и mask_url, в edit - prompt, style_preset и resolution.failed, result будет null, а причина придёт в error_message.1:1resolution | enum | Да, для create | Размер результата. 1MP - около 1 мегапикселя, 4MP - около 4 мегапикселей. Используется только в режиме create. Если не передать, будет 1MP. |