Конвертирует одно изображение в 3D-модель с формой и текстурами. Цена зависит от разрешения: 512p - 45 ₽/изображение, 1024p - 50 ₽/изображение, 1536p - 55 ₽/изображение.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Trellis 2 превращает одну картинку в 3D-модель с геометрией и текстурами. На выходе - файл GLB, который открывается в Blender, Unity, Unreal, three.js и большинстве онлайн-просмотрщиков. Подходит для быстрых моделей товаров, игрушек и фигурок, игровых предметов и персонажей по концепт-арту.
Модель работает быстро - обычно за 1-2,5 минуты - и недорого, поэтому её удобно использовать для черновых моделей и массовой обработки. Для большинства задач достаточно ссылки на картинку и разрешения. Если нужно управлять весом файла, размером текстуры или сглаживанием сетки, включите дополнительные параметры.
Каждый вызов создаёт асинхронную операцию. После запуска проверяйте статус по id.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус операции.Режим один - 3D по одному изображению. Набор параметров зависит от флага use_advanced:
use_advanced: false (или поле не передано) - модель работает на своих стандартных настройках, все тонкие параметры игнорируются;use_advanced: true - в модель уходят параметры генерации, размер текстуры, число вершин и настройки remesh.{
"tool": "trellis-2",
"input": {
"image_url": "https://cdn.example.com/figurine-photo.jpg",
"resolution": "1024",
"use_advanced": false
}
}
tool - slug нейросети, всегда "trellis-2".input - параметры запуска. Поля передаются напрямую внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
image_url | string (url) | Да | Картинка с объектом. Одна ссылка, внешний http/https URL с расширением .jpg, .jpeg, .png или .webp. |
resolution | enum | Да | Разрешение, в котором модель строит объект: 512, 1024 или 1536. Чем выше, тем больше мелких деталей и тем дороже: 45, 50 и 55 ₽. Если не передать, используется 1024. |
use_advanced | boolean | Нет | Включает дополнительные параметры ниже. При false они не учитываются, даже если переданы. По умолчанию false. |
ss_guidance_strength | number | Нет | Этап 1, общая форма: насколько форма следует картинке. От 0 до 10, шаг 0.1. Больше - точнее, но возможен шум. По умолчанию 7.5. Только при use_advanced: true. |
ss_guidance_rescale | number | Нет | Этап 1: гасит артефакты при высоком ss_guidance_strength. От 0 до 1, шаг 0.01. Меньше - сильнее влияние картинки, больше - стабильнее. По умолчанию 0.7. Только при use_advanced: true. |
ss_sampling_steps | number | Нет | Этап 1: число шагов генерации. Целое от 1 до 50. Больше - дольше, но иногда качественнее. По умолчанию 12. Только при use_advanced: true. |
ss_rescale_t | number | Нет | Этап 1: резкость расписания шума. От 1 до 6, шаг 0.1. Больше - более резкие переходы формы. По умолчанию 5. Только при use_advanced: true. |
shape_slat_guidance_strength | number | Нет | Этап 2, детальная геометрия: насколько детали следуют картинке. От 0 до 10, шаг 0.1. По умолчанию 7.5. Только при use_advanced: true. |
shape_slat_guidance_rescale | number | Нет | Этап 2: гасит артефакты геометрии. От 0 до 1, шаг 0.01. Увеличьте, если поверхность получается шумной. По умолчанию 0.5. Только при use_advanced: true. |
shape_slat_sampling_steps | number | Нет | Этап 2: число шагов уточнения формы. Целое от 1 до 50. По умолчанию 12. Только при use_advanced: true. |
shape_slat_rescale_t | number | Нет | Этап 2: резкость расписания шума для геометрии. От 1 до 6, шаг 0.1. Больше - острее мелкие детали. По умолчанию 3. Только при use_advanced: true. |
tex_slat_guidance_strength | number | Нет | Этап 3, текстура: насколько цвета следуют картинке. От 0 до 10, шаг 0.1. Больше - ярче, но возможна перенасыщенность. По умолчанию 1. Только при use_advanced: true. |
tex_slat_guidance_rescale | number | Нет | Этап 3: гасит артефакты текстуры (шум, полосы). От 0 до 1, шаг 0.01. Если не передать, модель использует своё значение. Только при use_advanced: true. |
tex_slat_sampling_steps | number | Нет | Этап 3: число шагов генерации текстуры. Целое от 1 до 50. По умолчанию 12. Только при use_advanced: true. |
tex_slat_rescale_t | number | Нет | Этап 3: резкость расписания шума для текстуры. От 1 до 6, шаг 0.1. По умолчанию 3. Только при use_advanced: true. |
decimation_target | number | Нет | Целевое число вершин итоговой сетки. Целое от 5 000 до 2 000 000. Меньше - легче файл и меньше деталей: 20 000 - 50 000 для веба и мобильных, 500 000 - хороший баланс. По умолчанию 500000. Только при use_advanced: true. |
texture_size | enum | Нет | Размер текстуры в пикселях: 1024, 2048 или 4096. Больше - детальнее и тяжелее файл. По умолчанию 2048. Только при use_advanced: true. |
remesh | boolean | Нет | Перестроить сетку после генерации: получается более ровная и аккуратная топология. По умолчанию true. Только при use_advanced: true. |
remesh_band | number | Нет | Насколько далеко remesh может сдвигать вершины от исходной поверхности. От 0 до 4, шаг 0.1. Больше - сильнее сглаживание, но теряются мелкие детали. По умолчанию 1. Учитывается при use_advanced: true. |
remesh_project | number | Нет | Насколько возвращать вершины после remesh на исходную поверхность. От 0 до 1, шаг 0.01: 0 - без возврата, поверхность глаже; 1 - полный возврат, детали сохраняются. Если не передать, модель использует своё значение. Учитывается при use_advanced: true. |
Параметры с шагом 1 (ss_sampling_steps, shape_slat_sampling_steps, tex_slat_sampling_steps) и decimation_target принимают только целые числа, дробное значение вернёт validation_error.
Самый простой вызов: только картинка и разрешение. Модель сама выбирает текстуру 2048 px и плотность сетки.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "trellis-2",
"input": {
"image_url": "https://cdn.example.com/figurine-photo.jpg",
"resolution": "1024",
"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: 'trellis-2',
input: {
image_url: 'https://cdn.example.com/figurine-photo.jpg',
resolution: '1024',
use_advanced: false,
},
}),
})
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': 'trellis-2',
'input': {
'image_url': 'https://cdn.example.com/figurine-photo.jpg',
'resolution': '1024',
'use_advanced': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Дополнительные параметры включены, чтобы уменьшить вес файла: 50 000 вершин, текстура 1024 px, сетка перестроена и частично возвращена на исходную поверхность.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "trellis-2",
"input": {
"image_url": "https://cdn.example.com/product-photo.png",
"resolution": "1024",
"use_advanced": true,
"decimation_target": 50000,
"texture_size": "1024",
"remesh": true,
"remesh_band": 1,
"remesh_project": 0.5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'trellis-2',
input: {
image_url: 'https://cdn.example.com/product-photo.png',
resolution: '1024',
use_advanced: true,
decimation_target: 50000,
texture_size: '1024',
remesh: true,
remesh_band: 1,
remesh_project: 0.5,
},
}),
})
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': 'trellis-2',
'input': {
'image_url': 'https://cdn.example.com/product-photo.png',
'resolution': '1024',
'use_advanced': True,
'decimation_target': 50000,
'texture_size': '1024',
'remesh': True,
'remesh_band': 1,
'remesh_project': 0.5,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Разрешение 1536, больше шагов генерации на всех этапах, текстура 4096 px и до 1 млн вершин, без remesh. Файл получится тяжёлым, а генерация - дольше.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "trellis-2",
"input": {
"image_url": "https://cdn.example.com/character-art.webp",
"resolution": "1536",
"use_advanced": true,
"ss_guidance_strength": 7.5,
"ss_sampling_steps": 20,
"shape_slat_guidance_strength": 7.5,
"shape_slat_sampling_steps": 20,
"tex_slat_guidance_strength": 1.5,
"tex_slat_sampling_steps": 20,
"decimation_target": 1000000,
"texture_size": "4096",
"remesh": 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: 'trellis-2',
input: {
image_url: 'https://cdn.example.com/character-art.webp',
resolution: '1536',
use_advanced: true,
ss_guidance_strength: 7.5,
ss_sampling_steps: 20,
shape_slat_guidance_strength: 7.5,
shape_slat_sampling_steps: 20,
tex_slat_guidance_strength: 1.5,
tex_slat_sampling_steps: 20,
decimation_target: 1000000,
texture_size: '4096',
remesh: false,
},
}),
})
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': 'trellis-2',
'input': {
'image_url': 'https://cdn.example.com/character-art.webp',
'resolution': '1536',
'use_advanced': True,
'ss_guidance_strength': 7.5,
'ss_sampling_steps': 20,
'shape_slat_guidance_strength': 7.5,
'shape_slat_sampling_steps': 20,
'tex_slat_guidance_strength': 1.5,
'tex_slat_sampling_steps': 20,
'decimation_target': 1000000,
'texture_size': '4096',
'remesh': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "trellis-2",
"cost": 45,
"balance_after": 955,
"created_at": "2026-09-30T21:29:04Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "trellis-2",
"cost": 45,
"created_at": "2026-09-30T21:29:04Z",
"completed_at": "2026-09-30T21:31:06Z",
"result": {
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/trellis-2/model.glb",
"name": "result"
}
]
},
"error_message": null
}
Сохраните 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.files[0].url)
} else if (operation.status === 'failed') {
console.error(operation.error_message)
}
Обычно модель готова за 1-2,5 минуты: наш запуск в разрешении 512 занял 2 минуты. Опрашивайте статус раз в 5-10 секунд (не чаще раза в секунду для одной операции), пока он не станет completed или failed.
{
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/trellis-2/model.glb",
"name": "result"
}
]
}
type - всегда "file".files - массив из одного файла. url - ссылка на модель, name - служебное имя "result" без расширения.EXT_texture_webp). Современные движки и просмотрщики его понимают. Если ваш инструмент показывает модель без цвета, перепакуйте текстуры в PNG, например через glTF-Transform.Для ориентира: в нашей проверке со стандартными настройками и разрешением 512 получился GLB на 18 МБ - около 340 000 вершин, 485 000 треугольников и две текстуры 2048×2048. Чтобы получить файл легче, используйте use_advanced: true с меньшими decimation_target и texture_size.
Цена зависит только от resolution и списывается за одну модель:
resolution | Цена за модель |
|---|---|
512 | 45 ₽ |
1024 | 50 ₽ |
1536 | 55 ₽ |
Дополнительные параметры (use_advanced, шаги, размер текстуры, число вершин, remesh) на цену не влияют.
Стоимость списывается при создании операции и возвращается в поле cost.
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и снова списывает деньги.queued, затем проверяете статус по id.image_url принимает только внешние http/https ссылки с расширениями .jpg, .jpeg, .png, .webp, которые открываются без авторизации. Ссылки на localhost и внутренние адреса сети не принимаются.validation_error.use_advanced: true тонкие параметры не отправляются в модель, даже если вы их передали. Это удобно: можно держать их в конфиге и включать одним флагом.