Создаёт изображения по текстовому описанию и редактирует загруженные картинки по заданию, в том числе с несколькими референсами. Цена - 2 рубля за изображение.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Muse Image - модель для картинок от компании Meta (признана экстремистской организацией и запрещена в РФ). Она умеет две вещи: рисовать изображение по текстовому заданию и менять уже готовые фото по вашей инструкции. Во втором случае можно передать до 10 картинок сразу: например, товар и фон, человека и одежду, несколько предметов для одной сцены.
Типичные задачи: иллюстрации к постам, предметные фото для каталога, перенос вещи в новую обстановку, смена стиля и времени года на снимке, сборка коллажа из нескольких исходников. Один запуск - одна картинка за 2 ₽.
Режим выбирается сам: без image_urls модель генерирует картинку с нуля, с image_urls - редактирует присланные фото. Каждый вызов создаёт асинхронную операцию. Сохраните id из ответа и проверяйте по нему статус.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Сценарии:
prompt, пропорции и формат.image_urls с одной ссылкой и описываете, что изменить.image_urls от 2 до 10 ссылок, в задании объясняете, что откуда взять.{
"tool": "meta-muse-image",
"input": {
"prompt": "...",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
],
"aspect_ratio": "1:1",
"output_format": "webp"
}
}
tool - slug нейросети, всегда "meta-muse-image".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.image_urls нужен только для правки фото. Для генерации по тексту его просто не передавайте.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt | string | Да | Задание: что нарисовать или как изменить фото. От 3 до 5000 символов, можно по-русски. При работе с несколькими фото ссылайтесь на них по порядку: «товар с первого фото», «фон со второго». |
image_urls | string[] (url) | Нет | Исходные фото для правки, от 1 до 10 ссылок. Форматы: .jpg, .jpeg, .png, .webp. Нужны публичные http/https ссылки без авторизации. Порядок ссылок важен: модель понимает «первое фото», «второе фото» именно в этом порядке. Без этого поля модель рисует картинку с нуля. |
aspect_ratio | enum | Да | Пропорции результата. Варианты: 1:1 - квадрат, 4:3 и 3:2 - горизонтальное фото, 16:9 - обложка или экран, 21:9 - широкая панорама, 3:4 и 2:3 - вертикальный портрет, 9:16 - сторис, 9:21 - узкая вертикаль. Для правки фото выбирайте пропорции исходника, иначе модель перестроит кадр под новый формат. Если не передать, будет 1:1. |
output_format | enum | Да | Формат файла результата: webp - самый лёгкий файл, png - без потери качества, jpeg - привычный формат для фото. Если не передать, будет webp. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "meta-muse-image",
"input": {
"prompt": "Старая цветная фотография: рыбаки на деревянной лодке у причала на рассвете, туман над водой, живые эмоции, плёночное зерно",
"aspect_ratio": "3:2",
"output_format": "jpeg"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'meta-muse-image',
input: {
prompt:
'Старая цветная фотография: рыбаки на деревянной лодке у причала на рассвете, туман над водой, живые эмоции, плёночное зерно',
aspect_ratio: '3:2',
output_format: 'jpeg',
},
}),
})
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': 'meta-muse-image',
'input': {
'prompt': 'Старая цветная фотография: рыбаки на деревянной лодке у причала на рассвете, туман над водой, живые эмоции, плёночное зерно',
'aspect_ratio': '3:2',
'output_format': 'jpeg',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Кроссовку с фото в прихожей переносим на ночную улицу. Исходник вертикальный 2:3, поэтому и aspect_ratio ставим 2:3.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "meta-muse-image",
"input": {
"prompt": "Поставь эту белую кроссовку на мокрый асфальт ночного города, неоновые отражения в лужах, кроссовка крупным планом, форма и детали без изменений",
"image_urls": [
"https://cdn.example.com/white-sneaker.jpg"
],
"aspect_ratio": "2:3",
"output_format": "jpeg"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'meta-muse-image',
input: {
prompt:
'Поставь эту белую кроссовку на мокрый асфальт ночного города, неоновые отражения в лужах, кроссовка крупным планом, форма и детали без изменений',
image_urls: ['https://cdn.example.com/white-sneaker.jpg'],
aspect_ratio: '2:3',
output_format: 'jpeg',
},
}),
})
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': 'meta-muse-image',
'input': {
'prompt': 'Поставь эту белую кроссовку на мокрый асфальт ночного города, неоновые отражения в лужах, кроссовка крупным планом, форма и детали без изменений',
'image_urls': ['https://cdn.example.com/white-sneaker.jpg'],
'aspect_ratio': '2:3',
'output_format': 'jpeg',
},
},
timeout=30,
)
print(response.json())
Куртка с одного фото, интерьер кофейни с другого. В задании прямо говорим, что с какого снимка взять.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "meta-muse-image",
"input": {
"prompt": "Повесь куртку с первого фото на спинку стула в кофейне со второго фото. Цвет, фактура и молния куртки как на исходнике, мягкий дневной свет из окна",
"image_urls": [
"https://cdn.example.com/mustard-jacket.png",
"https://cdn.example.com/coffee-shop.jpg"
],
"aspect_ratio": "4:3",
"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: 'meta-muse-image',
input: {
prompt:
'Повесь куртку с первого фото на спинку стула в кофейне со второго фото. Цвет, фактура и молния куртки как на исходнике, мягкий дневной свет из окна',
image_urls: [
'https://cdn.example.com/mustard-jacket.png',
'https://cdn.example.com/coffee-shop.jpg',
],
aspect_ratio: '4:3',
output_format: 'webp',
},
}),
})
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': 'meta-muse-image',
'input': {
'prompt': 'Повесь куртку с первого фото на спинку стула в кофейне со второго фото. Цвет, фактура и молния куртки как на исходнике, мягкий дневной свет из окна',
'image_urls': [
'https://cdn.example.com/mustard-jacket.png',
'https://cdn.example.com/coffee-shop.jpg',
],
'aspect_ratio': '4:3',
'output_format': 'webp',
},
},
timeout=30,
)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "meta-muse-image",
"cost": 2,
"balance_after": 498,
"created_at": "2026-09-30T21:31:10.278351+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "meta-muse-image",
"cost": 2,
"created_at": "2026-09-30T21:31:10.278351+00:00",
"completed_at": "2026-09-30T21:32:17.334329+00:00",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/meta-muse-image/image-1.jpg"
]
},
"error_message": null
}
Чаще всего операция падает из-за модерации:
{
"id": "op_uuid-123",
"status": "failed",
"tool": "meta-muse-image",
"cost": 2,
"created_at": "2026-09-30T21:31:10.278351+00:00",
"completed_at": "2026-09-30T21:31:24.918204+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: 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. Обычно картинка готова примерно за минуту. Опрашивать одну операцию можно не чаще раза в секунду, разумный интервал - 3-5 секунд.
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/meta-muse-image/image-1.jpg"
]
}
type - всегда "image".urls - массив из одной ссылки. Один запуск всегда даёт одну картинку, сколько бы фото вы ни передали.output_format: webp, png или jpeg (у JPEG расширение ссылки .jpg).Размер картинки задаётся пропорциями aspect_ratio, а не размером исходника: например, при 2:3 получается 1280×1920 пикселей.
Цена фиксированная - 2 ₽ за одну картинку. Она одинакова для генерации по тексту и для правки, не зависит от числа фото в image_urls, пропорций и формата.
| Сценарий | Цена |
|---|---|
| Генерация по тексту | 2 ₽ |
| Правка одного фото | 2 ₽ |
| Сцена из 2-10 фото | 2 ₽ |
Стоимость списывается при создании операции и приходит в поле cost ответа.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую оплаченную операцию. Если ответ потерялся, не повторяйте запрос вслепую.queued, результат забирается по id.http/https, которые открываются без авторизации. Форматы - JPG, JPEG, PNG или WebP, не больше 10 ссылок.aspect_ratio как у исходного фото. Если пропорции другие, модель достроит или обрежет кадр и может поменять композицию.