Создаёт 3D-модель по одной картинке или по нескольким фотографиям объекта с разных сторон. Цена варьируется от 35 до 70 рублей за одну генерацию - зависит от качества текстур и опции квад-меша.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Tripo 3D 2.5 строит текстурированную 3D-модель по фотографии объекта. Подходит для игрушек, фигурок, персонажей, мебели, товаров для карточек и AR-примерки. Есть два сценария:
image - модель по одному фото;multiview - модель по четырём фото одного объекта: спереди, слева, сзади и справа. Так модель точнее повторяет стороны, которых не видно на главном снимке.По умолчанию результат приходит в GLB с текстурами, при включённой квадовой сетке - в FBX. Можно заказать и модель без текстур - только геометрию. Каждый вызов создаёт асинхронную операцию: сразу приходит её id, готовая модель забирается отдельным запросом примерно через полторы-две минуты. Цена от 35 ₽ и зависит от текстур и квадовой сетки.
POST /api/v1/operationsAuthorization: Bearer brth_...id и статус queued. Результат забирается по id.Сценарии:
tripo_generation_type: "image").tripo_generation_type: "multiview"{
"tool": "tripo-3d-2-5",
"input": {
"tripo_generation_type": "image",
"image_url": "https://cdn.example.com/toy-cat-1.jpg",
"texture": "standard",
"quad": false,
"use_advanced": false
}
}
tool - slug нейросети, всегда "tripo-3d-2-5".input - параметры запуска. Поля передаются прямо внутри input, без дополнительной вложенности.image нужен image_url, для multiview - четыре ссылки на ракурсы.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
tripo_generation_type | string | Да | Сценарий: image - по одному фото, multiview - по четырём ракурсам. |
image_url | string (url) | Да, для image | Только для image. Фото объекта: JPG, JPEG, PNG или WebP. |
front_image_url | string (url) | Да, для multiview | Только для multiview. Объект спереди. JPG, JPEG, PNG или WebP. |
left_image_url | string (url) | Да, для multiview | Только для multiview. Объект слева. |
back_image_url | string (url) | Да, для multiview | Только для multiview. Объект сзади. |
right_image_url | string (url) | Да, для multiview | Только для multiview. Объект справа. |
texture | string | Да | Текстуры: no - без текстур (только геометрия, серая модель), standard - обычные, HD - детальные. |
quad | boolean | Нет | true - сетка из четырёхугольников, удобная для доработки в 3D-редакторе. Результат тогда приходит в формате FBX. false - обычная треугольная сетка и GLB. |
use_advanced | boolean | Нет | Включите true, когда передаёте дополнительные поля ниже: face_limit, auto_size, texture_alignment, orientation. |
face_limit | number | Нет | Ограничение числа полигонов, целое число от 1000 до 200000. Пригодится для игр и веба, где важен лёгкий файл. |
auto_size | boolean | Нет | Масштабировать модель к реальным размерам объекта в метрах. |
texture_alignment | string | Нет | Что важнее при наложении текстуры: original_image - совпадение с исходным фото, geometry - аккуратная посадка на форму модели. |
orientation | string | Нет | Поворот модели: default - стандартная ориентация, align_image - повернуть так же, как объект стоит на фото. |
Самый частый сценарий: одно фото объекта, стандартные текстуры, GLB.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "tripo-3d-2-5",
"input": {
"tripo_generation_type": "image",
"image_url": "https://cdn.example.com/toy-cat-1.jpg",
"texture": "standard",
"quad": false,
"use_advanced": 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: 'tripo-3d-2-5',
input: {
tripo_generation_type: 'image',
image_url: 'https://cdn.example.com/toy-cat-1.jpg',
texture: 'standard',
quad: false,
use_advanced: 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': 'tripo-3d-2-5',
'input': {
'tripo_generation_type': 'image',
'image_url': 'https://cdn.example.com/toy-cat-1.jpg',
'texture': 'standard',
'quad': False,
'use_advanced': False,
},
},
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": "tripo-3d-2-5",
"input": {
"tripo_generation_type": "multiview",
"front_image_url": "https://cdn.example.com/sneaker-front-1.jpg",
"left_image_url": "https://cdn.example.com/sneaker-left-1.jpg",
"back_image_url": "https://cdn.example.com/sneaker-back-1.jpg",
"right_image_url": "https://cdn.example.com/sneaker-right-1.jpg",
"texture": "HD",
"quad": false,
"use_advanced": true,
"face_limit": 50000,
"auto_size": true,
"texture_alignment": "original_image",
"orientation": "default"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'tripo-3d-2-5',
input: {
tripo_generation_type: 'multiview',
front_image_url: 'https://cdn.example.com/sneaker-front-1.jpg',
left_image_url: 'https://cdn.example.com/sneaker-left-1.jpg',
back_image_url: 'https://cdn.example.com/sneaker-back-1.jpg',
right_image_url: 'https://cdn.example.com/sneaker-right-1.jpg',
texture: 'HD',
quad: false,
use_advanced: true,
face_limit: 50000,
auto_size: true,
texture_alignment: 'original_image',
orientation: 'default',
},
}),
})
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': 'tripo-3d-2-5',
'input': {
'tripo_generation_type': 'multiview',
'front_image_url': 'https://cdn.example.com/sneaker-front-1.jpg',
'left_image_url': 'https://cdn.example.com/sneaker-left-1.jpg',
'back_image_url': 'https://cdn.example.com/sneaker-back-1.jpg',
'right_image_url': 'https://cdn.example.com/sneaker-right-1.jpg',
'texture': 'HD',
'quad': False,
'use_advanced': True,
'face_limit': 50000,
'auto_size': True,
'texture_alignment': 'original_image',
'orientation': 'default',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Для доработки в Blender, Maya или 3ds Max: сетка из четырёхугольников, файл FBX.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "tripo-3d-2-5",
"input": {
"tripo_generation_type": "image",
"image_url": "https://cdn.example.com/armchair-1.png",
"texture": "standard",
"quad": true,
"use_advanced": 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: 'tripo-3d-2-5',
input: {
tripo_generation_type: 'image',
image_url: 'https://cdn.example.com/armchair-1.png',
texture: 'standard',
quad: true,
use_advanced: 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': 'tripo-3d-2-5',
'input': {
'tripo_generation_type': 'image',
'image_url': 'https://cdn.example.com/armchair-1.png',
'texture': 'standard',
'quad': True,
'use_advanced': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "tripo-3d-2-5",
"cost": 50,
"balance_after": 450,
"created_at": "2026-09-30T21:31:26.04947+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "tripo-3d-2-5",
"cost": 50,
"created_at": "2026-09-30T21:31:26.04947+00:00",
"completed_at": "2026-09-30T21:33:06.022648+00:00",
"result": {
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/tripo-3d-2-5/toy-cat-1.glb",
"name": "result"
}
]
},
"error_message": null
}
Если фото не прошло проверку модели, операция завершается статусом failed, result равен null, а причина лежит в error_message:
{
"id": "op_uuid-123",
"status": "failed",
"tool": "tripo-3d-2-5",
"cost": 50,
"created_at": "2026-09-30T21:31:26.04947+00:00",
"completed_at": "2026-09-30T21:31:41.270335+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 waitForModel(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') {
const file = op.result?.files?.[0]
if (!file) throw new Error('Операция завершилась без файла модели')
return file.url
}
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 10000))
}
}
Статус одной операции можно запрашивать не чаще раза в секунду, иначе придёт 429 rate_limit_exceeded. Модель строится около двух минут, поэтому хватает опроса раз в 10-15 секунд.
После завершения в result приходит один файл модели:
{
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/tripo-3d-2-5/toy-cat-1.glb",
"name": "result"
}
]
}
type - всегда "file".files - массив из одного элемента. url - ссылка на файл модели, name - служебное имя "result", расширение берите из ссылки.quad: false приходит .glb: одна сетка с PBR-материалом, текстуры упакованы внутрь файла. Модели получаются плотными: со стандартными текстурами файл весит около 15-20 МБ. Чтобы облегчить его, задайте face_limit.quad: true результат приходит в формате FBX.Скачайте файл к себе после завершения операции, если он нужен надолго.
Цена складывается из текстур и квадовой сетки.
texture | quad: false | quad: true |
|---|---|---|
no | 35 ₽ | 45 ₽ |
standard | 50 ₽ | 60 ₽ |
HD | 60 ₽ | 70 ₽ |
standard дороже no на 15 ₽, HD дороже standard на 10 ₽, quad: true добавляет 10 ₽.image или multiview), face_limit и остальные дополнительные настройки на цену не влияют.Сумма списывается при создании операции и приходит в поле cost, остаток баланса - в balance_after. Если операция завершилась ошибкой, деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает деньги. Если ответ не дошёл из-за обрыва сети, не повторяйте запрос автоматически - сначала проверьте баланс или историю в аккаунте.queued, дальше статус проверяется по id. Обычно модель готова через 1,5-2 минуты.http/https. Адреса localhost, loopback и частные IP не принимаются. Ссылка должна открываться без авторизации и cookies, файл - до 128 МБ..jpg, .jpeg, .png, .webp, иначе API сразу вернёт 400 validation_error и деньги не спишутся.multiview все четыре фото должны показывать один и тот же объект при одинаковом свете и примерно одинаковом масштабе. Ракурсы подписаны по полям: не путайте левый и правый вид, иначе модель склеит стороны неправильно.